[FFmpeg-devel] [PATCH 2/2] avformat: add avformat_flush()
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Wed Oct 1 07:59:12 CEST 2014
On 30.09.2014, at 22:25, wm4 <nfxjfg at googlemail.com> wrote:
> On Tue, 30 Sep 2014 08:06:16 +0200
> Reimar Döffinger <Reimar.Doeffinger at gmx.de> wrote:
>
>> On 29.09.2014, at 22:02, Michael Niedermayer <michaelni at gmx.at> wrote:
>>> On Mon, Sep 29, 2014 at 08:34:44PM +0200, wm4 wrote:
>>>> On Mon, 29 Sep 2014 20:25:47 +0200
>>>> Michael Niedermayer <michaelni at gmx.at> wrote:
>>>>
>>>>> On Mon, Sep 29, 2014 at 07:41:28PM +0200, wm4 wrote:
>>>>>> Useful for Bluray and DVD, since the libraries used to read them just
>>>>>> change the byte stream under your feet on seeking.
>>>>>>
>>>>>> Maybe there should be a AVInputFormat callback for this. But the
>>>>>> mpeg-ps (DVD) and the mpeg-ts (Bluray) demuxers don't change much
>>>>>> state during seeking - they just try to find a new packet with
>>>>>> timestamps (in read_timestamp), so I haven't found a need for this
>>>>>> yet. I don't want to add unused things.
>>>>>>
>>>>>> I've also thought about adding a flush callback, and implementing
>>>>>> them in mpeg.c and mpegts.c by just calling ff_read_frame_flush().
>>>>>> Might be slightly better, because you can have avformat_flush() fail
>>>>>> on formats which don't support this?
>>>>>>
>>>>>> Or maybe a flag?
>>>>>>
>>>>>> TODO: add entry to APIchanges, bump minor version.
>>>>>> ---
>>>>>> libavformat/avformat.h | 13 +++++++++++++
>>>>>> libavformat/utils.c | 6 ++++++
>>>>>> 2 files changed, 19 insertions(+)
>>>>>>
>>>>>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>>>>>> index 78054de..eaa52fa 100644
>>>>>> --- a/libavformat/avformat.h
>>>>>> +++ b/libavformat/avformat.h
>>>>>> @@ -2173,6 +2173,19 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp,
>>>>>> int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
>>>>>>
>>>>>> /**
>>>>>> + * Discard all internally buffered data. This can be useful when dealing with
>>>>>> + * discontinuities in the byte stream. Generally works only with some simple
>>>>>> + * formats.
>>>>>
>>>>> id call them stream based or without a central header instead of
>>>>> simple.
>>>>
>>>> I can change that and replace "simple" with "headerless".
>>>
>>> please do, headerless is more specific
>>
>> Why does it require headerless?
>> I would have expected this feature to work for e.g. Ogg as well, which clearly is not headerless.
>> As such I'd claim headerless may be more specific, but it is also wrong.
>> It should work for all formats that can be read without index and can resync reliably at least.
>
> Do you have any concrete suggestions? I'm not sure what documentation
> would be most appropriate.
Maybe "formats that can resync. This includes headerless formats like MPEG-TS/TS but should also work with NUT, Ogg and in a limited way AVI for example"
Not sure that's the best way to do it either though.
More information about the ffmpeg-devel
mailing list