[FFmpeg-devel] [PATCH 1/3][RFC] avutil/frame: add AV_FRAME_FLAG_DISPOSABLE

James Almer jamrial at gmail.com
Tue Aug 27 00:28:17 EEST 2019


On 8/26/2019 5:30 PM, Michael Niedermayer wrote:
> On Mon, Aug 26, 2019 at 05:23:22PM -0300, James Almer wrote:
>> On 8/26/2019 5:20 PM, Michael Niedermayer wrote:
>>> On Mon, Aug 26, 2019 at 01:17:25PM -0300, James Almer wrote:
>>>> Used to signal frames that can be safely discarded without losing
>>>> any picture data, side data, or metadata other than timing info.
>>>>
>>>> Signed-off-by: James Almer <jamrial at gmail.com>
>>>> ---
>>>> This implements the "disposable frame" solution to allow library
>>>> users to drop duplicate frames before further processing if desired,
>>>> instead of forcing decoders to output vfr content when cfr is coded
>>>> in the bitstream.
>>>>
>>>>  doc/APIchanges      | 3 +++
>>>>  libavutil/frame.h   | 5 +++++
>>>>  libavutil/version.h | 2 +-
>>>>  3 files changed, 9 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/doc/APIchanges b/doc/APIchanges
>>>> index 682b67aa25..b28d702bae 100644
>>>> --- a/doc/APIchanges
>>>> +++ b/doc/APIchanges
>>>> @@ -15,6 +15,9 @@ libavutil:     2017-10-21
>>>>  
>>>>  API changes, most recent first:
>>>>  
>>>> +2019-08-xx - xxxxxxxxxx - lavu 58.34.100 - avframe.h
>>>> +  Add AV_FRAME_FLAG_DISPOSABLE
>>>> +
>>>>  2019-08-xx - xxxxxxxxxx - lavf 58.31.101 - avio.h
>>>>    4K limit removed from avio_printf.
>>>>  
>>>> diff --git a/libavutil/frame.h b/libavutil/frame.h
>>>> index 5d3231e7bb..e1bf8795d2 100644
>>>> --- a/libavutil/frame.h
>>>> +++ b/libavutil/frame.h
>>>> @@ -522,6 +522,11 @@ typedef struct AVFrame {
>>>>   * A flag to mark the frames which need to be decoded, but shouldn't be output.
>>>>   */
>>>>  #define AV_FRAME_FLAG_DISCARD   (1 << 2)
>>>> +/**
>>>> + * A flag to indicate frames that can be discarded by the encoder. I.e. frames
>>>> + * that are an exact duplicate of the previous one.
>>>> + */
>>>
>>> ... exact duplicate of the previous one, except its timestamp and duration.
>>>
>>> maybe AV_FRAME_FLAG_DUPLICATE or AV_FRAME_FLAG_REPEATED would be clearer ?
>>
>> It might, but i wanted to use the same name as the AVPacket flag defined
>> in avcodec.h. If duplicate or repeated is preferred then i'll change it.
> 
> wouldnt this overload the meaning of "discard" ?
> where the AVPacket flag does not neccesarily indicate identical data
> but iam fine with any name really, the other names was just a thought that
> came to my mind when reading the patch ...

AV_PKT_FLAG_DISPOSABLE is currently used to signal packets with encoded
frames a decoder can safely drop without processing. Right now it's
being used only for non-ref B frames, but the doxy allows it to be
implemented for other use cases as well.
With AV_FRAME_FLAG_DISPOSABLE, the idea would be signaling a frame that
can in theory be dropped without affecting whatever the encoder, filter
or player handling them will output.

So ideally, both "disposable" flags, frame and packet, would be defined
in a generic enough way to essentially mean "a frame/packet that can be
dropped without putting the ongoing process at risk".
If we instead use "duplicate" or "repeated" here, then we're defining a
much bigger constrain regarding what the flag can be used for.

And both "discard" flags are currently pretty much internal flags used
by lavc's generic code to drop a frame after being decoded, ensuring
it's never output.

> 
> thx
> 
> [...]
> 
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> 



More information about the ffmpeg-devel mailing list