wavparse: do not include codec_data on raw audio caps
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 4 Jun 2014 10:34:27 +0000 (11:34 +0100)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 5 Jun 2014 09:34:49 +0000 (10:34 +0100)
If the wav header contains an extended chunk, we want to keep
the codec_data field, but not for raw audio.

This fixes some elements (such as adder) from failing to intersect
raw audio caps which would otherwise be intersectable.

gst/wavparse/gstwavparse.c

index e50a82d94d060ca2fd60a23cd4735372268d7ea3..7e5f043b3c763a364cfde1b9bc52da46a2a346b0 100644 (file)
@@ -1037,6 +1037,7 @@ gst_wavparse_stream_headers (GstWavParse * wav)
   gchar *codec_name = NULL;
   GstEvent **event_p;
   gint64 upstream_size = 0;
   gchar *codec_name = NULL;
   GstEvent **event_p;
   gint64 upstream_size = 0;
+  GstStructure *s;
 
   /* search for "_fmt" chunk, which should be first */
   while (!wav->got_fmt) {
 
   /* search for "_fmt" chunk, which should be first */
   while (!wav->got_fmt) {
@@ -1107,6 +1108,15 @@ gst_wavparse_stream_headers (GstWavParse * wav)
     if (!caps)
       goto unknown_format;
 
     if (!caps)
       goto unknown_format;
 
+    /* If we got raw audio from upstream, we remove the codec_data field,
+     * which may have been added if the wav header included an extended
+     * chunk. We want to keep it for non raw audio.
+     */
+    s = gst_caps_get_structure (caps, 0);
+    if (s && gst_structure_has_name (s, "audio/x-raw")) {
+      gst_structure_remove_field (s, "codec_data");
+    }
+
     /* do more sanity checks of header fields
      * (these can be sanitized by gst_riff_create_audio_caps()
      */
     /* do more sanity checks of header fields
      * (these can be sanitized by gst_riff_create_audio_caps()
      */