Как преобразовать AVFrame в текстуру, используемую glTexImage2D? - PullRequest
2 голосов
/ 05 апреля 2011

как вы знаете, у AVFrame есть 2 свойства: pFrame-> data, pFrame-> linesize. После того, как я прочитал кадр из видео /sdcard/test.mp4 (платформа Android) и преобразовал в RGB AVFrame тиски:

img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, 
                   pCodecCtx->pix_fmt, 
                   target_width, target_height, PIX_FMT_RGB24, SWS_BICUBIC, 
                   NULL, NULL, NULL);
            if(img_convert_ctx == NULL) {
                LOGE("could not initialize conversion context\n");
                return;
            }
            sws_scale(img_convert_ctx, (const uint8_t* const*)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

Я получаю pFrameRGB после конвертации. Мне нужно текстурировать его в opengl с помощью glTextImage2D:

// Create The Texture
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, data); 

// я не знаю, что данные здесь - это pFrameRGB-> data или нет, если нет, как конвертировать их в формат для glTextImage, чтобы я мог отображать видео в opengl, используя AVFrame и gltextImage2D. Все помощь от вас очень ценится.

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Две вещи: (1) это целевые значения и целевые высоты равны 2?Если нет, вы получите пустой экран.Вам нужно масштабировать изображение до степени 2. (2) где в glTexImage указано «данные», вам нужно использовать pFrameRGB-> data [0], как указал Киран.

Еще одна вещь, вам не нужно использовать RGBA (если это не быстрее. Я не проверял это).Если вы это сделаете, вы измените целевой формат ffmpeg на PIX_FMT_RGBA, а затем измените оба экземпляра GL_RGB на GL_RGBA.

Кроме этого, я не вижу ничего плохого в вашем коде.У меня почти такой же точный код, и он работает просто отлично.

1 голос
/ 05 апреля 2011

Фактические данные пикселей для pFrameRGB находятся в pFrameRGB-> data [0] ... В вашем вызове glTexImage2D используйте GL_RGBA вместо GL_RGB.Вот что я сделал, чтобы все заработало.Предполагая, что ваша текстура и координаты вершины созданы правильно, это должно заставить ее работать.Я могу опубликовать несколько примеров кода, если это не поможет.

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