asfdemux: fix assertion error when codec_data is not present in structure
authorVineeth TM <vineeth.tm@samsung.com>
Fri, 24 Jul 2015 01:08:34 +0000 (10:08 +0900)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 30 Jul 2015 12:40:09 +0000 (13:40 +0100)
When discovering a particular asf file, caps structure doesn't have
codec_data, and this was not being checked before using the same,
resulting in assertion error

https://bugzilla.gnome.org/show_bug.cgi?id=752803

gst/asfdemux/gstasfdemux.c

index a8d316e..4bf0619 100755 (executable)
@@ -2572,18 +2572,20 @@ gst_asf_demux_add_video_stream (GstASFDemux * demux,
     /* check if h264 has codec_data (avc) or streamheaders (bytestream) */
   } else if (gst_structure_has_name (caps_s, "video/x-h264")) {
     const GValue *value = gst_structure_get_value (caps_s, "codec_data");
-    GstBuffer *buf = gst_value_get_buffer (value);
-    GstMapInfo mapinfo;
-
-    if (gst_buffer_map (buf, &mapinfo, GST_MAP_READ)) {
-      if (mapinfo.size >= 4 && GST_READ_UINT32_BE (mapinfo.data) == 1) {
-        /* this looks like a bytestream start */
-        streamheader = gst_buffer_ref (buf);
-        gst_asf_demux_add_stream_headers_to_caps (demux, buf, caps_s);
-        gst_structure_remove_field (caps_s, "codec_data");
-      }
+    if (value) {
+      GstBuffer *buf = gst_value_get_buffer (value);
+      GstMapInfo mapinfo;
+
+      if (gst_buffer_map (buf, &mapinfo, GST_MAP_READ)) {
+        if (mapinfo.size >= 4 && GST_READ_UINT32_BE (mapinfo.data) == 1) {
+          /* this looks like a bytestream start */
+          streamheader = gst_buffer_ref (buf);
+          gst_asf_demux_add_stream_headers_to_caps (demux, buf, caps_s);
+          gst_structure_remove_field (caps_s, "codec_data");
+        }
 
-      gst_buffer_unmap (buf, &mapinfo);
+        gst_buffer_unmap (buf, &mapinfo);
+      }
     }
   }