Permalänk
Medlem

Hjälp med libJpeg (c++)

Tjena!

Håller på och bråkar med libjpeg här. Det jag har är en buffer med en rå okomprimerad YUV videoframe nedsamplad till 4:2:2. Denna skulle jag vilja komprimera med libjpeg. Har tidigare använt libjpeg till att komprimera bilder ganska enkelt, men nu har jag alltså en bild som redan är nedsamplad. Libjpegs dokumentation beskriver detta lite kort i "3.11 Raw (downsampled) image data" (USING THE IJG JPEG LIBRARY), och jag förstår principen men listar inte ut hur sjutton detta genomförs i kod.

Är det nån som fipplat med detta innan? Mitt problem är mest vad gäller skapandet av en JSAMPIMAGE.

Tacksam för all input jag kan få.

Visa signatur

Core i7 7700K | Titan X (Pascal) | MSI 270I Gaming Pro Carbon | 32 GiB Corsair Vengeance LPX @3000MHz | Samsung 960 EVO 1TB

Permalänk
Medlem

Inte använt libjpej men det finns ett annat bildlibrary som heter CImg som jag brukar använda. Där görs sådant enormt enkelt genom typ.

CImg bild;

//ladda in data till bild

bild.saveJpeg("filnamn");

Kan vara värt att kolla på om det inte är ett krav att använda just libjpeg.

Permalänk
Medlem

Det är ett eget projekt, men har stora krav på prestanda (libjpeg-turbo). Sen ska den inte skrivas till en fil heller.

Vad jag lyckats få fram är att libjpeg helst vill ha alltihop bakat i en stor JSAMPIMAGE, vilket är en array av en JSAMPARRAY för varje färgkanal. I varje JSAMPARRAY vill den ha en JSAMPROW med en JSAMPLE för varje pixel.

Det enda sättet jag lyckats med detta är med ett gäng feting-for-loopar och memcpy() för att klistra in värdena, men det känns ju inte riktigt optimalt...

Visa signatur

Core i7 7700K | Titan X (Pascal) | MSI 270I Gaming Pro Carbon | 32 GiB Corsair Vengeance LPX @3000MHz | Samsung 960 EVO 1TB

Permalänk
Medlem

Aha! Fick äntligen till det! Det gällde tydligen att mata encodern med 16 rader i taget också, annars blev den tokig. Om nån nånsin blir hjälpt av detta så hittade jag lite exempelkod här till slut: http://www.lavrsen.dk/svn/motion/trunk/picture.c

Visa signatur

Core i7 7700K | Titan X (Pascal) | MSI 270I Gaming Pro Carbon | 32 GiB Corsair Vengeance LPX @3000MHz | Samsung 960 EVO 1TB