h265parse: Reset the parser information when caps changes

Apply the commit 14f6fcd

https://bugzilla.gnome.org/show_bug.cgi?id=754124
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index 9b8c8f8..f76ce43 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -187,8 +187,10 @@
 }
 
 static void
-gst_h265_parse_reset (GstH265Parse * h265parse)
+gst_h265_parse_reset_stream_info (GstH265Parse * h265parse)
 {
+  gint i;
+
   h265parse->width = 0;
   h265parse->height = 0;
   h265parse->fps_num = 0;
@@ -197,20 +199,35 @@
   h265parse->upstream_par_d = -1;
   h265parse->parsed_par_n = 0;
   h265parse->parsed_par_n = 0;
-  gst_buffer_replace (&h265parse->codec_data, NULL);
-  gst_buffer_replace (&h265parse->codec_data_in, NULL);
-  h265parse->nal_length_size = 4;
-  h265parse->packetized = FALSE;
-  h265parse->transform = FALSE;
+  h265parse->have_pps = FALSE;
+  h265parse->have_sps = FALSE;
+  h265parse->have_vps = FALSE;
 
   h265parse->align = GST_H265_PARSE_ALIGN_NONE;
   h265parse->format = GST_H265_PARSE_FORMAT_NONE;
 
-  h265parse->last_report = GST_CLOCK_TIME_NONE;
+  h265parse->transform = FALSE;
+  h265parse->nal_length_size = 4;
+  h265parse->packetized = FALSE;
   h265parse->push_codec = FALSE;
-  h265parse->have_pps = FALSE;
-  h265parse->have_sps = FALSE;
-  h265parse->have_vps = FALSE;
+
+  gst_buffer_replace (&h265parse->codec_data, NULL);
+  gst_buffer_replace (&h265parse->codec_data_in, NULL);
+
+  gst_h265_parse_reset_frame (h265parse);
+
+  for (i = 0; i < GST_H265_MAX_VPS_COUNT; i++)
+    gst_buffer_replace (&h265parse->vps_nals[i], NULL);
+  for (i = 0; i < GST_H265_MAX_SPS_COUNT; i++)
+    gst_buffer_replace (&h265parse->sps_nals[i], NULL);
+  for (i = 0; i < GST_H265_MAX_PPS_COUNT; i++)
+    gst_buffer_replace (&h265parse->pps_nals[i], NULL);
+}
+
+static void
+gst_h265_parse_reset (GstH265Parse * h265parse)
+{
+  h265parse->last_report = GST_CLOCK_TIME_NONE;
 
   h265parse->sent_codec_tag = FALSE;
 
@@ -219,7 +236,7 @@
 
   h265parse->discont = FALSE;
 
-  gst_h265_parse_reset_frame (h265parse);
+  gst_h265_parse_reset_stream_info (h265parse);
 }
 
 static gboolean
@@ -241,19 +258,11 @@
 static gboolean
 gst_h265_parse_stop (GstBaseParse * parse)
 {
-  guint i;
   GstH265Parse *h265parse = GST_H265_PARSE (parse);
 
   GST_DEBUG_OBJECT (parse, "stop");
   gst_h265_parse_reset (h265parse);
 
-  for (i = 0; i < GST_H265_MAX_VPS_COUNT; i++)
-    gst_buffer_replace (&h265parse->vps_nals[i], NULL);
-  for (i = 0; i < GST_H265_MAX_SPS_COUNT; i++)
-    gst_buffer_replace (&h265parse->sps_nals[i], NULL);
-  for (i = 0; i < GST_H265_MAX_PPS_COUNT; i++)
-    gst_buffer_replace (&h265parse->pps_nals[i], NULL);
-
   gst_h265_parser_free (h265parse->nalparser);
 
   return TRUE;
@@ -2137,12 +2146,20 @@
   guint num_nals, i, j;
   GstH265NalUnit nalu;
   GstH265ParserResult parseres;
+  GstCaps *old_caps;
 
   h265parse = GST_H265_PARSE (parse);
 
   /* reset */
   h265parse->push_codec = FALSE;
 
+  old_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (parse));
+  if (old_caps) {
+    if (!gst_caps_is_equal (old_caps, caps))
+      gst_h265_parse_reset_stream_info (h265parse);
+    gst_caps_unref (old_caps);
+  }
+
   str = gst_caps_get_structure (caps, 0);
 
   /* accept upstream info if provided */