Проблема добавления логотипа к декодированным видеоданным - PullRequest
1 голос
/ 29 октября 2009

Это фрагмент кода для добавления логотипа в декодированное изображение YUV. (по ffmpeg). http://pastebin.com/md6c16c5

Это почти работает. Проблема только одна: иногда доска с логотипом сильно перепутана с окружающей частью. Самое странное, что иногда это работает нормально, а иногда нет.

Код изменил бы AVFrame, выделенный ffmpeg. Это вызвало бы проблему?

    void    OsdLogo(AVFrame* picture, unsigned char *pBufLogo, int xPos, int yPos)
{
    unsigned char * pYBuf   = picture->data[0];
    unsigned char * pUBuf       = picture->data[1];
    unsigned char * pVBuf       = picture->data[2];
    unsigned char * pBufLogoY = pBufLogo;
    unsigned char * pBufLogoU = pBufLogo+180*52;
    unsigned char * pBufLogoV = pBufLogoU+180*52/4;
    int i,j;
    if ((xPos&0x01)!=0)
    {
        xPos&=(~0x01);
    }
    if ((yPos&0x01)!=0)
    {
        yPos&=(~0x01);
    }
    pYBuf+=(yPos*picture->linesize[0]+xPos);
    pUBuf+=(yPos*picture->linesize[0]/4+xPos/2);
    pVBuf+=(yPos*picture->linesize[0]/4+xPos/2);
    for (i=0; i < 52 ; i+=2)
    {
        for(j=0; j < 180 ; j+=2)
        {
            if ((*pBufLogo)<205)
            {
                //Y
                *(pYBuf+picture->linesize[0]) = *(pBufLogo);
                *pYBuf++ = *pBufLogo;
                *(pYBuf+picture->linesize[0]) = *(pBufLogo);
                *pYBuf++ = *pBufLogo;
                //U
                (*pUBuf++) =(*pBufLogoU++);
                //V
                (*pVBuf++) =(*pBufLogoV++);
            }
            else
            {
                pYBuf+=2;
                pUBuf++;
                pVBuf++;
                pBufLogoU++;
                pBufLogoV++;
            }
            pBufLogo+=2;
        }
        pYBuf+=(picture->linesize[0]-180+picture->linesize[0]);
        pUBuf+=((picture->linesize[0]-180)/2);
        pVBuf+=((picture->linesize[0]-180)/2);
        pBufLogo+=180;
    }
}

1 Ответ

1 голос
/ 29 октября 2009

Вот реализация альфа-смешанных водяных знаков для интерфейса vhook ffmpeg, которая похожа на то, что вы делаете, поэтому может быть полезна.

http://refractalize.blogspot.com/2009/09/alpha-blended-watermarks-with-ffmpeg.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...