mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
gst/auparse/gstauparse.c: - Document all audio encoding we can encounter from Solaris 9 headers and libsndfile inform...
Original commit message from CVS: * gst/auparse/gstauparse.c : - Document all audio encoding we can encounter from Solaris 9 headers and libsndfile information. - Increase max. rate from 48000 to 192000 (to match other elements) - Don't try to play junk data between header and samples
This commit is contained in:
parent
840ca2eb6f
commit
302b25c536
2 changed files with 50 additions and 24 deletions
|
@ -6,8 +6,13 @@
|
|||
2004-05-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
|
||||
|
||||
* gst/cdxaparse/gstcdxaparse.c :
|
||||
Add mpegversion to CAPS to make it link
|
||||
Rank is as GST_RANK_SECONDARY instead of NONE
|
||||
- Add mpegversion to CAPS to make it link
|
||||
- Rank is as GST_RANK_SECONDARY instead of NONE
|
||||
* gst/auparse/gstauparse.c :
|
||||
- Document all audio encoding we can encounter from Solaris 9
|
||||
headers and libsndfile information.
|
||||
- Increase max. rate from 48000 to 192000 (to match other elements)
|
||||
- Don't try to play junk data between header and samples
|
||||
|
||||
2004-05-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
|
||||
|
||||
|
|
|
@ -49,13 +49,13 @@ static GstStaticPadTemplate gst_auparse_src_template =
|
|||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_SOMETIMES, /* FIXME: spider */
|
||||
GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; " /* does not support 24bit without patch */
|
||||
GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS "; "
|
||||
GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; " /* 24-bit PCM is barely supported by gstreamer actually */
|
||||
GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS "; " /* 64-bit float is barely supported by gstreamer actually */
|
||||
"audio/x-alaw, "
|
||||
"rate = (int) [ 8000, 48000 ], "
|
||||
"rate = (int) [ 8000, 192000 ], "
|
||||
"channels = (int) [ 1, 2 ]; "
|
||||
"audio/x-mulaw, "
|
||||
"rate = (int) [ 8000, 48000 ], " "channels = (int) [ 1, 2 ]")
|
||||
"rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 2 ]")
|
||||
);
|
||||
|
||||
/* AuParse signals and args */
|
||||
|
@ -185,12 +185,12 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
|
|||
guint32 *head = (guint32 *) data;
|
||||
|
||||
/* normal format is big endian (au is a Sparc format) */
|
||||
if (GUINT32_FROM_BE (*head) == 0x2e736e64) {
|
||||
if (GUINT32_FROM_BE (*head) == 0x2e736e64) { /* ".snd" */
|
||||
head++;
|
||||
auparse->le = 0;
|
||||
auparse->offset = GUINT32_FROM_BE (*head);
|
||||
head++;
|
||||
auparse->size = GUINT32_FROM_BE (*head);
|
||||
auparse->size = GUINT32_FROM_BE (*head); /* Do not trust size, could be set to -1 : unknown */
|
||||
head++;
|
||||
auparse->encoding = GUINT32_FROM_BE (*head);
|
||||
head++;
|
||||
|
@ -201,12 +201,12 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
|
|||
|
||||
/* and of course, someone had to invent a little endian
|
||||
* version. Used by DEC systems. */
|
||||
} else if (GUINT32_FROM_LE (*head) == 0x0064732E) {
|
||||
} else if (GUINT32_FROM_LE (*head) == 0x0064732E) { /* other source say it is "dns." */
|
||||
head++;
|
||||
auparse->le = 1;
|
||||
auparse->offset = GUINT32_FROM_LE (*head);
|
||||
head++;
|
||||
auparse->size = GUINT32_FROM_LE (*head);
|
||||
auparse->size = GUINT32_FROM_LE (*head); /* Do not trust size, could be set to -1 : unknown */
|
||||
head++;
|
||||
auparse->encoding = GUINT32_FROM_LE (*head);
|
||||
head++;
|
||||
|
@ -230,16 +230,22 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
|
|||
Docs :
|
||||
http://www.opengroup.org/public/pubs/external/auformat.html
|
||||
http://astronomy.swin.edu.au/~pbourke/dataformats/au/
|
||||
Solaris headers : /usr/include/audio/au.h
|
||||
libsndfile : src/au.c
|
||||
Samples :
|
||||
http://www.tsp.ece.mcgill.ca/MMSP/Documents/AudioFormats/AU/Samples.html
|
||||
*/
|
||||
|
||||
switch (auparse->encoding) {
|
||||
|
||||
case 1: /* 8-bit ISDN mu-law */
|
||||
case 1: /* 8-bit ISDN mu-law G.711 */
|
||||
law = 1;
|
||||
depth = 8;
|
||||
break;
|
||||
case 27: /* 8-bit ISDN A-law G.711 */
|
||||
law = 2;
|
||||
depth = 8;
|
||||
break;
|
||||
|
||||
case 2: /* 8-bit linear PCM */
|
||||
depth = 8;
|
||||
|
@ -254,24 +260,38 @@ Samples :
|
|||
depth = 32;
|
||||
break;
|
||||
|
||||
case 27: /* 8-bit ISDN a-law */
|
||||
law = 2;
|
||||
depth = 8;
|
||||
break;
|
||||
|
||||
case 6: /* 32 bit IEEE floating point */
|
||||
case 6: /* 32-bit IEEE floating point */
|
||||
ieee = 1;
|
||||
depth = 32;
|
||||
break;
|
||||
case 7: /* 64 bit IEEE floating point */
|
||||
case 7: /* 64-bit IEEE floating point */
|
||||
ieee = 1;
|
||||
depth = 64;
|
||||
break;
|
||||
|
||||
case 23: /* 4 bit CCITT G721 ADPCM */
|
||||
case 24: /* CCITT G722 ADPCM */
|
||||
case 25: /* CCITT G723 ADPCM */
|
||||
case 26: /* 5 bit CCITT G723 ADPCM */
|
||||
case 8: /* Fragmented sample data */
|
||||
case 9: /* AU_ENCODING_NESTED */
|
||||
|
||||
case 10: /* DSP program */
|
||||
case 11: /* DSP 8-bit fixed point */
|
||||
case 12: /* DSP 16-bit fixed point */
|
||||
case 13: /* DSP 24-bit fixed point */
|
||||
case 14: /* DSP 32-bit fixed point */
|
||||
|
||||
case 16: /* AU_ENCODING_DISPLAY : non-audio display data */
|
||||
case 17: /* AU_ENCODING_MULAW_SQUELCH */
|
||||
|
||||
case 18: /* 16-bit linear with emphasis */
|
||||
case 19: /* 16-bit linear compressed (NEXT) */
|
||||
case 20: /* 16-bit linear with emphasis and compression */
|
||||
|
||||
case 21: /* Music kit DSP commands */
|
||||
case 22: /* Music kit DSP commands samples */
|
||||
|
||||
case 23: /* 4-bit CCITT G.721 ADPCM 32kbps -> modplug/libsndfile (compressed 8-bit mu-law) */
|
||||
case 24: /* 8-bit CCITT G.722 ADPCM -> rtp */
|
||||
case 25: /* 3-bit CCITT G.723.3 ADPCM 24kbps -> rtp/xine/modplug/libsndfile */
|
||||
case 26: /* 5-bit CCITT G.723.5 ADPCM 40kbps -> rtp/xine/modplug/libsndfile */
|
||||
|
||||
default:
|
||||
GST_ELEMENT_ERROR (auparse, STREAM, FORMAT, (NULL), (NULL));
|
||||
|
@ -314,7 +334,8 @@ Samples :
|
|||
|
||||
newbuf = gst_buffer_new ();
|
||||
GST_BUFFER_DATA (newbuf) = (gpointer) malloc (size - (auparse->offset));
|
||||
memcpy (GST_BUFFER_DATA (newbuf), data + 24, size - (auparse->offset));
|
||||
memcpy (GST_BUFFER_DATA (newbuf), data + (auparse->offset),
|
||||
size - (auparse->offset));
|
||||
GST_BUFFER_SIZE (newbuf) = size - (auparse->offset);
|
||||
|
||||
gst_buffer_unref (buf);
|
||||
|
|
Loading…
Reference in a new issue