mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
av1parser: Fix segmentation params update
Even if the segmentation feature value is not updated, the parsed "segmentation_update_map" and "segmentation_temporal_update" values should not be cleared as it's referenced during lower level bitstream parsing. Also, don't use assert() in parser unless it's clearly impossible condition. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5334>
This commit is contained in:
parent
3ac2690807
commit
6785c7d378
1 changed files with 30 additions and 13 deletions
|
@ -2129,20 +2129,37 @@ gst_av1_parse_segmentation_params (GstAV1Parser * parser, GstBitReader * br,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Copy it from prime_ref */
|
gint8 ref_idx;
|
||||||
g_assert (frame_header->primary_ref_frame != GST_AV1_PRIMARY_REF_NONE);
|
GstAV1SegmenationParams *ref_seg_params;
|
||||||
g_assert (parser->state.ref_info.
|
|
||||||
entry[frame_header->ref_frame_idx[frame_header->primary_ref_frame]].
|
|
||||||
ref_valid);
|
|
||||||
memcpy (seg_params,
|
|
||||||
&parser->state.ref_info.
|
|
||||||
entry[frame_header->ref_frame_idx[frame_header->
|
|
||||||
primary_ref_frame]].ref_segmentation_params,
|
|
||||||
sizeof (GstAV1SegmenationParams));
|
|
||||||
|
|
||||||
seg_params->segmentation_update_map = 0;
|
/* Copy it from prime_ref */
|
||||||
seg_params->segmentation_temporal_update = 0;
|
if (frame_header->primary_ref_frame >= GST_AV1_PRIMARY_REF_NONE) {
|
||||||
seg_params->segmentation_update_data = 0;
|
GST_WARNING ("Invalid primary_ref_frame %d",
|
||||||
|
frame_header->primary_ref_frame);
|
||||||
|
return GST_AV1_PARSER_BITSTREAM_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
ref_idx = frame_header->ref_frame_idx[frame_header->primary_ref_frame];
|
||||||
|
if (ref_idx >= GST_AV1_NUM_REF_FRAMES || ref_idx < 0) {
|
||||||
|
GST_WARNING ("Invalid ref_frame_idx %d", ref_idx);
|
||||||
|
return GST_AV1_PARSER_BITSTREAM_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parser->state.ref_info.entry[ref_idx].ref_valid) {
|
||||||
|
GST_WARNING ("Reference frame at index %d is unavailable", ref_idx);
|
||||||
|
return GST_AV1_PARSER_BITSTREAM_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
ref_seg_params =
|
||||||
|
&parser->state.ref_info.entry[ref_idx].ref_segmentation_params;
|
||||||
|
|
||||||
|
for (i = 0; i < GST_AV1_MAX_SEGMENTS; i++) {
|
||||||
|
for (j = 0; j < GST_AV1_SEG_LVL_MAX; j++) {
|
||||||
|
seg_params->feature_enabled[i][j] =
|
||||||
|
ref_seg_params->feature_enabled[i][j];
|
||||||
|
seg_params->feature_data[i][j] = ref_seg_params->feature_data[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
seg_params->segmentation_update_map = 0;
|
seg_params->segmentation_update_map = 0;
|
||||||
|
|
Loading…
Reference in a new issue