h265parser: Allow updating SPS/PPS without parent parameter set

h265parser defers linking parameter sets until slice header is parsed.
Thus valid SPS/PPS parsed by h265parser can have no linked
parent parameter set. Apply this behavior to
gst_h265_parser_update_{sps,pps} too

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8673>
This commit is contained in:
Seungha Yang 2025-03-25 01:58:42 +09:00 committed by GStreamer Marge Bot
parent 9183df0226
commit c1835644f5

@ -3403,19 +3403,14 @@ gst_h265_parser_update_sps (GstH265Parser * parser, GstH265SPS * sps)
return GST_H265_PARSER_ERROR;
}
if (sps->vps) {
GstH265VPS *vps = gst_h265_parser_get_vps (parser, sps->vps->id);
if (!vps || vps != sps->vps) {
GST_WARNING ("Linked VPS is not identical to internal VPS");
return GST_H265_PARSER_BROKEN_LINK;
}
}
GST_DEBUG ("Updating sequence parameter set with id: %d", sps->id);
parser->sps[sps->id] = *sps;
parser->last_sps = &parser->sps[sps->id];
if (sps->vps)
parser->sps[sps->id].vps = gst_h265_parser_get_vps (parser, sps->vps->id);
return GST_H265_PARSER_OK;
}
@ -3434,8 +3429,6 @@ gst_h265_parser_update_sps (GstH265Parser * parser, GstH265SPS * sps)
GstH265ParserResult
gst_h265_parser_update_pps (GstH265Parser * parser, GstH265PPS * pps)
{
GstH265SPS *sps;
g_return_val_if_fail (parser != NULL, GST_H265_PARSER_ERROR);
g_return_val_if_fail (pps != NULL, GST_H265_PARSER_ERROR);
g_return_val_if_fail (pps->id < GST_H265_MAX_PPS_COUNT,
@ -3446,22 +3439,14 @@ gst_h265_parser_update_pps (GstH265Parser * parser, GstH265PPS * pps)
return GST_H265_PARSER_ERROR;
}
if (!pps->sps) {
GST_WARNING ("No linked SPS struct");
return GST_H265_PARSER_BROKEN_LINK;
}
sps = gst_h265_parser_get_sps (parser, pps->sps->id);
if (!sps || sps != pps->sps) {
GST_WARNING ("Linked SPS is not identical to internal SPS");
return GST_H265_PARSER_BROKEN_LINK;
}
GST_DEBUG ("Updating picture parameter set with id: %d", pps->id);
parser->pps[pps->id] = *pps;
parser->last_pps = &parser->pps[pps->id];
if (pps->sps)
parser->pps[pps->id].sps = gst_h265_parser_get_sps (parser, pps->sps->id);
return GST_H265_PARSER_OK;
}