0

libavcodec ライブラリを iPhone アプリケーション プロジェクトに正常にインポートし、それを使用してムービー ファイルを YUV420P データにデコードし、ムービーのすべてのフレームを取得して RGB データに変換し、次の方法で表示できるようにしました。 OpenGLES.

ムービーは正常に再生できますが、YUV から RGB への変換と OpenGL (glDrawArrays) の表示方法が遅いため、かなり遅くなります。

ビデオを再生するよりスマートな方法はありますか (ムービーを libavcodec でデコードする必要があると仮定します)。YUV を直接表示するか、直接表示できる YUV のようなデータに変換しますか? または、glDrawArrays よりも高速な他の表示方法はありますか? Core Graphics で YUV データをロードできますか?

4

1 に答える 1

1

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);
    }
于 2012-01-31T20:50:00.023 に答える