gst/mxf/mxfd10.c: Document decoding of the AES3 data and also skip the 32 bit header...
authorSebastian Dröge <slomo@circular-chaos.org>
Sat, 6 Dec 2008 19:46:05 +0000 (19:46 +0000)
committerSebastian Dröge <slomo@circular-chaos.org>
Sat, 6 Dec 2008 19:46:05 +0000 (19:46 +0000)
Original commit message from CVS:
* gst/mxf/mxfd10.c: (mxf_d10_sound_handle_essence_element):
Document decoding of the AES3 data and also skip the 32 bit
header in the beginning of every buffer, otherwise we get
one broken audio channel.

ChangeLog
gst/mxf/mxfd10.c

index e1a8f65..6c35fbc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-06  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+       * gst/mxf/mxfd10.c: (mxf_d10_sound_handle_essence_element):
+       Document decoding of the AES3 data and also skip the 32 bit
+       header in the beginning of every buffer, otherwise we get
+       one broken audio channel.
+
 2008-12-05  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
 
        * gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
index 75e7400..d8d1909 100644 (file)
@@ -118,10 +118,16 @@ mxf_d10_sound_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
   indata = GST_BUFFER_DATA (buffer);
   outdata = GST_BUFFER_DATA (*outbuf);
 
+  /* Skip 32 bit header */
+  indata += 4;
+
   for (i = 0; i < nsamples; i++) {
     for (j = 0; j < channels; j++) {
       guint32 in = GST_READ_UINT32_LE (indata);
 
+      /* Remove first 4 and last 4 bits as they only
+       * contain status data. Shift the 24 bit samples
+       * to the correct width afterwards. */
       if (width == 2) {
         in = (in >> 12) & 0xffff;
         GST_WRITE_UINT16_LE (outdata, in);
@@ -132,6 +138,8 @@ mxf_d10_sound_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
       indata += 4;
       outdata += width;
     }
+    /* There are always 8 channels but only the first
+     * ones contain valid data, skip the others */
     indata += 4 * (8 - channels);
   }