vaapi: h265dec: Refresh our sps/pps copy

The decoder uses a copy of the SPS/PPS. Since
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2575
the SPS/PPS is updated when the slice header is parsed. As a side
effect, the H265 decoder was using an partially filled copy.

Fixes: 5ae05bb42a ("codecparsers: Defering computation of pps and sps fields")
Fixes: #1343
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2795>
This commit is contained in:
Nicolas Dufresne 2022-07-26 12:22:10 -04:00 committed by GStreamer Marge Bot
parent 197b72f32a
commit 04e0154fb5

View file

@ -585,6 +585,11 @@ ensure_pps (GstVaapiDecoderH265 * decoder, GstH265PPS * pps)
GstVaapiParserInfoH265 *const pi = priv->pps[pps->id]; GstVaapiParserInfoH265 *const pi = priv->pps[pps->id];
gst_vaapi_parser_info_h265_replace (&priv->active_pps, pi); gst_vaapi_parser_info_h265_replace (&priv->active_pps, pi);
/* Ensure our copy is up-to-date */
pi->data.pps = *pps;
pi->data.pps.sps = NULL;
return pi ? &pi->data.pps : NULL; return pi ? &pi->data.pps : NULL;
} }
@ -609,6 +614,9 @@ ensure_sps (GstVaapiDecoderH265 * decoder, GstH265SPS * sps)
if (pi && priv->active_sps) if (pi && priv->active_sps)
pi->state |= (priv->active_sps->state & GST_H265_VIDEO_STATE_GOT_I_FRAME); pi->state |= (priv->active_sps->state & GST_H265_VIDEO_STATE_GOT_I_FRAME);
/* Ensure our copy is up-to-date */
pi->data.sps = *sps;
gst_vaapi_parser_info_h265_replace (&priv->active_sps, pi); gst_vaapi_parser_info_h265_replace (&priv->active_sps, pi);
return pi ? &pi->data.sps : NULL; return pi ? &pi->data.sps : NULL;
} }