matroskamux: Add support for g726 ADPCM
authorNicola Murino <nicola.murino@gmail.com>
Fri, 3 Jan 2014 14:25:23 +0000 (15:25 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 8 Jan 2014 08:57:48 +0000 (09:57 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=720995

gst/matroska/matroska-mux.c

index a8167db..d42334b 100644 (file)
@@ -181,7 +181,9 @@ static GstStaticPadTemplate audiosink_templ =
         "audio/x-adpcm, "
         "layout = (string)dvi, "
         "block_align = (int)[64, 8192], "
-        "channels = (int) { 1, 2 }, " "rate = (int) [ 8000, 96000 ]; ")
+        "channels = (int) { 1, 2 }, " "rate = (int) [ 8000, 96000 ]; "
+        "audio/x-adpcm, "
+        "layout = (string)g726, " "channels = (int)1," "rate = (int)8000; ")
     );
 
 static GstStaticPadTemplate subtitlesink_templ =
@@ -1941,11 +1943,24 @@ gst_matroska_mux_audio_pad_setcaps (GstPad * pad, GstCaps * caps)
       block_align = channels;
       bitrate = block_align * samplerate;
     } else if (!strcmp (mimetype, "audio/x-adpcm")) {
+      const char *layout;
+      layout = gst_structure_get_string (structure, "layout");
       if (!gst_structure_get_int (structure, "block_align", &block_align)) {
         GST_WARNING_OBJECT (mux, "Missing block_align on adpcm caps");
         goto refuse_caps;
       }
-      format = GST_RIFF_WAVE_FORMAT_DVI_ADPCM;
+      if (!strcmp (layout, "dvi")) {
+        format = GST_RIFF_WAVE_FORMAT_DVI_ADPCM;
+      } else if (!strcmp (layout, "g726")) {
+        format = GST_RIFF_WAVE_FORMAT_ITU_G726_ADPCM;
+        if (!gst_structure_get_int (structure, "bitrate", &bitrate)) {
+          GST_WARNING_OBJECT (mux, "Missing bitrate on adpcm g726 caps");
+          goto refuse_caps;
+        }
+      } else {
+        GST_WARNING_OBJECT (mux, "Unknown layout on adpcm caps");
+        goto refuse_caps;
+      }
 
     }
     g_assert (format != 0);