summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Cooper <bobobo@google.com>2016-03-07 15:47:56 -0800
committerTimo Rothenpieler <timo@rothenpieler.org>2016-03-08 10:41:07 +0100
commitfd55470c657ffd7cd5ac00a53ecd3224aa99d83b (patch)
tree96f278a81270ef384e9710ddb19f6794e43c2c44
parent50615791ca8cc4e33bccc23a31438f446c00920b (diff)
avcodec/nvenc: Add encoder stats
Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
-rw-r--r--libavcodec/nvenc.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 5d78930848..c001c9ea78 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -1186,6 +1186,8 @@ static int process_output_surface(AVCodecContext *avctx, AVPacket *pkt, NvencOut
NVENCSTATUS nv_status;
int res = 0;
+ enum AVPictureType pict_type;
+
switch (avctx->codec->id) {
case AV_CODEC_ID_H264:
slice_mode_data = ctx->encode_config.encodeCodecConfig.h264Config.sliceModeData;
@@ -1230,28 +1232,33 @@ static int process_output_surface(AVCodecContext *avctx, AVPacket *pkt, NvencOut
switch (lock_params.pictureType) {
case NV_ENC_PIC_TYPE_IDR:
pkt->flags |= AV_PKT_FLAG_KEY;
-#if FF_API_CODED_FRAME
-FF_DISABLE_DEPRECATION_WARNINGS
case NV_ENC_PIC_TYPE_I:
- avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
+ pict_type = AV_PICTURE_TYPE_I;
break;
case NV_ENC_PIC_TYPE_P:
- avctx->coded_frame->pict_type = AV_PICTURE_TYPE_P;
+ pict_type = AV_PICTURE_TYPE_P;
break;
case NV_ENC_PIC_TYPE_B:
- avctx->coded_frame->pict_type = AV_PICTURE_TYPE_B;
+ pict_type = AV_PICTURE_TYPE_B;
break;
case NV_ENC_PIC_TYPE_BI:
- avctx->coded_frame->pict_type = AV_PICTURE_TYPE_BI;
+ pict_type = AV_PICTURE_TYPE_BI;
break;
default:
av_log(avctx, AV_LOG_ERROR, "Unknown picture type encountered, expect the output to be broken.\n");
av_log(avctx, AV_LOG_ERROR, "Please report this error and include as much information on how to reproduce it as possible.\n");
res = AVERROR_EXTERNAL;
goto error;
+ }
+
+#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(pkt,
+ (lock_params.frameAvgQP - 1) * FF_QP2LAMBDA, NULL, 0, pict_type);
pkt->pts = lock_params.outputTimeStamp;
pkt->dts = timestamp_queue_dequeue(&ctx->timestamp_list);