1. Classifique se você precisa de MIPS baixo ou de baixa complexidade geral.
Deixe-me ter uma pequena liberdade para dividir esse problema em duas partes.
- Codificação de baixa complexidade - que permite que recursos mais baixos (especialmente na memória) tornem a codificação de resposta rápida no sistema especificado.
- Baixo explícito na computação (MIPS). - que diz respeito apenas ao mínimo possível de ciclos de CPU.
Há um terceiro critério - onde as pessoas falam sobre "Baixa latência" - para aplicativos como videoconferência, onde os recursos computacionais podem não ser motivo de preocupação - mas o atraso geral introduzido pelos codificados
O que é importante observar que em sistemas de menor complexidade - o acesso à memória (velocidade e largura do barramento de memória) e, às vezes, as E / S são geralmente extremamente mais lentas, razão pela qual a classe de algoritmos MPEG sofre, mesmo que o algoritmo computacional possa ser simples.
Antes de julgar o requisito do codec, tente fazer um orçamento em termos de -
uma. Ciclos de CPU por segundo.
b. Memória máxima através da colocação.
c. Latência de IO
2. Você deve personalizar o MPEG em vez de reinventar.
Em geral - a classe de codecs MPEG oferece mecanismos muito flexíveis para fazer isso. Nesse sentido, você não precisa reinventar o codec tanto quanto prefere personalizar o MPEG 2 ou MPEG 4 para realizar seu trabalho.
Primeiro, vamos dizer o que todos os elementos tornam possível a compactação e organizá-los na ordem da complexidade:
- Estimativa de movimento e compensação de movimento. 1.a. Previsão de avanço (quadros P) 1.b. Previsão dupla (quadros B) 1.c. vetores de movimento de alta resolução
- Intra codificação - DCT (+ IDCT)
- Qunatization - e seleção do modo de codificador
- VLC - codificação de comprimento variável. (CABAC no H.264)
- Previsão coeficiente [No mpeg2 apenas a previsão DC - MPEG4 tem mais]
Na classe de algoritmos MPEG, a codificação baseada em DCT e o VLC se tornam praticamente obrigatórios sem muitas opções - mas o restante de todos os mecanismos é essencial
Por exemplo, a estimativa de movimento e a compensação de movimento são um dos elementos que mais consomem MIPS. Se você não tiver recursos para fazer isso - você pode simplesmente codificar todos os quadros como eu (o que o torna muito parecido com MJPEG - mas o decodificador MPEG padrão pode decodificar isso). Se você puder pagar um pouco mais de recursos - poderá fazer uma compensação de movimento trivial usando a diferença de quadros - em vez de enviar todos os quadros como Intra, poderá subtrair todos os blocos do bloco de quadros anterior; se a diferença for maior que o sinal original, envie-o como Intra.
Claro - tudo isso significaria que você perderá alguma eficiência prometida pelo codificador acima - mas acho que você está disposto a desistir disso!
EDIT:
você pode olhar para os seguintes codecs como bons pontos de referência:
MSSG: http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html
Bom para entender, mas pode ser o mais lento do mundo.
FFMPEG: http://ffmpeg.org/
Provavelmente o mais rápido do mundo. É bom começar como caixa preta, mas não tente alterar o código por dentro. Pode dar boas opções para controlar as coisas quando você usa a API da biblioteca. Ele já é portado em muitas plataformas - mas fazê-lo em uma nova pode ser uma tarefa.
FAME: http://fame.sourceforge.net/
Isso foi originalmente iniciado com o mesmo objetivo que você descreveu. No entanto, estou um pouco sem contato com isso - mas você pode tentar isso.
Xvid: http://www.xvid.org/
Este é o MPEG-4. Esse é um dos melhores equilíbrios entre código limpo e velocidade razoável. Deve ser mais fácil trabalhar com você se você ficar dentro do codificador.
JPEG: http://www.ijg.org/
Este é o JPEG. Essa é uma das melhores bibliotecas para portá-la entre plataformas. Além disso, o JPEG é inerentemente mais simples do que alguns aspectos do MPEG; portanto, você deve tentar isso primeiro. A maioria das câmeras no mundo provavelmente usou essa biblioteca como está - em vez de criar algo próprio!
Pode ser que eu esteja errado ao usar MPEG! Mas esse é um tipo de risco que vale a pena correr.
Provavelmente, a melhor medida para verificar se isso funcionará ou não é - tente fazer um DCT 8x8 padrão com quantização na sua imagem; otimizar exatamente isso. Se você é capaz de atingir quase o requisito em tempo real, acho que é bom fazer com todos os quadros All JPEG ou com todos os codecs MPEG. Se você está fora do alvo - então não vale a pena.