Водяной знак Sdd для видеоданных YUV (SDL_Overlay) программно

Мое приложение воспроизводит видео через библиотеку SDL + ffmpeg (не инструмент exe).

и я хочу добавить текст на видео

исходный код VHOOK ffmpeg показывает, что он преобразует данные в 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);
}

person Mr.Wang from Next Door    schedule 02.09.2012    source источник


Ответы (1)


Да, вы можете просто написать цикл foreach для цикла по пикселям YUV (YUV — это в основном яркость + цветность), вам нужна небольшая обработка, чтобы преобразовать данные RGB (изображение водяного знака) в YUV и объединить их. Это будет не так сложно, но вам нужно понять, как смешивать и конвертировать rgb в yuv420p.

person Erti-Chris Eelmaa    schedule 02.09.2012