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

Danil Chapovalov git at videolan.org
Tue Apr 5 18:20:30 EEST 2022


ffmpeg | branch: master | Danil Chapovalov <danilchap at google.com> | Tue Apr  5 16:20:46 2022 +0200| [53fd2d2203451434abd4ce22a758b1137edbe3fe] | committer: James Almer

avcodec/libvpxenc: return quantizer parameter for an encoded frame

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=53fd2d2203451434abd4ce22a758b1137edbe3fe
---

 libavcodec/libvpxenc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index dff1d06b0e..302f3bc55b 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -1247,9 +1247,11 @@ static inline void cx_pktcpy(struct FrameListData *dst,
 static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
                       AVPacket *pkt)
 {
+    VPxContext *ctx = avctx->priv_data;
     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 +1266,10 @@ 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(&ctx->encoder, VP8E_GET_LAST_QUANTIZER_64, &quality);
+    if (ret != VPX_CODEC_OK)
+        quality = 0;
+    ff_side_data_set_encoder_stats(pkt, quality * FF_QP2LAMBDA, cx_frame->sse + 1,
                                    cx_frame->have_sse ? 3 : 0, pict_type);
 
     if (cx_frame->have_sse) {



More information about the ffmpeg-cvslog mailing list