Как отобразить данные YUV420P? - PullRequest
0 голосов
/ 12 августа 2011

Я успешно импортировал библиотеку libavcodec в проект приложения iPhone и использовал ее для декодирования файла фильма в данные YUV420P, чтобы я мог получить все кадры фильма, а затем преобразовать их в данные RGB, и поэтомубудет отображаться в OpenGL ES.

Фильм может быть успешно воспроизведен, но он довольно медленный, поскольку преобразование из YUV в RGB и метод отображения OpenGL (glDrawArrays) медленный.

Есть ликакой-нибудь более умный способ воспроизвести видео (предполагая, что фильм должен быть декодирован libavcodec)?Как отображать YUV напрямую или преобразовывать в YUV-подобные данные, которые можно отображать напрямую?Или другой метод отображения быстрее, чем glDrawArrays?Могут ли данные YUV загружаться Core Graphics?

1 Ответ

1 голос
/ 01 февраля 2012

Попробуйте преобразовать YUV в RGB. Что-то вроде:

img_convert_ctx = sws_getContext(320, 
                192,
                                                         PIX_FMT_YUV420P,
                                                         480, 
                                                         320,
                                                         PIX_FMT_RGB24,
                                                         sws_flags, NULL, NULL, NULL);

и затем:

if (frameData->data[0]) {
        sws_scale (img_convert_ctx, frameData->data, frameData->linesize,
                   0, 192,
                   picture.data, picture.linesize);
    }
...