diff mbox series

[FFmpeg-devel] avcodec/libvpxenc: return quantizer parameter for an encoded frame

Message ID 20220324172524.1191986-1-danilchap@google.com
State New
Headers show
Series [FFmpeg-devel] avcodec/libvpxenc: return quantizer parameter for an encoded frame | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_aarch64_jetson success Make finished
andriy/make_fate_aarch64_jetson success Make fate finished
andriy/make_armv7_RPi4 success Make finished
andriy/make_fate_armv7_RPi4 success Make fate finished

Commit Message

Danil Chapovalov March 24, 2022, 5:25 p.m. UTC
---
 libavcodec/libvpxenc.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Danil Chapovalov April 1, 2022, 9:53 a.m. UTC | #1
Ping

On Thu, Mar 24, 2022 at 6:26 PM Danil Chapovalov <danilchap@google.com> wrote:
>
> ---
>  libavcodec/libvpxenc.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
> index dff1d06b0e..5db31db5dc 100644
> --- a/libavcodec/libvpxenc.c
> +++ b/libavcodec/libvpxenc.c
> @@ -1250,6 +1250,7 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
>      int ret = ff_get_encode_buffer(avctx, pkt, cx_frame->sz, 0);
>      uint8_t *side_data;
>      int pict_type;
> +    int quality;
>
>      if (ret < 0)
>          return ret;
> @@ -1264,7 +1265,13 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
>          pict_type = AV_PICTURE_TYPE_P;
>      }
>
> -    ff_side_data_set_encoder_stats(pkt, 0, cx_frame->sse + 1,
> +    ret = vpx_codec_control(&((VPxContext *)avctx->priv_data)->encoder,
> +                            VP8E_GET_LAST_QUANTIZER_64, &quality);
> +    if (ret != VPX_CODEC_OK) {
> +        quality = 0;
> +    }
> +
> +    ff_side_data_set_encoder_stats(pkt, quality, cx_frame->sse + 1,
>                                     cx_frame->have_sse ? 3 : 0, pict_type);
>
>      if (cx_frame->have_sse) {
> --
> 2.35.1.1021.g381101b075-goog
>
Anton Khirnov April 5, 2022, 10:03 a.m. UTC | #2
Quoting Danil Chapovalov (2022-03-24 18:25:24)
> ---
>  libavcodec/libvpxenc.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
> index dff1d06b0e..5db31db5dc 100644
> --- a/libavcodec/libvpxenc.c
> +++ b/libavcodec/libvpxenc.c
> @@ -1250,6 +1250,7 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
>      int ret = ff_get_encode_buffer(avctx, pkt, cx_frame->sz, 0);
>      uint8_t *side_data;
>      int pict_type;
> +    int quality;
>  
>      if (ret < 0)
>          return ret;
> @@ -1264,7 +1265,13 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
>          pict_type = AV_PICTURE_TYPE_P;
>      }
>  
> -    ff_side_data_set_encoder_stats(pkt, 0, cx_frame->sse + 1,
> +    ret = vpx_codec_control(&((VPxContext *)avctx->priv_data)->encoder,

The cast is really ugly, just add a local variable for priv_data.

> +                            VP8E_GET_LAST_QUANTIZER_64, &quality);
> +    if (ret != VPX_CODEC_OK) {
> +        quality = 0;
> +    }
> +
> +    ff_side_data_set_encoder_stats(pkt, quality, cx_frame->sse + 1,

other encoders multiply the quantizer by FF_QP2LAMBDA
diff mbox series

Patch

diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index dff1d06b0e..5db31db5dc 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -1250,6 +1250,7 @@  static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
     int ret = ff_get_encode_buffer(avctx, pkt, cx_frame->sz, 0);
     uint8_t *side_data;
     int pict_type;
+    int quality;
 
     if (ret < 0)
         return ret;
@@ -1264,7 +1265,13 @@  static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
         pict_type = AV_PICTURE_TYPE_P;
     }
 
-    ff_side_data_set_encoder_stats(pkt, 0, cx_frame->sse + 1,
+    ret = vpx_codec_control(&((VPxContext *)avctx->priv_data)->encoder,
+                            VP8E_GET_LAST_QUANTIZER_64, &quality);
+    if (ret != VPX_CODEC_OK) {
+        quality = 0;
+    }
+
+    ff_side_data_set_encoder_stats(pkt, quality, cx_frame->sse + 1,
                                    cx_frame->have_sse ? 3 : 0, pict_type);
 
     if (cx_frame->have_sse) {