私のアプリケーションは、SDL + ffmpegライブラリ(exeツールではありません)を介してビデオを再生します。
ビデオにテキストを追加したい
ffmpegのVHOOKソースコードは、データをRGB32に変換することを示しています。YUVで直接できませんか?
ここに私の現在のコードがあります、私にいくつかの提案をお願いしますか?
SDL_Overlay * pOverlay = SDL_CreateYUVOverlay( pDecodedFrame->width
, pDecodedFrame->height
, SDL_YV12_OVERLAY
, pThis->m_pSurface
);
if( pOverlay != NULL )
{
SDL_LockYUVOverlay(pOverlay);
pSwsContext = sws_getCachedContext( pSwsContext
, pDecodedFrame->width
, pDecodedFrame->height
, pThis->m_pMediaFile->GetVideoPixcelFormat()
, pDecodedFrame->width
, pDecodedFrame->height
, PIX_FMT_YUV420P
, SWS_SPLINE
, NULL
, NULL
, NULL
);
AVPicture tPicture;
tPicture.data[0] = pOverlay->pixels[0];
tPicture.data[1] = pOverlay->pixels[2];
tPicture.data[2] = pOverlay->pixels[1];
tPicture.linesize[0] = pOverlay->pitches[0];
tPicture.linesize[1] = pOverlay->pitches[2];
tPicture.linesize[2] = pOverlay->pitches[1];
int nSliceHeight = sws_scale( pSwsContext
, pDecodedFrame->data
, pDecodedFrame->linesize
, 0
, pDecodedFrame->height
, tPicture.data
, tPicture.linesize
);
SDL_UnlockYUVOverlay(pOverlay);
VideoPicture tVideoPicture = {0};
tVideoPicture.pOverlay = pOverlay;
tVideoPicture.nWidth = pDecodedFrame->width;
tVideoPicture.nHeight = pDecodedFrame->height;
tVideoPicture.dbPTS = dbPTS;
pThis->m_pVideoPictureQueue.Append(tVideoPicture);
}