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
|
#endif
|
||||||
#if VPX_ENCODER_ABI_VERSION >= 12
|
#if VPX_ENCODER_ABI_VERSION >= 12
|
||||||
[VP9E_SET_TARGET_LEVEL] = "VP9E_SET_TARGET_LEVEL",
|
[VP9E_SET_TARGET_LEVEL] = "VP9E_SET_TARGET_LEVEL",
|
||||||
|
[VP9E_GET_LEVEL] = "VP9E_GET_LEVEL",
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -264,10 +265,41 @@ static av_cold int codecctl_int(AVCodecContext *avctx,
|
||||||
return res == VPX_CODEC_OK ? 0 : AVERROR(EINVAL);
|
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)
|
static av_cold int vpx_free(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
VPxContext *ctx = avctx->priv_data;
|
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);
|
vpx_codec_destroy(&ctx->encoder);
|
||||||
if (ctx->is_alpha)
|
if (ctx->is_alpha)
|
||||||
vpx_codec_destroy(&ctx->encoder_alpha);
|
vpx_codec_destroy(&ctx->encoder_alpha);
|
||||||
|
|
Loading…
Reference in New Issue