From b1db900c741b487aa2d6d3f2456d9251aaa70085 Mon Sep 17 00:00:00 2001 From: Christian Schaller Date: Sun, 8 Dec 2002 12:23:48 +0000 Subject: [PATCH] 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 --- gst/wavparse/gstriff.c | 10 +++++----- gst/wavparse/gstwavparse.c | 27 +++++++++++++++------------ 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/gst/wavparse/gstriff.c b/gst/wavparse/gstriff.c index 1d8a7b0..bc4558d 100644 --- a/gst/wavparse/gstriff.c +++ b/gst/wavparse/gstriff.c @@ -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; diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c index 052f855..27cda78 100644 --- a/gst/wavparse/gstwavparse.c +++ b/gst/wavparse/gstwavparse.c @@ -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; -- 2.7.4