On Wed, Jul 27, 2016 at 7:25 AM, Michael Niedermayer <mich...@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 >> <mich...@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@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel