mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-04 22:48:54 +00:00
Applied endianess fix and unsigned data fix from Jon Nall
Original commit message from CVS: Applied endianess fix and unsigned data fix from Jon Nall
This commit is contained in:
parent
4682001013
commit
b1db900c74
2 changed files with 20 additions and 17 deletions
|
@ -69,9 +69,9 @@ gint gst_riff_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off) {
|
|||
g_return_val_if_fail(chunk != NULL,0);
|
||||
chunk->offset = riff->nextlikely+8; /* point to the actual data */
|
||||
chunk->id = words[0];
|
||||
chunk->size = words[1];
|
||||
chunk->size = GUINT32_FROM_LE(words[1]);
|
||||
/* g_print("chunk id is 0x%08x '%s' and is 0x%08x long\n",words[0], */
|
||||
/* gst_riff_id_to_fourcc(words[0]),words[1]); */
|
||||
/* gst_riff_id_to_fourcc(words[0]),chunk->size); */
|
||||
riff->nextlikely += 8 + chunk->size; /* doesn't include hdr */
|
||||
riff->chunks = g_list_prepend(riff->chunks,chunk);
|
||||
}
|
||||
|
@ -82,15 +82,15 @@ gint gst_riff_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off) {
|
|||
|
||||
gulong gst_riff_fourcc_to_id(gchar *fourcc) {
|
||||
g_return_val_if_fail(fourcc != NULL,0);
|
||||
|
||||
return (fourcc[0] << 0) | (fourcc[1] << 8) |
|
||||
(fourcc[2] << 16) | (fourcc[3] << 24);
|
||||
return GUINT32_FROM_LE((gulong)(fourcc[0] << 0) | (fourcc[1] << 8) |
|
||||
(fourcc[2] << 16) | (fourcc[3] << 24));
|
||||
}
|
||||
|
||||
gchar *gst_riff_id_to_fourcc(gulong id) {
|
||||
gchar *fourcc = (gchar *)malloc(5);
|
||||
|
||||
g_return_val_if_fail(fourcc != NULL, NULL);
|
||||
id = GUINT32_FROM_LE(id);
|
||||
|
||||
fourcc[0] = (id >> 0) & 0xff;
|
||||
fourcc[1] = (id >> 8) & 0xff;
|
||||
|
|
|
@ -73,7 +73,10 @@ GST_PAD_TEMPLATE_FACTORY (src_template_factory,
|
|||
"format", GST_PROPS_STRING ("int"),
|
||||
"law", GST_PROPS_INT (0),
|
||||
"endianness", GST_PROPS_INT (G_BYTE_ORDER),
|
||||
"signed", GST_PROPS_BOOLEAN (TRUE),
|
||||
"signed", GST_PROPS_LIST (
|
||||
GST_PROPS_BOOLEAN (FALSE),
|
||||
GST_PROPS_BOOLEAN (TRUE)
|
||||
),
|
||||
"width", GST_PROPS_LIST (
|
||||
GST_PROPS_INT (8),
|
||||
GST_PROPS_INT (16)
|
||||
|
@ -290,6 +293,11 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
|
|||
/* we can gather format information now */
|
||||
format = (GstWavParseFormat *)((guchar *) GST_BUFFER_DATA (buf) + fmt->offset);
|
||||
|
||||
wavparse->bps = GUINT16_FROM_LE(format->wBlockAlign);
|
||||
wavparse->rate = GUINT32_FROM_LE(format->dwSamplesPerSec);
|
||||
wavparse->channels = GUINT16_FROM_LE(format->wChannels);
|
||||
wavparse->width = GUINT16_FROM_LE(format->wBitsPerSample);
|
||||
|
||||
/* set the caps on the src pad */
|
||||
caps = GST_CAPS_NEW (
|
||||
"parsewav_src",
|
||||
|
@ -297,11 +305,11 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
|
|||
"format", GST_PROPS_STRING ("int"),
|
||||
"law", GST_PROPS_INT (0), /*FIXME */
|
||||
"endianness", GST_PROPS_INT (G_BYTE_ORDER),
|
||||
"signed", GST_PROPS_BOOLEAN (TRUE), /*FIXME */
|
||||
"width", GST_PROPS_INT (format->wBitsPerSample),
|
||||
"depth", GST_PROPS_INT (format->wBitsPerSample),
|
||||
"rate", GST_PROPS_INT (format->dwSamplesPerSec),
|
||||
"channels", GST_PROPS_INT (format->wChannels)
|
||||
"signed", GST_PROPS_BOOLEAN ((wavparse->width > 8) ? TRUE : FALSE),
|
||||
"width", GST_PROPS_INT (wavparse->width),
|
||||
"depth", GST_PROPS_INT (wavparse->width),
|
||||
"rate", GST_PROPS_INT (wavparse->rate),
|
||||
"channels", GST_PROPS_INT (wavparse->channels)
|
||||
);
|
||||
|
||||
if (gst_pad_try_set_caps (wavparse->srcpad, caps) <= 0) {
|
||||
|
@ -309,13 +317,8 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
|
|||
return;
|
||||
}
|
||||
|
||||
wavparse->bps = format->wBlockAlign;
|
||||
wavparse->rate = format->dwSamplesPerSec;
|
||||
wavparse->channels = format->wChannels;
|
||||
wavparse->width = format->wBitsPerSample;
|
||||
|
||||
GST_DEBUG (0, "frequency %d, channels %d",
|
||||
format->dwSamplesPerSec, format->wChannels);
|
||||
wavparse->rate, wavparse->channels);
|
||||
|
||||
/* we're now looking for the data chunk */
|
||||
wavparse->state = GST_WAVPARSE_CHUNK_DATA;
|
||||
|
|
Loading…
Reference in a new issue