[FFmpeg-devel] [PATCH V2] libavcodec/libx264 and libx265: add a flag to output ROI warnings only once.

Mark Thompson sw at jkqxz.net
Wed Sep 25 01:18:21 EEST 2019


On 23/09/2019 03:02, Guo, Yejun wrote:
> Signed-off-by: Guo, Yejun <yejun.guo at intel.com>
> ---
>  libavcodec/libx264.c | 16 ++++++++++++++--
>  libavcodec/libx265.c | 11 ++++++++++-
>  2 files changed, 24 insertions(+), 3 deletions(-)
> 
> diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
> index 86e3530..8788286 100644
> --- a/libavcodec/libx264.c
> +++ b/libavcodec/libx264.c
> @@ -99,6 +99,12 @@ typedef struct X264Context {
>  
>      int nb_reordered_opaque, next_reordered_opaque;
>      int64_t *reordered_opaque;
> +
> +    /**
> +     * If the encoder does not support ROI then warn the first time we
> +     * encounter a frame with ROI side data.
> +     */
> +    int roi_warned;
>  } X264Context;
>  
>  static void X264_log(void *p, int level, const char *fmt, va_list args)
> @@ -356,7 +362,10 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
>          sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST);
>          if (sd) {
>              if (x4->params.rc.i_aq_mode == X264_AQ_NONE) {
> -                av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
> +                if (!x4->roi_warned) {
> +                    x4->roi_warned = 1;
> +                    av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
> +                }
>              } else {
>                  if (frame->interlaced_frame == 0) {
>                      int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE;
> @@ -410,7 +419,10 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
>                      x4->pic.prop.quant_offsets = qoffsets;
>                      x4->pic.prop.quant_offsets_free = av_free;
>                  } else {
> -                    av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n");
> +                    if (!x4->roi_warned) {
> +                        x4->roi_warned = 1;
> +                        av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n");
> +                    }
>                  }
>              }
>          }
> diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c
> index 665b780..4e75077 100644
> --- a/libavcodec/libx265.c
> +++ b/libavcodec/libx265.c
> @@ -47,6 +47,12 @@ typedef struct libx265Context {
>      char *tune;
>      char *profile;
>      char *x265_opts;
> +
> +    /**
> +     * If the encoder does not support ROI then warn the first time we
> +     * encounter a frame with ROI side data.
> +     */
> +    int roi_warned;
>  } libx265Context;
>  
>  static int is_keyframe(NalUnitType naltype)
> @@ -310,7 +316,10 @@ static av_cold int libx265_encode_set_roi(libx265Context *ctx, const AVFrame *fr
>      AVFrameSideData *sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST);
>      if (sd) {
>          if (ctx->params->rc.aqMode == X265_AQ_NONE) {
> -            av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
> +            if (!ctx->roi_warned) {
> +                ctx->roi_warned = 1;
> +                av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
> +            }
>          } else {
>              /* 8x8 block when qg-size is 8, 16*16 block otherwise. */
>              int mb_size = (ctx->params->rc.qgSize == 8) ? 8 : 16;
> 

Yep, LGTM.  Split and applied.

Thanks,

- Mark


More information about the ffmpeg-devel mailing list