2

後で好きなときにデコードできるように、AVPacket のコピーを作成したいと思います。

AVPacket は、オーディオ ストリームからのものです。

av_dup_packet が機能していないようです。

AVPacket コピー コンストラクターが機能しません。

独自のコピー コンストラクターを作成すると、メモリが破損します。

4

3 に答える 3

5

AVPacket 構造をコピーする方法: (動作します)

AVPacket newPacket(oldPacket);
newPacket->data = reinterpret_cast<uint8_t*>(new uint64_t[(oldPacket->size + FF_INPUT_BUFFER_PADDING_SIZE)/sizeof(uint64_t) + 1]);
memcpy(newPacket->data, oldPacket->data, oldPacket->size);

その理由は、特定のデコーダーが、特定のバイト アラインメントとパディングを必要とする最適化を使用するためです。単純に oldPacket->size を割り当てるだけでは十分に割り当てられず、適切なバイト アラインメントで割り当てられません。

これは、たとえば priv が何か興味深いものに設定されている場合など、すべてのケースで機能するとは限らないことに注意してください。

于 2012-10-17T07:33:29.087 に答える