gst/mxf/mxfd10.c: Document decoding of the AES3 data and also skip the 32 bit header in the beginning of every buffer...

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.
This commit is contained in:
Sebastian Dröge 2008-12-06 19:46:05 +00:00
parent 6f15343df1
commit f4cb76e92d
2 changed files with 15 additions and 0 deletions

View file

@ -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),

View 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);
}