When parsing a fragmented MP4 with the use_mfra_for option set so that the mfra box is parsed we currently continue to parse all the top level boxes in the mp4. We also avoid using the index in mov_seek_fragment unless the fragment index is marked as complete, which the mfra parsing code never does.
This updates the mfra parsing code to mark the fragment index as complete, similar to the way the sidx parsing code does. With this change in place mov_read_default stops parsing top level boxes in a fragmented mp4 and uses the mfra data for mov_seek_fragment calls (assuming a use_mfra_for option is passed). When loading the file over a network this results in significantly better performance since avformat_open_input doesn't require a scan of the entire file. Signed-off-by: Aaron Boushley <boush...@gmail.com> --- libavformat/mov.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index ec57a05803..1def594626 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -7344,6 +7344,8 @@ static int mov_read_mfra(MOVContext *c, AVIOContext *f) if (ret < 0) goto fail; } while (!ret); + + c->frag_index.complete = 1; ret = 0; fail: seek_ret = avio_seek(f, original_pos, SEEK_SET); -- 2.18.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel