[FFmpeg-devel] [PATCH 3/5] lavf/libkvazaar: export encoded frame stats

Joose Sainio joose.sainio at tuni.fi
Mon Aug 17 14:07:52 EEST 2020


On 7.8.2020 5.40, mypopy at gmail.com wrote:
> On Sun, Jul 26, 2020 at 8:45 PM Jun Zhao <mypopydev at gmail.com> wrote:
>> From: Jun Zhao <barryjzhao at tencent.com>
>>
>> Export choosen pict_type and qp.
>>
>> Signed-off-by: Jun Zhao <barryjzhao at tencent.com>
>> ---
>> libavcodec/libkvazaar.c | 30 ++++++++++++++++++++++++++++++
>> 1 file changed, 30 insertions(+)
>>
>> diff --git a/libavcodec/libkvazaar.c b/libavcodec/libkvazaar.c
>> index 71c9c8f..9032547 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;
>> }
>>
>> --
>> 2.7.4
>>
> ping ?
Sorry, I forgot I was subscribed to the list on the old organization
so the message didn't go through originally.

In terms of Kvazaar this seems ok but the QP to lambda conversion will 
result
in vastly different lambda value than what Kvazaar would have used
internally (and in fact the FF_QP2LAMBDA macro states it is for h.263).
I can't comment whether this is problem on the ffmpeg side.

The correct formula for hevc/h.265 would be
lambda = 0.57 * pow(2.0, (qp - 12 / 3.0))

- Joose





More information about the ffmpeg-devel mailing list