Comment convertir RVB de YUV420p pour encodeur ffmpeg?
Je veux faire .avi fichier vidéo à partir d'images bitmap en utilisant le code c++.
J'ai écrit le code suivant:
//Get RGB array data from bmp file
uint8_t* rgb24Data = new uint8_t[3*imgWidth*imgHeight];
hBitmap = (HBITMAP) LoadImage( NULL, _T("myfile.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetDIBits(hdc, hBitmap, 0, imgHeight, rgb24Data , (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
/* Allocate the encoded raw picture. */
AVPicture dst_picture;
avpicture_alloc(&dst_picture, AV_PIX_FMT_YUV420P, imgWidth, imgHeight);
/* Convert rgb24Data to YUV420p and stored into array dst_picture.data */
RGB24toYUV420P(imgWidth, imgHeight, rgb24Data, dst_picture.data); //How to implement this function?
//code for encode frame dst_picture here
Mon problème est de savoir comment mettre en œuvre RGB24toYUV420P()
fonction, cette fonction permet de convertir RGB24
des données à partir de la matrice de rgb24Data à YUV420p
et de les stocker dans un tableau dst_picture.data
pour l'encodeur ffmpeg?
source d'informationauteur TTGroup
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le SwScale
Quelque chose comme ceci:
Notez que vous devez créer une instance de la
SwsContext
objet qu'une seule fois, et non pas pour chaque image.