mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +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>
|
2004-05-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
|
||||||
|
|
||||||
* gst/cdxaparse/gstcdxaparse.c :
|
* gst/cdxaparse/gstcdxaparse.c :
|
||||||
Add mpegversion to CAPS to make it link
|
- Add mpegversion to CAPS to make it link
|
||||||
Rank is as GST_RANK_SECONDARY instead of NONE
|
- 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>
|
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_STATIC_PAD_TEMPLATE ("src",
|
||||||
GST_PAD_SRC,
|
GST_PAD_SRC,
|
||||||
GST_PAD_SOMETIMES, /* FIXME: spider */
|
GST_PAD_SOMETIMES, /* FIXME: spider */
|
||||||
GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; " /* does not support 24bit without patch */
|
GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; " /* 24-bit PCM is barely supported by gstreamer actually */
|
||||||
GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS "; "
|
GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS "; " /* 64-bit float is barely supported by gstreamer actually */
|
||||||
"audio/x-alaw, "
|
"audio/x-alaw, "
|
||||||
"rate = (int) [ 8000, 48000 ], "
|
"rate = (int) [ 8000, 192000 ], "
|
||||||
"channels = (int) [ 1, 2 ]; "
|
"channels = (int) [ 1, 2 ]; "
|
||||||
"audio/x-mulaw, "
|
"audio/x-mulaw, "
|
||||||
"rate = (int) [ 8000, 48000 ], " "channels = (int) [ 1, 2 ]")
|
"rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 2 ]")
|
||||||
);
|
);
|
||||||
|
|
||||||
/* AuParse signals and args */
|
/* AuParse signals and args */
|
||||||
|
@ -185,12 +185,12 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
|
||||||
guint32 *head = (guint32 *) data;
|
guint32 *head = (guint32 *) data;
|
||||||
|
|
||||||
/* normal format is big endian (au is a Sparc format) */
|
/* normal format is big endian (au is a Sparc format) */
|
||||||
if (GUINT32_FROM_BE (*head) == 0x2e736e64) {
|
if (GUINT32_FROM_BE (*head) == 0x2e736e64) { /* ".snd" */
|
||||||
head++;
|
head++;
|
||||||
auparse->le = 0;
|
auparse->le = 0;
|
||||||
auparse->offset = GUINT32_FROM_BE (*head);
|
auparse->offset = GUINT32_FROM_BE (*head);
|
||||||
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++;
|
head++;
|
||||||
auparse->encoding = GUINT32_FROM_BE (*head);
|
auparse->encoding = GUINT32_FROM_BE (*head);
|
||||||
head++;
|
head++;
|
||||||
|
@ -201,12 +201,12 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
|
||||||
|
|
||||||
/* and of course, someone had to invent a little endian
|
/* and of course, someone had to invent a little endian
|
||||||
* version. Used by DEC systems. */
|
* 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++;
|
head++;
|
||||||
auparse->le = 1;
|
auparse->le = 1;
|
||||||
auparse->offset = GUINT32_FROM_LE (*head);
|
auparse->offset = GUINT32_FROM_LE (*head);
|
||||||
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++;
|
head++;
|
||||||
auparse->encoding = GUINT32_FROM_LE (*head);
|
auparse->encoding = GUINT32_FROM_LE (*head);
|
||||||
head++;
|
head++;
|
||||||
|
@ -230,16 +230,22 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
|
||||||
Docs :
|
Docs :
|
||||||
http://www.opengroup.org/public/pubs/external/auformat.html
|
http://www.opengroup.org/public/pubs/external/auformat.html
|
||||||
http://astronomy.swin.edu.au/~pbourke/dataformats/au/
|
http://astronomy.swin.edu.au/~pbourke/dataformats/au/
|
||||||
|
Solaris headers : /usr/include/audio/au.h
|
||||||
|
libsndfile : src/au.c
|
||||||
Samples :
|
Samples :
|
||||||
http://www.tsp.ece.mcgill.ca/MMSP/Documents/AudioFormats/AU/Samples.html
|
http://www.tsp.ece.mcgill.ca/MMSP/Documents/AudioFormats/AU/Samples.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (auparse->encoding) {
|
switch (auparse->encoding) {
|
||||||
|
|
||||||
case 1: /* 8-bit ISDN mu-law */
|
case 1: /* 8-bit ISDN mu-law G.711 */
|
||||||
law = 1;
|
law = 1;
|
||||||
depth = 8;
|
depth = 8;
|
||||||
break;
|
break;
|
||||||
|
case 27: /* 8-bit ISDN A-law G.711 */
|
||||||
|
law = 2;
|
||||||
|
depth = 8;
|
||||||
|
break;
|
||||||
|
|
||||||
case 2: /* 8-bit linear PCM */
|
case 2: /* 8-bit linear PCM */
|
||||||
depth = 8;
|
depth = 8;
|
||||||
|
@ -254,24 +260,38 @@ Samples :
|
||||||
depth = 32;
|
depth = 32;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 27: /* 8-bit ISDN a-law */
|
case 6: /* 32-bit IEEE floating point */
|
||||||
law = 2;
|
|
||||||
depth = 8;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6: /* 32 bit IEEE floating point */
|
|
||||||
ieee = 1;
|
ieee = 1;
|
||||||
depth = 32;
|
depth = 32;
|
||||||
break;
|
break;
|
||||||
case 7: /* 64 bit IEEE floating point */
|
case 7: /* 64-bit IEEE floating point */
|
||||||
ieee = 1;
|
ieee = 1;
|
||||||
depth = 64;
|
depth = 64;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 23: /* 4 bit CCITT G721 ADPCM */
|
case 8: /* Fragmented sample data */
|
||||||
case 24: /* CCITT G722 ADPCM */
|
case 9: /* AU_ENCODING_NESTED */
|
||||||
case 25: /* CCITT G723 ADPCM */
|
|
||||||
case 26: /* 5 bit CCITT G723 ADPCM */
|
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:
|
default:
|
||||||
GST_ELEMENT_ERROR (auparse, STREAM, FORMAT, (NULL), (NULL));
|
GST_ELEMENT_ERROR (auparse, STREAM, FORMAT, (NULL), (NULL));
|
||||||
|
@ -314,7 +334,8 @@ Samples :
|
||||||
|
|
||||||
newbuf = gst_buffer_new ();
|
newbuf = gst_buffer_new ();
|
||||||
GST_BUFFER_DATA (newbuf) = (gpointer) malloc (size - (auparse->offset));
|
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_SIZE (newbuf) = size - (auparse->offset);
|
||||||
|
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
Loading…
Reference in a new issue