mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-12-08 06:09:50 +00:00
avcodec/hw_base_encode: restrict size of next_prev
Some drivers are more strict about the size of the reference lists given (i.e. VAOn12 [1]). The next_prev list is used to handle multiple "L0" references in AV1 encode. Restrict the size of next_prev based on the value of ref_l0 when the GOP structure is initialized. [1] https://github.com/intel/cartwheel-ffmpeg/issues/278 v2: fix indentation issues
This commit is contained in:
parent
0a6388d1da
commit
bf9f921ef7
2 changed files with 9 additions and 2 deletions
|
|
@ -190,12 +190,12 @@ static void hw_base_encode_add_next_prev(FFHWBaseEncodeContext *ctx,
|
|||
return;
|
||||
}
|
||||
|
||||
if (ctx->nb_next_prev < MAX_PICTURE_REFERENCES) {
|
||||
if (ctx->nb_next_prev < ctx->ref_l0) {
|
||||
ctx->next_prev[ctx->nb_next_prev++] = pic;
|
||||
++pic->ref_count[0];
|
||||
} else {
|
||||
--ctx->next_prev[0]->ref_count[0];
|
||||
for (i = 0; i < MAX_PICTURE_REFERENCES - 1; i++)
|
||||
for (i = 0; i < ctx->ref_l0 - 1; i++)
|
||||
ctx->next_prev[i] = ctx->next_prev[i + 1];
|
||||
ctx->next_prev[i] = pic;
|
||||
++pic->ref_count[0];
|
||||
|
|
@ -662,6 +662,9 @@ int ff_hw_base_init_gop_structure(FFHWBaseEncodeContext *ctx, AVCodecContext *av
|
|||
uint32_t ref_l0, uint32_t ref_l1,
|
||||
int flags, int prediction_pre_only)
|
||||
{
|
||||
ctx->ref_l0 = FFMIN(ref_l0, MAX_PICTURE_REFERENCES);
|
||||
ctx->ref_l1 = FFMIN(ref_l1, MAX_PICTURE_REFERENCES);
|
||||
|
||||
if (flags & FF_HW_FLAG_INTRA_ONLY || avctx->gop_size <= 1) {
|
||||
av_log(avctx, AV_LOG_VERBOSE, "Using intra frames only.\n");
|
||||
ctx->gop_size = 1;
|
||||
|
|
|
|||
|
|
@ -193,6 +193,10 @@ typedef struct FFHWBaseEncodeContext {
|
|||
int end_of_stream;
|
||||
int p_to_gpb;
|
||||
|
||||
// The number of L0/L1 references supported by the driver.
|
||||
int ref_l0;
|
||||
int ref_l1;
|
||||
|
||||
// Whether the driver supports ROI at all.
|
||||
int roi_allowed;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue