mirror of https://git.ffmpeg.org/ffmpeg.git
libvpxenc: Report encoded VP9 level
Report the actual level of the encoded output if a level is targeted or the level is passively tracked with a target of 0.
This commit is contained in:
parent
afb84857bf
commit
8899057d91
|
@ -137,6 +137,7 @@ static const char *const ctlidstr[] = {
|
|||
#endif
|
||||
#if VPX_ENCODER_ABI_VERSION >= 12
|
||||
[VP9E_SET_TARGET_LEVEL] = "VP9E_SET_TARGET_LEVEL",
|
||||
[VP9E_GET_LEVEL] = "VP9E_GET_LEVEL",
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
@ -264,10 +265,41 @@ static av_cold int codecctl_int(AVCodecContext *avctx,
|
|||
return res == VPX_CODEC_OK ? 0 : AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
#if VPX_ENCODER_ABI_VERSION >= 12
|
||||
static av_cold int codecctl_intp(AVCodecContext *avctx,
|
||||
enum vp8e_enc_control_id id, int *val)
|
||||
{
|
||||
VPxContext *ctx = avctx->priv_data;
|
||||
char buf[80];
|
||||
int width = -30;
|
||||
int res;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s:", ctlidstr[id]);
|
||||
av_log(avctx, AV_LOG_DEBUG, " %*s%d\n", width, buf, *val);
|
||||
|
||||
res = vpx_codec_control(&ctx->encoder, id, val);
|
||||
if (res != VPX_CODEC_OK) {
|
||||
snprintf(buf, sizeof(buf), "Failed to set %s codec control",
|
||||
ctlidstr[id]);
|
||||
log_encoder_error(avctx, buf);
|
||||
}
|
||||
|
||||
return res == VPX_CODEC_OK ? 0 : AVERROR(EINVAL);
|
||||
}
|
||||
#endif
|
||||
|
||||
static av_cold int vpx_free(AVCodecContext *avctx)
|
||||
{
|
||||
VPxContext *ctx = avctx->priv_data;
|
||||
|
||||
#if VPX_ENCODER_ABI_VERSION >= 12
|
||||
if (ctx->level >= 0 && !(avctx->flags & AV_CODEC_FLAG_PASS1)) {
|
||||
int level_out = 0;
|
||||
if (!codecctl_intp(avctx, VP9E_GET_LEVEL, &level_out))
|
||||
av_log(avctx, AV_LOG_INFO, "Encoded level %.1f\n", level_out * 0.1);
|
||||
}
|
||||
#endif
|
||||
|
||||
vpx_codec_destroy(&ctx->encoder);
|
||||
if (ctx->is_alpha)
|
||||
vpx_codec_destroy(&ctx->encoder_alpha);
|
||||
|
|
Loading…
Reference in New Issue