summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-08-02 17:52:16 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-08-02 17:52:16 +0000
commit266c0bf8bf1a98cdf06d30eb35db81970fe8e98e (patch)
tree95e64c9253d2b87f90c7d980e22446bd1a63a470
parent0767ed33515803ccf81c760bc7d21bda8ab1d417 (diff)
gst/matroska/matroska-mux.c: Add support for muxing raw float audio now that the spec defines the endianness and add ...
Original commit message from CVS: * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_setcaps): Add support for muxing raw float audio now that the spec defines the endianness and add support for muxing raw integer audio with 24 and 32 bits. Allow muxing of more than 8 audio channels.
-rw-r--r--ChangeLog10
-rw-r--r--gst/matroska/matroska-mux.c40
2 files changed, 42 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 85698bcc..018dc15c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2008-08-02 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * gst/matroska/matroska-mux.c:
+ (gst_matroska_mux_audio_pad_setcaps):
+ Add support for muxing raw float audio now that the spec defines the
+ endianness and add support for muxing raw integer audio with 24 and
+ 32 bits.
+
+ Allow muxing of more than 8 audio channels.
+
+2008-08-02 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
* gst/matroska/matroska-mux.c: (gst_matroska_mux_create_uid),
(gst_matroska_mux_reset), (gst_matroska_mux_start):
Add locking to the global array of used track UIDs to prevent random
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index 39a95b2d..7d30294f 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -96,11 +96,10 @@ static GstStaticPadTemplate videosink_templ =
);
#define COMMON_AUDIO_CAPS \
- "channels = (int) [ 1, 8 ], " \
- "rate = (int) [ 8000, 96000 ]"
+ "channels = (int) [ 1, MAX ], " \
+ "rate = (int) [ 1, MAX ]"
/* FIXME:
- * * audio/x-raw-float: endianness needs defining.
* * require codec data, etc as needed
*/
static GstStaticPadTemplate audiosink_templ =
@@ -129,6 +128,22 @@ static GstStaticPadTemplate audiosink_templ =
"endianness = (int) { BIG_ENDIAN, LITTLE_ENDIAN }, "
"signed = (boolean) true, "
COMMON_AUDIO_CAPS ";"
+ "audio/x-raw-int, "
+ "width = (int) 24, "
+ "depth = (int) 24, "
+ "endianness = (int) { BIG_ENDIAN, LITTLE_ENDIAN }, "
+ "signed = (boolean) true, "
+ COMMON_AUDIO_CAPS ";"
+ "audio/x-raw-int, "
+ "width = (int) 32, "
+ "depth = (int) 32, "
+ "endianness = (int) { BIG_ENDIAN, LITTLE_ENDIAN }, "
+ "signed = (boolean) true, "
+ COMMON_AUDIO_CAPS ";"
+ "audio/x-raw-float, "
+ "width = (int) [ 32, 64 ], "
+ "endianness = (int) LITTLE_ENDIAN, "
+ COMMON_AUDIO_CAPS ";"
"audio/x-tta, "
"width = (int) { 8, 16, 24 }, "
"channels = (int) { 1, 2 }, " "rate = (int) [ 8000, 96000 ]")
@@ -1034,8 +1049,7 @@ gst_matroska_mux_audio_pad_setcaps (GstPad * pad, GstCaps * caps)
return TRUE;
} else if (!strcmp (mimetype, "audio/x-raw-int")) {
gint endianness, width, depth;
-
- gboolean signedness;
+ gboolean signedness = G_LITTLE_ENDIAN;
if (!gst_structure_get_int (structure, "width", &width) ||
!gst_structure_get_int (structure, "depth", &depth) ||
@@ -1055,8 +1069,8 @@ gst_matroska_mux_audio_pad_setcaps (GstPad * pad, GstCaps * caps)
return FALSE;
}
- /* where is this spec'ed out? (tpm) */
- if ((width == 8 && signedness) || (width == 16 && !signedness)) {
+ /* FIXME: where is this spec'ed out? (tpm) */
+ if ((width == 8 && signedness) || (width >= 16 && !signedness)) {
GST_DEBUG_OBJECT (mux, "8-bit PCM must be unsigned, 16-bit PCM signed");
return FALSE;
}
@@ -1069,7 +1083,17 @@ gst_matroska_mux_audio_pad_setcaps (GstPad * pad, GstCaps * caps)
return TRUE;
} else if (!strcmp (mimetype, "audio/x-raw-float")) {
- /* FIXME: endianness is undefined */
+ gint width;
+
+ if (!gst_structure_get_int (structure, "width", &width)) {
+ GST_DEBUG_OBJECT (mux, "broken caps, width field missing");
+ return FALSE;
+ }
+
+ audiocontext->bitdepth = width;
+ context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT);
+
+ return TRUE;
} else if (!strcmp (mimetype, "audio/x-vorbis")) {
const GValue *streamheader;