precisa criar um vídeo webm a partir de quadros RGB

Eu tenho um aplicativo que gera um monte de jpgs que eu preciso transformar em um vídeo de webm. Estou tentando obter meus dados rgb dos jpegs no exemplo vpxenc. Eu posso ver as formas básicas dos jpgs originais no vídeo de saída, mas tudo está colorido em verde (até mesmo os pixels que deveriam ser pretos são cerca da metade do verde) e todas as outras linhas de digitalização contêm algum lixo.

Estou tentando alimentá-lo com dados VPX_IMG_FMT_YV12, que suponho que esteja estruturado da seguinte forma:

para cada quadro Dados Y de 8 bits Médias de 8 bits de cada bloco de 2x2 V Médias de 8 bits de cada bloco de 2x2 U

Aqui está uma imagem de origem e uma captura de tela do vídeo que será lançado:

Imagens

É perfeitamente possível que eu esteja fazendo a conversão RGB-> YV12 incorretamente, mas mesmo se eu codificar apenas os dados Y de 8 bits e definir os blocos U e V como 0, o vídeo terá a mesma aparência. Basicamente, estou executando meus dados RGB por meio desta equação:

// (R, G, and B are 0-255)
float y = 0.299f*R + 0.587f*G + 0.114f*B;
float v = (R-y)*0.713f;
float u = (B-v)*0.565f;

.. e, em seguida, para produzir os valores filtrados 2x2 para U e V que escrevo em vpxenc, eu apenas faço (a + b + c + d) / 4, onde a, b, c, d são os valores U ou V de cada bloco de 2 x 2 pixels.

Então, eu estou pensando:

Existe uma maneira mais fácil (no código) de pegar dados RGB e alimentá-los com vpx_codec_encode para obter um bom vídeo de webm?

Minha conversão de RGB-> YV12 está errada em algum lugar?

Qualquer ajuda seria muito apreciada.

questionAnswers(2)

yourAnswerToTheQuestion