Имам приложение, което генерира куп jpgs, които трябва да превърна в webm видео. Опитвам се да вкарам моите rgb данни от jpegs във vpxenc извадката. Мога да видя основните форми от оригиналните jpg файлове в изходното видео, но всичко е оцветено в зелено (дори пикселите, които трябва да са черни, са около половината зелени) и във всяка друга линия за сканиране има някакъв боклук.
Опитвам се да му подам VPX_IMG_FMT_YV12 данни, които предполагам са структурирани така:
за всеки кадър 8-битови Y данни 8-битови средни стойности на всеки 2x2 V блок 8-битови средни стойности на всеки 2x2 U блок
Ето изходно изображение и екранна снимка на видеоклипа, който излиза:
Напълно възможно е да правя преобразуването RGB->YV12 неправилно, но дори ако кодирам само 8-битовите Y данни и задам U и V блоковете на 0, видеото изглежда почти същото. По принцип пускам моите RGB данни чрез това уравнение:
// (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;
.. и след това, за да създам 2x2 филтрираните стойности за U и V, които записвам във vpxenc, просто правя (a + b + c + d) / 4, където a,b,c,d са U или V стойностите на всеки 2x2 пикселен блок.
Така че се чудя:
Има ли по-лесен начин (в код) да вземете RGB данни и да ги подадете към vpx_codec_encode, за да получите хубаво webm видео?
Грешно ли е преобразуването ми RGB->YV12 някъде?
Всяка помощ ще бъде високо оценена.