[FFmpeg-devel] [PATCH] avformat/fivdec: cached keyframes before video or audio stream was created

Michael Niedermayer michael at niedermayer.cc
Wed Jul 27 02:25:17 EEST 2016


On Wed, Jul 27, 2016 at 01:31:29AM +0800, XinZheng Zhang wrote:
> On Wed, Jul 27, 2016 at 1:12 AM, Michael Niedermayer
> <michael at niedermayer.cc> wrote:
> > On Tue, Jul 26, 2016 at 08:17:46PM +0800, Xinzheng Zhang wrote:
[...]
> >> +
> >> +    AVStream *streams[2] = {vstream, astream};
> >> +    for (i = 0; i < 2; i++) {
> >> +        current_stream = streams[i];
> >> +        if (current_stream && current_stream->nb_index_entries==0) {
> >> +            for (j = 0; j < flv->keyframe_count; j++) {
> >> +                av_add_index_entry(current_stream, flv->keyframe_filepositions[j], flv->keyframe_times[j] * 1000,
> >> +                                   0, 0, AVINDEX_KEYFRAME);
> >> +            }
> >> +        }
> >> +    }
> >> +
> >> +    // free keyframe index only if all expected streams have been created
> >> +    if (((vstream && vstream->nb_index_entries>0) || !flv->vhead_exists) &&
> >> +        ((astream && astream->nb_index_entries>0) || !flv->ahead_exists)) {
> >> +        av_freep(&flv->keyframe_times);
> >> +        av_freep(&flv->keyframe_filepositions);
> >> +        flv->keyframe_count = 0;
> >> +    }
> >> +}
> >
> > spliting add_keyframes_index() out must be in a seperate patch
> >
> > also i would not trust the *head_exists flags, IIRC they can be
> > wrong and they are not needed
> > the function should just take the table load it with
> > av_add_index_entry() and free the table.
> > The rest should not be needed
> > should be much simpler unless iam missing something
> >
> >
> 
> If I don't trust the head_exists flags, when should I free the index table?
> Should I keep the index util both a\v stream have been loaded or keep
> it util the flv_read_close().

the table was freed after av_add_index_entry()
that should still work fine unless i miss somethig

some cleanup code at close might be needed to catch error conditions
so theres never a memleak

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Dictatorship naturally arises out of democracy, and the most aggravated
form of tyranny and slavery out of the most extreme liberty. -- Plato
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160727/972a9471/attachment.sig>


More information about the ffmpeg-devel mailing list