Как записать видеоданные YUV422 / YUV420 (буферы Y, U, V) в буфер карты воспроизведения видео? - PullRequest
3 голосов
/ 02 августа 2020

Я хочу отображать видео на карту воспроизведения видео, если формат пикселей - RGBA / BGRA, я могу записывать видеоданные в буфер карты, потому что это так просто, но если формат пикселей - YUV422 / YUV420, это непросто (при по крайней мере, для меня), и я не знаю, как записать 3 буфера данных Y, U, V в ОДИН буфер карты воспроизведения. Я погуглил, но не смог найти свой ответ.

Пожалуйста, посмотрите следующий мой фрагмент кода и комментарии:

       if(f== SDL_PIXELFORMAT_BGRA32)
        {
           ret = SDL_UpdateTexture(*tex, NULL, frame->data[0], frame->linesize[0]); //the SDL display video perfectly
          
           if (myCardBuffer)
            {
              int straid = frame->linesize[0] * frame->height;
                 memcpy(myCardBuffer, frame->data[0], straid); //card frame is bmdFormat8BitBGRA and works perfectly
            }
        }
        else  if (f == SDL_PIXELFORMAT_IYUV) //   Planar mode: Y + U + V  (3 planes) 
         {
                ret = SDL_UpdateYUVTexture(*tex, NULL,
                    frame->data[0], frame->linesize[0],frame->data[1], frame->linesize[1],  frame->data[2], frame->linesize[2]);//the SDL display video perfectly
         
         if (myCardBuffer)
            {
                  //card frame is bmdFormat8BitYUV but I dont know how to write 3 Y,U,V data buffers to it 
            }
         }
        

и это информация о формате пикселей карты:

введите описание изображения здесь

Вопрос: Как записать видеоданные YUV422 / YUV420 (буферы Y, U, V) в буфер карты?

...