diff options
author | Mark Thompson <sw@jkqxz.net> | 2016-11-29 22:12:46 +0000 |
---|---|---|
committer | Mark Thompson <sw@jkqxz.net> | 2017-02-08 19:14:05 +0000 |
commit | be6546a4ff592785d039df6cbdd7659781d30b2c (patch) | |
tree | a9036eaa59eed96d3dd9a15dc1b3a59c1ff5457c /libavcodec/vaapi_encode.c | |
parent | 2201c02e6dc9f9652a8e27dec194915f05954ad0 (diff) | |
download | ffmpeg-be6546a4ff592785d039df6cbdd7659781d30b2c.tar.gz |
vaapi_encode: Pass framerate parameters to driver
Only do this when building for a recent VAAPI version - initial
driver implementations were confused about the interpretation of the
framerate field, but hopefully this will be consistent everywhere
once 0.40.0 is released.
(cherry picked from commit ff35aa8ca4069bf1543adeec4c28e51e4a012eee)
Diffstat (limited to 'libavcodec/vaapi_encode.c')
-rw-r--r-- | libavcodec/vaapi_encode.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index e491b3cab8..070ff5f244 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -1116,6 +1116,7 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx) int rc_window_size; int hrd_buffer_size; int hrd_initial_buffer_fullness; + int fr_num, fr_den; if (avctx->bit_rate > INT32_MAX) { av_log(avctx, AV_LOG_ERROR, "Target bitrate of 2^31 bps or " @@ -1172,6 +1173,23 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx) ctx->global_params_size[ctx->nb_global_params++] = sizeof(ctx->hrd_params); + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) + av_reduce(&fr_num, &fr_den, + avctx->framerate.num, avctx->framerate.den, 65535); + else + av_reduce(&fr_num, &fr_den, + avctx->time_base.den, avctx->time_base.num, 65535); + + ctx->fr_params.misc.type = VAEncMiscParameterTypeFrameRate; + ctx->fr_params.fr.framerate = (unsigned int)fr_den << 16 | fr_num; + +#if VA_CHECK_VERSION(0, 40, 0) + ctx->global_params[ctx->nb_global_params] = + &ctx->fr_params.misc; + ctx->global_params_size[ctx->nb_global_params++] = + sizeof(ctx->fr_params); +#endif + return 0; } |