Expose support for DSD
authorMathieu Duponchelle <mathieu@centricular.com>
Sat, 5 May 2018 16:00:06 +0000 (18:00 +0200)
committerMathieu Duponchelle <mathieu@centricular.com>
Sun, 6 May 2018 10:49:47 +0000 (12:49 +0200)
DSD is usually wrapped in DSF, for which we now also expose the
demuxer.

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

ext/libav/gstavcodecmap.c
ext/libav/gstavdemux.c

index 9a72033..f4c00c9 100644 (file)
@@ -2216,6 +2216,34 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
           gst_ff_aud_caps_new (context, NULL, codec_id, encode, "audio/G729",
           NULL);
       break;
+    case AV_CODEC_ID_DSD_LSBF:
+      caps =
+          gst_ff_aud_caps_new (context, NULL, codec_id, encode, "audio/x-dsd",
+          NULL);
+      gst_caps_set_simple (caps, "lsbf", G_TYPE_BOOLEAN,
+          TRUE, "planar", G_TYPE_BOOLEAN, FALSE, NULL);
+      break;
+    case AV_CODEC_ID_DSD_MSBF:
+      caps =
+          gst_ff_aud_caps_new (context, NULL, codec_id, encode, "audio/x-dsd",
+          NULL);
+      gst_caps_set_simple (caps, "lsbf", G_TYPE_BOOLEAN,
+          FALSE, "planar", G_TYPE_BOOLEAN, FALSE, NULL);
+      break;
+    case AV_CODEC_ID_DSD_LSBF_PLANAR:
+      caps =
+          gst_ff_aud_caps_new (context, NULL, codec_id, encode, "audio/x-dsd",
+          NULL);
+      gst_caps_set_simple (caps, "lsbf", G_TYPE_BOOLEAN,
+          TRUE, "planar", G_TYPE_BOOLEAN, TRUE, NULL);
+      break;
+    case AV_CODEC_ID_DSD_MSBF_PLANAR:
+      caps =
+          gst_ff_aud_caps_new (context, NULL, codec_id, encode, "audio/x-dsd",
+          NULL);
+      gst_caps_set_simple (caps, "lsbf", G_TYPE_BOOLEAN,
+          FALSE, "planar", G_TYPE_BOOLEAN, TRUE, NULL);
+      break;
     default:
       GST_DEBUG ("Unknown codec ID %d, please add mapping here", codec_id);
       break;
index 001e2f1..b2bc091 100644 (file)
@@ -2085,7 +2085,8 @@ gst_ffmpegdemux_register (GstPlugin * plugin)
         !strcmp (in_plugin->name, "mpc8") ||
         !strcmp (in_plugin->name, "ivf") ||
         !strcmp (in_plugin->name, "brstm") ||
-        !strcmp (in_plugin->name, "bfstm") || !strcmp (in_plugin->name, "gif"))
+        !strcmp (in_plugin->name, "bfstm") ||
+        !strcmp (in_plugin->name, "gif") || !strcmp (in_plugin->name, "dsf"))
       rank = GST_RANK_MARGINAL;
     else {
       GST_DEBUG ("ignoring %s", in_plugin->name);