4

私は、avcodec がその AVFrame データにアラインされていないメモリを使用することを強制するオプションを高低で検索してきました。

ピクセル フォーマットによっては、AVFrame->data の水平面が余分なデータでパディングされ、パフォーマンスのためにメモリに配置される場合があります。

例: ピクセルあたり 4 バイトの 1920 * 1080 ビデオは、プレーンあたり 1920 * 4 = 7680 バイトになります。

このビデオをデコードする場合、avcodec を使用すると、プレーンごとに 7808 バイトが作成されます。

これにより、7808 - 7680 = 128 バイトの余分なパディングが追加されます。

私の目的のために、avcodec にアラインされていないデータを使用させて、フレーム データの連続したチャンク全体をコピーできるようにしたいと考えています。

ヘッダーに次のフラグが見つかりました。

/* encoding support
   These flags can be passed in AVCodecContext.flags before initialization.
   Note: Not everything is supported yet.
*/

/**
 * Allow decoders to produce frames with data planes that are not aligned
 * to CPU requirements (e.g. due to cropping).
 */
#define CODEC_FLAG_UNALIGNED 0x0001

この AVCodecContext.flags を CODEC_FLAG_UNALIGNED に設定すると、AVFrame->data が整列されていないことが想定されますが、そうではありません。

正しい場所を見ているのか、このフラグを正しく使用しているのかわかりません。

よろしく、

おさるのジョージ

4

2 に答える 2

0

で重要なことffmpegは、定義されたオプションを実際に気にするものを常にチェックすることです。多くのコーデックが実際にこのフラグを使用しているようには見えません:

~/sources/ffmpeg-2.1.1> find libavcodec/ -name \*.c | xargs grep CODEC_FLAG_UNALIGNED
libavcodec/hevc_ps.c:        !(s->avctx->flags & CODEC_FLAG_UNALIGNED)) {
libavcodec/h264_ps.c:                !(h->avctx->flags & CODEC_FLAG_UNALIGNED)) {
~/sources/ffmpeg-2.1.1>
于 2014-01-29T09:26:44.633 に答える