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);
}
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;
"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)
/* 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",
"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) {
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;