J'essaye de convertir un vecteur de données d'image RVB (dérivé d'une image .png) au format YUV420p en utilisant libav.Encoder rgb à yuv420p en utilisant libav
Dans l'exemple de code de libav ce qui suit est utilisé pour créer une image fictive:
/* prepare a dummy image */
static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)
{
int x, y, i;
i = frame_index;
/* Y */
for(y=0;y<height;y++) {
for(x=0;x<width;x++) {
pict->data[0][y * pict->linesize[0] + x] = x + y + i * 3;
}
}
/* Cb and Cr */
for(y=0;y<height/2;y++) {
for(x=0;x<width/2;x++) {
pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
}
}
}
Je ne suis pas clair sur quelques petites choses ici:
Tout d'abord, dois-je réorganiser le RGB données dans le vecteur d'entrée de sorte qu'il est adapté pour l'encodage comme YUV420p? Deuxièmement, je comprends qu'il y a une valeur Y pour chaque pixel et que les valeurs Cb et Cr sont utilisées pour quatre (2x2) pixels. Ce que je ne comprends pas, c'est comment les données RVB sont "réduites" aux valeurs Cb et Cr - y a-t-il un exemple de comment faire cela n'importe où?
Tout d'abord, merci pour votre réponse. Je travaille sur le programme d'animation OS Pencil2D. En ce moment j'essaye d'obtenir l'exportation de dossier fonctionnant. En tant que test, j'ai voulu encoder un fichier vidéo en utilisant une seule image (c'est-à-dire 2 secondes d'une image statique). – user2063909