Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Marton Balint <cus@passwd.hu>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
Date: Fri, 8 Dec 2023 00:11:21 +0100 (CET)
Message-ID: <85f4ba43-ab24-2598-6346-28dfef2ee88e@passwd.hu> (raw)
In-Reply-To: <170196664712.8914.15749136255711961223@lain.khirnov.net>



On Thu, 7 Dec 2023, Anton Khirnov wrote:

> Quoting Marton Balint (2023-12-06 09:22:20)
>> Signed-off-by: Marton Balint <cus@passwd.hu>
>> ---
>>  doc/APIchanges             |  3 +++
>>  doc/codecs.texi            | 14 ++++++++++++++
>>  libavcodec/avcodec.h       |  4 ++++
>>  libavcodec/decode.c        |  6 ++++++
>>  libavcodec/options_table.h |  1 +
>>  libavcodec/version.h       |  2 +-
>>  6 files changed, 29 insertions(+), 1 deletion(-)
>>
>> diff --git a/doc/APIchanges b/doc/APIchanges
>> index 416e2bec5e..f839504a64 100644
>> --- a/doc/APIchanges
>> +++ b/doc/APIchanges
>> @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09
>>
>>  API changes, most recent first:
>>
>> +2023-12-xx - xxxxxxxxxxx - lavc 60.36.100 - avcodec.h
>> +  Add AV_CODEC_FLAG_CLEAR.
>
> I'm not a huge fan of calling it just 'clear'. How about something more
> descriptive like 'wipe_frames'.

Wipe reminds me of the wipe effect. How about 'predecode_clear'?

>> +
>>  2023-12-xx - xxxxxxxxxxx - lavu 58.33.100 - imgutils.h
>>    Add av_image_fill_color()
>>
>> diff --git a/doc/codecs.texi b/doc/codecs.texi
>> index 5b950b4560..0504a535f2 100644
>> --- a/doc/codecs.texi
>> +++ b/doc/codecs.texi
>> @@ -76,6 +76,20 @@ Apply interlaced motion estimation.
>>  Use closed gop.
>>  @item output_corrupt
>>  Output even potentially corrupted frames.
>> +@item clear
>> +Clear the contents of the video buffer before decoding the next picture to it.
>> +
>> +Usually if only a part of a picture is affected by a decode error then the
>> +decoder (if it implements error concealment) tries to hide it by interpolating
>> +pixels from neighbouring areas or in some cases from the previous frame. Even
>> +without error concealment it is quite likely that the affected area will
>> +contain pixels from an earlier frame, due to frame pooling.
>> +
>> +For quality checking this might not be desirable, because it makes the errors
>> +less noticable. By using this flag, and combining it with disabled error
>> +concealment (@code{-ec 0}) it is possible to ensure that no leftover data from
>> +an earlier frame is presented in areas affected by decode errors.
>> +
>>  @end table
>>
>>  @item time_base @var{rational number}
>> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
>> index 7fb44e28f4..97848e942f 100644
>> --- a/libavcodec/avcodec.h
>> +++ b/libavcodec/avcodec.h
>> @@ -312,6 +312,10 @@ typedef struct RcOverride{
>>   * loop filter.
>>   */
>>  #define AV_CODEC_FLAG_LOOP_FILTER     (1 << 11)
>> +/**
>> + * Clear frame buffer contents before decoding.
>
> Clear the contents of each frame buffer after it is allocated with
> AVCodecContext.get_buffer2() and before anything is decoded into it.
>
> Note that this may have a significant performance cost.

ok.

>
>> + */
>> +#define AV_CODEC_FLAG_CLEAR           (1 << 12)
>>  /**
>>   * Only decode/encode grayscale.
>>   */
>> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
>> index 2cfb3fcf97..f9b18a2c35 100644
>> --- a/libavcodec/decode.c
>> +++ b/libavcodec/decode.c
>> @@ -1675,6 +1675,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>
>>      validate_avframe_allocation(avctx, frame);
>>
>> +    if (avctx->flags & AV_CODEC_FLAG_CLEAR && avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
>> +        uint32_t color[4] = {0};
>> +        ptrdiff_t linesize[4] = {frame->linesize[0], frame->linesize[1], frame->linesize[2], frame->linesize[3]};
>> +        av_image_fill_color(frame->data, linesize, frame->format, color, frame->width, frame->height);
>
> Should this check for errors?

Lack of error checking is intentional. av_image_fill_color might not 
support all pixel formats, definitely not support hwaccel formats. It 
might make sense to warn the user once, but I don't think propagating the 
error back is needed here.

I primarily thought of this as a QC feature (even thought about making the 
color fill green by default to make it more noticeable (YUV green happens 
to be 0,0,0), but for that I'd need similar checks for colorspaces to 
what I have for fill_black())...

Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2023-12-07 23:11 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
2023-12-03 23:47   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
2023-12-04  0:23   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
2023-12-04  0:52   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function Marton Balint
2023-12-04  1:04   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
2023-12-04  1:07   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
2023-12-03 21:31 ` [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini
2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
2023-12-06 22:46       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
2023-12-06 22:47       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
2023-12-06 22:48       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 5/7] avutil/imgutils: factorize a fill color function Marton Balint
2023-12-06 22:52       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
2023-12-06 22:53       ` Stefano Sabatini
2023-12-07 16:15       ` Anton Khirnov
2023-12-09 19:25         ` [FFmpeg-devel] [PATCH v3 " Marton Balint
2023-12-11 23:05           ` Stefano Sabatini
2023-12-12 18:45             ` Marton Balint
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
2023-12-06 22:57       ` Stefano Sabatini
2023-12-07  1:44       ` Ronald S. Bultje
2023-12-07 16:19         ` Anton Khirnov
2023-12-07 22:47           ` Marton Balint
2023-12-08  5:12             ` Rémi Denis-Courmont
2023-12-07  2:37       ` Vittorio Giovara
2023-12-07 16:30       ` Anton Khirnov
2023-12-07 23:11         ` Marton Balint [this message]
2023-12-11 20:49           ` Mark Thompson
2023-12-12 11:23           ` Anton Khirnov
2023-12-12 18:37             ` Marton Balint
2023-12-13  8:59               ` Anton Khirnov
2023-12-13 17:09                 ` Marton Balint
2023-12-14  8:03                   ` Anton Khirnov
2023-12-12 22:18             ` Michael Niedermayer
2023-12-06 22:43     ` [FFmpeg-devel] [PATCH v2 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=85f4ba43-ab24-2598-6346-28dfef2ee88e@passwd.hu \
    --to=cus@passwd.hu \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git