[FFmpeg-devel] [PATCH 2/3] avformat/avienc: add reserve_index_space option

Tobias Rapp t.rapp at noa-archive.com
Fri Jan 20 18:06:59 EET 2017


On 20.01.2017 15:56, Tobias Rapp wrote:
> On 19.01.2017 18:32, Michael Niedermayer wrote:
>> On Wed, Jan 18, 2017 at 10:27:02AM +0100, Tobias Rapp wrote:
>>> Allows the user to reserve space for the ODML master index. A sufficient
>>> sized master index in the AVI header avoids storing follow-up master
>>> indexes within the 'movi' data later.
>>>
>>> If the option is omitted or zero the index size is estimated from output
>>> duration and bitrate. A worst-case bitrate for video streams is assumed
>>> in case it is not available.
>>>
>>> Note: fate reference files changed because the video stream had zero
>>> bitrate before and is guessed now.
>>>
>>> Signed-off-by: Tobias Rapp <t.rapp at noa-archive.com>
>>> ---
>>>  libavformat/avi.h                       |  1 -
>>>  libavformat/avienc.c                    | 77
>>> ++++++++++++++++++++++++++++++---
>>>  libavformat/version.h                   |  2 +-
>>>  tests/ref/fate/mpeg4-bsf-unpack-bframes |  2 +-
>>>  tests/ref/lavf-fate/avi_cram            |  2 +-
>>>  5 files changed, 74 insertions(+), 10 deletions(-)
>>
>> this breaks segment:
>> ./ffmpeg -i lena.pnm -f segment test%d.avi
>>
>> possibly related to avi_init()
>
> Yes, I can reproduce the problem when going back to Git master and just
> adding a dummy init (see attached diff). Not sure how to fix this, other
> muxers also have an init but seem to work fine (mkv) ...

Apparently the codec_tag is cleared in seg_write_header() around line 811:

[...]
if (!oc->oformat->codec_tag ||
     av_codec_get_id (oc->oformat->codec_tag, ipar->codec_tag) == 
opar->codec_id ||
     av_codec_get_tag(oc->oformat->codec_tag, ipar->codec_id) <= 0) {
     opar->codec_tag = ipar->codec_tag;
} else {
     opar->codec_tag = 0;
}
[...]

See 
http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/segment.c;hb=HEAD#l811

If .init is unset, the header is written before the codec_tag is 
cleared. If .init is set, it is written after these lines.

Regards,
Tobias



More information about the ffmpeg-devel mailing list