mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-08 00:59:48 +00:00
rtph265depay: update codec_data in caps regardless of format
Updating of codec_data in the caps is important to propagate changes
in sps/pps/vps via NALs. Without this, downstream does not renegotiate
when upstream changes resolution.
The comment referring to rtph264pay is from 2015 and is out of date.
rtph264pay stopped doing that in 2017 with commit
dabeed52a9
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1011>
This commit is contained in:
parent
aad9c8a216
commit
95f6c31c21
1 changed files with 2 additions and 29 deletions
|
@ -388,7 +388,7 @@ gst_rtp_h265_depay_set_output_caps (GstRtpH265Depay * rtph265depay,
|
|||
static gboolean
|
||||
gst_rtp_h265_set_src_caps (GstRtpH265Depay * rtph265depay)
|
||||
{
|
||||
gboolean res, update_caps;
|
||||
gboolean res;
|
||||
GstCaps *old_caps;
|
||||
GstCaps *srccaps;
|
||||
GstPad *srcpad;
|
||||
|
@ -597,36 +597,9 @@ gst_rtp_h265_set_src_caps (GstRtpH265Depay * rtph265depay)
|
|||
}
|
||||
|
||||
srcpad = GST_RTP_BASE_DEPAYLOAD_SRCPAD (rtph265depay);
|
||||
|
||||
old_caps = gst_pad_get_current_caps (srcpad);
|
||||
if (old_caps != NULL) {
|
||||
|
||||
/* Only update the caps if they are not equal. For
|
||||
* AVC we don't update caps if only the codec_data
|
||||
* changes. This is the same behaviour as in h264parse
|
||||
* and gstrtph264depay
|
||||
*/
|
||||
if (rtph265depay->byte_stream) {
|
||||
update_caps = !gst_caps_is_equal (srccaps, old_caps);
|
||||
} else {
|
||||
GstCaps *tmp_caps = gst_caps_copy (srccaps);
|
||||
GstStructure *old_s, *tmp_s;
|
||||
|
||||
old_s = gst_caps_get_structure (old_caps, 0);
|
||||
tmp_s = gst_caps_get_structure (tmp_caps, 0);
|
||||
if (gst_structure_has_field (old_s, "codec_data"))
|
||||
gst_structure_set_value (tmp_s, "codec_data",
|
||||
gst_structure_get_value (old_s, "codec_data"));
|
||||
|
||||
update_caps = !gst_caps_is_equal (old_caps, tmp_caps);
|
||||
gst_caps_unref (tmp_caps);
|
||||
}
|
||||
gst_caps_unref (old_caps);
|
||||
} else {
|
||||
update_caps = TRUE;
|
||||
}
|
||||
|
||||
if (update_caps) {
|
||||
if (old_caps == NULL || !gst_caps_is_equal (srccaps, old_caps)) {
|
||||
res = gst_rtp_h265_depay_set_output_caps (rtph265depay, srccaps);
|
||||
} else {
|
||||
res = TRUE;
|
||||
|
|
Loading…
Reference in a new issue