mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavc/cbs_av1: Save more frame ordering information
This is wanted by the Vulkan decoder.
This commit is contained in:
parent
f1e34f1582
commit
cafb4c5548
@ -427,6 +427,8 @@ typedef struct AV1ReferenceFrameState {
|
||||
int bit_depth; // RefBitDepth
|
||||
int order_hint; // RefOrderHint
|
||||
|
||||
int saved_order_hints[AV1_TOTAL_REFS_PER_FRAME]; // SavedOrderHints[ref]
|
||||
|
||||
int8_t loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME];
|
||||
int8_t loop_filter_mode_deltas[2];
|
||||
uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
|
||||
@ -464,6 +466,9 @@ typedef struct CodedBitstreamAV1Context {
|
||||
int tile_rows;
|
||||
int tile_num;
|
||||
|
||||
int order_hints[AV1_TOTAL_REFS_PER_FRAME]; // OrderHints
|
||||
int ref_frame_sign_bias[AV1_TOTAL_REFS_PER_FRAME]; // RefFrameSignBias
|
||||
|
||||
AV1ReferenceFrameState ref[AV1_NUM_REF_FRAMES];
|
||||
|
||||
// AVOptions
|
||||
|
@ -1414,6 +1414,8 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
priv->ref[i].valid = 0;
|
||||
priv->ref[i].order_hint = 0;
|
||||
}
|
||||
for (i = 0; i < AV1_REFS_PER_FRAME; i++)
|
||||
priv->order_hints[i + AV1_REF_FRAME_LAST] = 0;
|
||||
}
|
||||
|
||||
flag(disable_cdf_update);
|
||||
@ -1568,11 +1570,20 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
else
|
||||
flag(use_ref_frame_mvs);
|
||||
|
||||
infer(allow_intrabc, 0);
|
||||
}
|
||||
for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
|
||||
int ref_frame = AV1_REF_FRAME_LAST + i;
|
||||
int hint = priv->ref[current->ref_frame_idx[i]].order_hint;
|
||||
priv->order_hints[ref_frame] = hint;
|
||||
if (!seq->enable_order_hint) {
|
||||
priv->ref_frame_sign_bias[ref_frame] = 0;
|
||||
} else {
|
||||
priv->ref_frame_sign_bias[ref_frame] =
|
||||
cbs_av1_get_relative_dist(seq, hint,
|
||||
current->order_hint) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!frame_is_intra) {
|
||||
// Derive reference frame sign biases.
|
||||
infer(allow_intrabc, 0);
|
||||
}
|
||||
|
||||
if (seq->reduced_still_picture_header || current->disable_cdf_update)
|
||||
@ -1674,6 +1685,12 @@ update_refs:
|
||||
.bit_depth = priv->bit_depth,
|
||||
.order_hint = priv->order_hint,
|
||||
};
|
||||
|
||||
for (int j = 0; j < AV1_REFS_PER_FRAME; j++) {
|
||||
priv->ref[i].saved_order_hints[j + AV1_REF_FRAME_LAST] =
|
||||
priv->order_hints[j + AV1_REF_FRAME_LAST];
|
||||
}
|
||||
|
||||
memcpy(priv->ref[i].loop_filter_ref_deltas, current->loop_filter_ref_deltas,
|
||||
sizeof(current->loop_filter_ref_deltas));
|
||||
memcpy(priv->ref[i].loop_filter_mode_deltas, current->loop_filter_mode_deltas,
|
||||
|
Loading…
Reference in New Issue
Block a user