aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJun Zhao <barryjzhao@tencent.com>2020-07-26 10:43:10 +0800
committerJun Zhao <barryjzhao@tencent.com>2020-08-20 15:06:14 +0800
commitd5abb11738a3897681f5e1205659e0054180efe4 (patch)
treeef8be79dee4141b837a58819418343bb1582479f
parentc0aa3dfaa8ecdb85d735edef8b6b741fa074d44d (diff)
downloadffmpeg-d5abb11738a3897681f5e1205659e0054180efe4.tar.gz
lavc/libkvazaar: export encoded frame stats
Export choosen pict_type and qp. Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
-rw-r--r--libavcodec/libkvazaar.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/libavcodec/libkvazaar.c b/libavcodec/libkvazaar.c
index 71c9c8f77c..9032547678 100644
--- a/libavcodec/libkvazaar.c
+++ b/libavcodec/libkvazaar.c
@@ -37,6 +37,7 @@
#include "avcodec.h"
#include "internal.h"
+#include "packet_internal.h"
typedef struct LibkvazaarContext {
const AVClass *class;
@@ -170,6 +171,7 @@ static int libkvazaar_encode(AVCodecContext *avctx,
kvz_data_chunk *data_out = NULL;
uint32_t len_out = 0;
int retval = 0;
+ int pict_type;
*got_packet_ptr = 0;
@@ -257,6 +259,34 @@ static int libkvazaar_encode(AVCodecContext *avctx,
avpkt->flags |= AV_PKT_FLAG_KEY;
}
+ switch (frame_info.slice_type) {
+ case KVZ_SLICE_I:
+ pict_type = AV_PICTURE_TYPE_I;
+ break;
+ case KVZ_SLICE_P:
+ pict_type = AV_PICTURE_TYPE_P;
+ break;
+ case KVZ_SLICE_B:
+ pict_type = AV_PICTURE_TYPE_B;
+ break;
+ default:
+ av_log(avctx, AV_LOG_ERROR, "Unknown picture type encountered.\n");
+ return AVERROR_EXTERNAL;
+ }
+#if FF_API_CODED_FRAME
+FF_DISABLE_DEPRECATION_WARNINGS
+ avctx->coded_frame->pict_type = pict_type;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
+
+ ff_side_data_set_encoder_stats(avpkt, frame_info.qp * FF_QP2LAMBDA, NULL, 0, pict_type);
+
+#if FF_API_CODED_FRAME
+FF_DISABLE_DEPRECATION_WARNINGS
+ avctx->coded_frame->quality = frame_info.qp * FF_QP2LAMBDA;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
+
*got_packet_ptr = 1;
}