aacparse: Reject raw AAC if no codec_data is found in the caps
authorSebastian Dröge <sebastian@centricular.com>
Mon, 4 Jul 2016 14:58:38 +0000 (16:58 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 4 Jul 2016 14:58:38 +0000 (16:58 +0200)
If necessary, a demuxer will have to invent something here but this is only a
problem with non-conformant files anyway.

gst/audioparsers/gstaacparse.c

index a23a0a9..087b43c 100644 (file)
@@ -326,17 +326,26 @@ gst_aac_parse_sink_setcaps (GstBaseParse * parse, GstCaps * caps)
       gst_aac_parse_set_src_caps (aacparse, caps);
       if (aacparse->header_type == aacparse->output_header_type)
         gst_base_parse_set_passthrough (parse, TRUE);
-    } else
+    } else {
       return FALSE;
+    }
 
     /* caps info overrides */
     gst_structure_get_int (structure, "rate", &aacparse->sample_rate);
     gst_structure_get_int (structure, "channels", &aacparse->channels);
   } else {
-    aacparse->sample_rate = 0;
-    aacparse->channels = 0;
-    aacparse->header_type = DSPAAC_HEADER_NOT_PARSED;
-    gst_base_parse_set_passthrough (parse, FALSE);
+    const gchar *stream_format =
+        gst_structure_get_string (structure, "stream-format");
+
+    if (g_strcmp0 (stream_format, "raw") == 0) {
+      GST_ERROR_OBJECT (parse, "Need codec_data for raw AAC");
+      return FALSE;
+    } else {
+      aacparse->sample_rate = 0;
+      aacparse->channels = 0;
+      aacparse->header_type = DSPAAC_HEADER_NOT_PARSED;
+      gst_base_parse_set_passthrough (parse, FALSE);
+    }
   }
 
   return TRUE;