mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-17 04:17:05 +00:00
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.
This commit is contained in:
parent
eddfb57210
commit
ff35aa8ca4
@ -1116,6 +1116,7 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx)
|
|||||||
int rc_window_size;
|
int rc_window_size;
|
||||||
int hrd_buffer_size;
|
int hrd_buffer_size;
|
||||||
int hrd_initial_buffer_fullness;
|
int hrd_initial_buffer_fullness;
|
||||||
|
int fr_num, fr_den;
|
||||||
|
|
||||||
if (avctx->rc_buffer_size)
|
if (avctx->rc_buffer_size)
|
||||||
hrd_buffer_size = avctx->rc_buffer_size;
|
hrd_buffer_size = avctx->rc_buffer_size;
|
||||||
@ -1166,6 +1167,23 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx)
|
|||||||
ctx->global_params_size[ctx->nb_global_params++] =
|
ctx->global_params_size[ctx->nb_global_params++] =
|
||||||
sizeof(ctx->hrd_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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,6 +155,10 @@ typedef struct VAAPIEncodeContext {
|
|||||||
VAEncMiscParameterBuffer misc;
|
VAEncMiscParameterBuffer misc;
|
||||||
VAEncMiscParameterHRD hrd;
|
VAEncMiscParameterHRD hrd;
|
||||||
} hrd_params;
|
} hrd_params;
|
||||||
|
struct {
|
||||||
|
VAEncMiscParameterBuffer misc;
|
||||||
|
VAEncMiscParameterFrameRate fr;
|
||||||
|
} fr_params;
|
||||||
|
|
||||||
// Per-sequence parameter structure (VAEncSequenceParameterBuffer*).
|
// Per-sequence parameter structure (VAEncSequenceParameterBuffer*).
|
||||||
void *codec_sequence_params;
|
void *codec_sequence_params;
|
||||||
|
Loading…
Reference in New Issue
Block a user