[FFmpeg-devel] [PATCH 4/5] lavc/openh264enc: export encoded frame stats
From: Jun Zhao Export choosen pict_type and qp. NOTE: now libopenh264enc always export the the average QP with zero. And I have opened a issue for libopenh264 in https://github.com/cisco/openh264/issues/3317 Signed-off-by: Jun Zhao --- libavcodec/libopenh264enc.c | 31 +++ 1 file changed, 31 insertions(+) diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index cf48566..5d934b4 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -31,6 +31,7 @@ #include "avcodec.h" #include "internal.h" +#include "packet_internal.h" #include "libopenh264.h" #if !OPENH264_VER_AT_LEAST(1, 6) @@ -376,6 +377,8 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, SSourcePicture sp = { 0 }; int size = 0, layer, first_layer = 0; int layer_size[MAX_LAYER_NUM_OF_FRAME] = { 0 }; +int pict_type; +SEncoderStatistics stat = { 0 }; sp.iColorFormat = videoFormatI420; for (i = 0; i < 3; i++) { @@ -426,6 +429,34 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, avpkt->pts = frame->pts; if (fbi.eFrameType == videoFrameTypeIDR) avpkt->flags |= AV_PKT_FLAG_KEY; + +(*s->encoder)->GetOption(s->encoder, ENCODER_OPTION_GET_STATISTICS, &stat); +switch (fbi.eFrameType) { +case videoFrameTypeIDR: +case videoFrameTypeI: +pict_type = AV_PICTURE_TYPE_I; +break; +case videoFrameTypeP: +pict_type = AV_PICTURE_TYPE_P; +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, stat.uiAverageFrameQP * FF_QP2LAMBDA, NULL, 0, pict_type); + +#if FF_API_CODED_FRAME +FF_DISABLE_DEPRECATION_WARNINGS +avctx->coded_frame->quality = stat.uiAverageFrameQP * FF_QP2LAMBDA; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + *got_packet = 1; return 0; } -- 2.7.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [PATCH 4/5] lavc/openh264enc: export encoded frame stats
From: Jun Zhao Export choosen pict_type and qp. NOTE: now libopenh264enc always export the the average QP with zero. And I have opened a issue for libopenh264 in https://github.com/cisco/openh264/issues/3317 Signed-off-by: Jun Zhao --- libavcodec/libopenh264enc.c | 31 +++ 1 file changed, 31 insertions(+) diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index cf48566..5d934b4 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -31,6 +31,7 @@ #include "avcodec.h" #include "internal.h" +#include "packet_internal.h" #include "libopenh264.h" #if !OPENH264_VER_AT_LEAST(1, 6) @@ -376,6 +377,8 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, SSourcePicture sp = { 0 }; int size = 0, layer, first_layer = 0; int layer_size[MAX_LAYER_NUM_OF_FRAME] = { 0 }; +int pict_type; +SEncoderStatistics stat = { 0 }; sp.iColorFormat = videoFormatI420; for (i = 0; i < 3; i++) { @@ -426,6 +429,34 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, avpkt->pts = frame->pts; if (fbi.eFrameType == videoFrameTypeIDR) avpkt->flags |= AV_PKT_FLAG_KEY; + +(*s->encoder)->GetOption(s->encoder, ENCODER_OPTION_GET_STATISTICS, &stat); +switch (fbi.eFrameType) { +case videoFrameTypeIDR: +case videoFrameTypeI: +pict_type = AV_PICTURE_TYPE_I; +break; +case videoFrameTypeP: +pict_type = AV_PICTURE_TYPE_P; +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, stat.uiAverageFrameQP * FF_QP2LAMBDA, NULL, 0, pict_type); + +#if FF_API_CODED_FRAME +FF_DISABLE_DEPRECATION_WARNINGS +avctx->coded_frame->quality = stat.uiAverageFrameQP * FF_QP2LAMBDA; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + *got_packet = 1; return 0; } -- 2.7.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".