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

XinZheng Zhang zhangxzheng at gmail.com
Wed Jul 27 04:56:02 EEST 2016


On Wed, Jul 27, 2016 at 7:25 AM, Michael Niedermayer
<michael at niedermayer.cc> wrote:
> 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
>

[meta]-[v]-[v]..........................[a]
In this case both video and audio stream share the same index table.
I am not know whether the audio stream exists until the first audio
packet parsed.
I thought that I should keep the index until all the streams have been loaded.

> 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
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list