mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 14:56:36 +00:00
wavparse: remove ifdef'ed code
We do have adtl and cue parse as part of toc handling alreday. The fmt code is a left over from <0.10 times.
This commit is contained in:
parent
9dde5e29da
commit
73fe1d1f6f
1 changed files with 0 additions and 426 deletions
|
@ -281,432 +281,6 @@ gst_wavparse_init (GstWavParse * wavparse)
|
|||
gst_element_add_pad (GST_ELEMENT_CAST (wavparse), wavparse->srcpad);
|
||||
}
|
||||
|
||||
/* FIXME: why is that not in use? */
|
||||
#if 0
|
||||
static void
|
||||
gst_wavparse_parse_adtl (GstWavParse * wavparse, int len)
|
||||
{
|
||||
guint32 got_bytes;
|
||||
GstByteStream *bs = wavparse->bs;
|
||||
gst_riff_chunk *temp_chunk, chunk;
|
||||
guint8 *tempdata;
|
||||
struct _gst_riff_labl labl, *temp_labl;
|
||||
struct _gst_riff_ltxt ltxt, *temp_ltxt;
|
||||
struct _gst_riff_note note, *temp_note;
|
||||
char *label_name;
|
||||
GstProps *props;
|
||||
GstPropsEntry *entry;
|
||||
GstCaps *new_caps;
|
||||
GList *caps = NULL;
|
||||
|
||||
props = wavparse->metadata->properties;
|
||||
|
||||
while (len > 0) {
|
||||
got_bytes =
|
||||
gst_bytestream_peek_bytes (bs, &tempdata, sizeof (gst_riff_chunk));
|
||||
if (got_bytes != sizeof (gst_riff_chunk)) {
|
||||
return;
|
||||
}
|
||||
temp_chunk = (gst_riff_chunk *) tempdata;
|
||||
|
||||
chunk.id = GUINT32_FROM_LE (temp_chunk->id);
|
||||
chunk.size = GUINT32_FROM_LE (temp_chunk->size);
|
||||
|
||||
if (chunk.size == 0) {
|
||||
gst_bytestream_flush (bs, sizeof (gst_riff_chunk));
|
||||
len -= sizeof (gst_riff_chunk);
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (chunk.id) {
|
||||
case GST_RIFF_adtl_labl:
|
||||
got_bytes =
|
||||
gst_bytestream_peek_bytes (bs, &tempdata,
|
||||
sizeof (struct _gst_riff_labl));
|
||||
if (got_bytes != sizeof (struct _gst_riff_labl)) {
|
||||
return;
|
||||
}
|
||||
|
||||
temp_labl = (struct _gst_riff_labl *) tempdata;
|
||||
labl.id = GUINT32_FROM_LE (temp_labl->id);
|
||||
labl.size = GUINT32_FROM_LE (temp_labl->size);
|
||||
labl.identifier = GUINT32_FROM_LE (temp_labl->identifier);
|
||||
|
||||
gst_bytestream_flush (bs, sizeof (struct _gst_riff_labl));
|
||||
len -= sizeof (struct _gst_riff_labl);
|
||||
|
||||
got_bytes = gst_bytestream_peek_bytes (bs, &tempdata, labl.size - 4);
|
||||
if (got_bytes != labl.size - 4) {
|
||||
return;
|
||||
}
|
||||
|
||||
label_name = (char *) tempdata;
|
||||
|
||||
gst_bytestream_flush (bs, ((labl.size - 4) + 1) & ~1);
|
||||
len -= (((labl.size - 4) + 1) & ~1);
|
||||
|
||||
new_caps = gst_caps_new ("label",
|
||||
"application/x-gst-metadata",
|
||||
gst_props_new ("identifier", G_TYPE_INT (labl.identifier),
|
||||
"name", G_TYPE_STRING (label_name), NULL));
|
||||
|
||||
if (gst_props_get (props, "labels", &caps, NULL)) {
|
||||
caps = g_list_append (caps, new_caps);
|
||||
} else {
|
||||
caps = g_list_append (NULL, new_caps);
|
||||
|
||||
entry = gst_props_entry_new ("labels", GST_PROPS_GLIST (caps));
|
||||
gst_props_add_entry (props, entry);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case GST_RIFF_adtl_ltxt:
|
||||
got_bytes =
|
||||
gst_bytestream_peek_bytes (bs, &tempdata,
|
||||
sizeof (struct _gst_riff_ltxt));
|
||||
if (got_bytes != sizeof (struct _gst_riff_ltxt)) {
|
||||
return;
|
||||
}
|
||||
|
||||
temp_ltxt = (struct _gst_riff_ltxt *) tempdata;
|
||||
ltxt.id = GUINT32_FROM_LE (temp_ltxt->id);
|
||||
ltxt.size = GUINT32_FROM_LE (temp_ltxt->size);
|
||||
ltxt.identifier = GUINT32_FROM_LE (temp_ltxt->identifier);
|
||||
ltxt.length = GUINT32_FROM_LE (temp_ltxt->length);
|
||||
ltxt.purpose = GUINT32_FROM_LE (temp_ltxt->purpose);
|
||||
ltxt.country = GUINT16_FROM_LE (temp_ltxt->country);
|
||||
ltxt.language = GUINT16_FROM_LE (temp_ltxt->language);
|
||||
ltxt.dialect = GUINT16_FROM_LE (temp_ltxt->dialect);
|
||||
ltxt.codepage = GUINT16_FROM_LE (temp_ltxt->codepage);
|
||||
|
||||
gst_bytestream_flush (bs, sizeof (struct _gst_riff_ltxt));
|
||||
len -= sizeof (struct _gst_riff_ltxt);
|
||||
|
||||
if (ltxt.size - 20 > 0) {
|
||||
got_bytes = gst_bytestream_peek_bytes (bs, &tempdata, ltxt.size - 20);
|
||||
if (got_bytes != ltxt.size - 20) {
|
||||
return;
|
||||
}
|
||||
|
||||
gst_bytestream_flush (bs, ((ltxt.size - 20) + 1) & ~1);
|
||||
len -= (((ltxt.size - 20) + 1) & ~1);
|
||||
|
||||
label_name = (char *) tempdata;
|
||||
} else {
|
||||
label_name = "";
|
||||
}
|
||||
|
||||
new_caps = gst_caps_new ("ltxt",
|
||||
"application/x-gst-metadata",
|
||||
gst_props_new ("identifier", G_TYPE_INT (ltxt.identifier),
|
||||
"name", G_TYPE_STRING (label_name),
|
||||
"length", G_TYPE_INT (ltxt.length), NULL));
|
||||
|
||||
if (gst_props_get (props, "ltxts", &caps, NULL)) {
|
||||
caps = g_list_append (caps, new_caps);
|
||||
} else {
|
||||
caps = g_list_append (NULL, new_caps);
|
||||
|
||||
entry = gst_props_entry_new ("ltxts", GST_PROPS_GLIST (caps));
|
||||
gst_props_add_entry (props, entry);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case GST_RIFF_adtl_note:
|
||||
got_bytes =
|
||||
gst_bytestream_peek_bytes (bs, &tempdata,
|
||||
sizeof (struct _gst_riff_note));
|
||||
if (got_bytes != sizeof (struct _gst_riff_note)) {
|
||||
return;
|
||||
}
|
||||
|
||||
temp_note = (struct _gst_riff_note *) tempdata;
|
||||
note.id = GUINT32_FROM_LE (temp_note->id);
|
||||
note.size = GUINT32_FROM_LE (temp_note->size);
|
||||
note.identifier = GUINT32_FROM_LE (temp_note->identifier);
|
||||
|
||||
gst_bytestream_flush (bs, sizeof (struct _gst_riff_note));
|
||||
len -= sizeof (struct _gst_riff_note);
|
||||
|
||||
got_bytes = gst_bytestream_peek_bytes (bs, &tempdata, note.size - 4);
|
||||
if (got_bytes != note.size - 4) {
|
||||
return;
|
||||
}
|
||||
|
||||
gst_bytestream_flush (bs, ((note.size - 4) + 1) & ~1);
|
||||
len -= (((note.size - 4) + 1) & ~1);
|
||||
|
||||
label_name = (char *) tempdata;
|
||||
|
||||
new_caps = gst_caps_new ("note",
|
||||
"application/x-gst-metadata",
|
||||
gst_props_new ("identifier", G_TYPE_INT (note.identifier),
|
||||
"name", G_TYPE_STRING (label_name), NULL));
|
||||
|
||||
if (gst_props_get (props, "notes", &caps, NULL)) {
|
||||
caps = g_list_append (caps, new_caps);
|
||||
} else {
|
||||
caps = g_list_append (NULL, new_caps);
|
||||
|
||||
entry = gst_props_entry_new ("notes", GST_PROPS_GLIST (caps));
|
||||
gst_props_add_entry (props, entry);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
g_print ("Unknown chunk: %" GST_FOURCC_FORMAT "\n",
|
||||
GST_FOURCC_ARGS (chunk.id));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
g_object_notify (G_OBJECT (wavparse), "metadata");
|
||||
}
|
||||
|
||||
static void
|
||||
gst_wavparse_parse_cues (GstWavParse * wavparse, int len)
|
||||
{
|
||||
guint32 got_bytes;
|
||||
GstByteStream *bs = wavparse->bs;
|
||||
struct _gst_riff_cue *temp_cue, cue;
|
||||
struct _gst_riff_cuepoints *points;
|
||||
guint8 *tempdata;
|
||||
int i;
|
||||
GList *cues = NULL;
|
||||
GstPropsEntry *entry;
|
||||
|
||||
while (len > 0) {
|
||||
int required;
|
||||
|
||||
got_bytes =
|
||||
gst_bytestream_peek_bytes (bs, &tempdata,
|
||||
sizeof (struct _gst_riff_cue));
|
||||
temp_cue = (struct _gst_riff_cue *) tempdata;
|
||||
|
||||
/* fixup for our big endian friends */
|
||||
cue.id = GUINT32_FROM_LE (temp_cue->id);
|
||||
cue.size = GUINT32_FROM_LE (temp_cue->size);
|
||||
cue.cuepoints = GUINT32_FROM_LE (temp_cue->cuepoints);
|
||||
|
||||
gst_bytestream_flush (bs, sizeof (struct _gst_riff_cue));
|
||||
if (got_bytes != sizeof (struct _gst_riff_cue)) {
|
||||
return;
|
||||
}
|
||||
|
||||
len -= sizeof (struct _gst_riff_cue);
|
||||
|
||||
/* -4 because cue.size contains the cuepoints size
|
||||
and we've already flushed that out of the system */
|
||||
required = cue.size - 4;
|
||||
got_bytes = gst_bytestream_peek_bytes (bs, &tempdata, required);
|
||||
gst_bytestream_flush (bs, ((required) + 1) & ~1);
|
||||
if (got_bytes != required) {
|
||||
return;
|
||||
}
|
||||
|
||||
len -= (((cue.size - 4) + 1) & ~1);
|
||||
|
||||
/* now we have an array of struct _gst_riff_cuepoints in tempdata */
|
||||
points = (struct _gst_riff_cuepoints *) tempdata;
|
||||
|
||||
for (i = 0; i < cue.cuepoints; i++) {
|
||||
GstCaps *caps;
|
||||
|
||||
caps = gst_caps_new ("cues",
|
||||
"application/x-gst-metadata",
|
||||
gst_props_new ("identifier", G_TYPE_INT (points[i].identifier),
|
||||
"position", G_TYPE_INT (points[i].offset), NULL));
|
||||
cues = g_list_append (cues, caps);
|
||||
}
|
||||
|
||||
entry = gst_props_entry_new ("cues", GST_PROPS_GLIST (cues));
|
||||
gst_props_add_entry (wavparse->metadata->properties, entry);
|
||||
}
|
||||
|
||||
g_object_notify (G_OBJECT (wavparse), "metadata");
|
||||
}
|
||||
|
||||
/* Read 'fmt ' header */
|
||||
static gboolean
|
||||
gst_wavparse_fmt (GstWavParse * wav)
|
||||
{
|
||||
gst_riff_strf_auds *header = NULL;
|
||||
GstCaps *caps;
|
||||
|
||||
if (!gst_riff_read_strf_auds (wav, &header))
|
||||
goto no_fmt;
|
||||
|
||||
wav->format = header->format;
|
||||
wav->rate = header->rate;
|
||||
wav->channels = header->channels;
|
||||
if (wav->channels == 0)
|
||||
goto no_channels;
|
||||
|
||||
wav->blockalign = header->blockalign;
|
||||
wav->width = (header->blockalign * 8) / header->channels;
|
||||
wav->depth = header->size;
|
||||
wav->bps = header->av_bps;
|
||||
if (wav->bps <= 0)
|
||||
goto no_bps;
|
||||
|
||||
/* Note: gst_riff_create_audio_caps might need to fix values in
|
||||
* the header header depending on the format, so call it first */
|
||||
/* FIXME: Need to handle the channel reorder map */
|
||||
caps = gst_riff_create_audio_caps (header->format, NULL, header, NULL, NULL);
|
||||
g_free (header);
|
||||
|
||||
if (caps == NULL)
|
||||
goto no_caps;
|
||||
|
||||
gst_wavparse_create_sourcepad (wav);
|
||||
gst_pad_use_fixed_caps (wav->srcpad);
|
||||
gst_pad_set_active (wav->srcpad, TRUE);
|
||||
gst_pad_set_caps (wav->srcpad, caps);
|
||||
gst_caps_free (caps);
|
||||
gst_element_add_pad (GST_ELEMENT_CAST (wav), wav->srcpad);
|
||||
gst_element_no_more_pads (GST_ELEMENT_CAST (wav));
|
||||
|
||||
GST_DEBUG ("frequency %u, channels %u", wav->rate, wav->channels);
|
||||
|
||||
return TRUE;
|
||||
|
||||
/* ERRORS */
|
||||
no_fmt:
|
||||
{
|
||||
GST_ELEMENT_ERROR (wav, STREAM, TYPE_NOT_FOUND, (NULL),
|
||||
("No FMT tag found"));
|
||||
return FALSE;
|
||||
}
|
||||
no_channels:
|
||||
{
|
||||
GST_ELEMENT_ERROR (wav, STREAM, FAILED, (NULL),
|
||||
("Stream claims to contain zero channels - invalid data"));
|
||||
g_free (header);
|
||||
return FALSE;
|
||||
}
|
||||
no_bps:
|
||||
{
|
||||
GST_ELEMENT_ERROR (wav, STREAM, FAILED, (NULL),
|
||||
("Stream claims to bitrate of <= zero - invalid data"));
|
||||
g_free (header);
|
||||
return FALSE;
|
||||
}
|
||||
no_caps:
|
||||
{
|
||||
GST_ELEMENT_ERROR (wav, STREAM, TYPE_NOT_FOUND, (NULL), (NULL));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_wavparse_other (GstWavParse * wav)
|
||||
{
|
||||
guint32 tag, length;
|
||||
|
||||
if (!gst_riff_peek_head (wav, &tag, &length, NULL)) {
|
||||
GST_WARNING_OBJECT (wav, "could not peek head");
|
||||
return FALSE;
|
||||
}
|
||||
GST_DEBUG_OBJECT (wav, "got tag (%08x) %4.4s, length %u", tag,
|
||||
(const gchar *) &tag, length);
|
||||
|
||||
switch (tag) {
|
||||
case GST_RIFF_TAG_LIST:
|
||||
if (!(tag = gst_riff_peek_list (wav))) {
|
||||
GST_WARNING_OBJECT (wav, "could not peek list");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch (tag) {
|
||||
case GST_RIFF_LIST_INFO:
|
||||
if (!gst_riff_read_list (wav, &tag) || !gst_riff_read_info (wav)) {
|
||||
GST_WARNING_OBJECT (wav, "could not read list");
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
case GST_RIFF_LIST_adtl:
|
||||
if (!gst_riff_read_skip (wav)) {
|
||||
GST_WARNING_OBJECT (wav, "could not read skip");
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
GST_DEBUG_OBJECT (wav, "skipping tag (%08x) %4.4s", tag,
|
||||
(gchar *) & tag);
|
||||
if (!gst_riff_read_skip (wav)) {
|
||||
GST_WARNING_OBJECT (wav, "could not read skip");
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case GST_RIFF_TAG_data:
|
||||
if (!gst_bytestream_flush (wav->bs, 8)) {
|
||||
GST_WARNING_OBJECT (wav, "could not flush 8 bytes");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (wav, "switching to data mode");
|
||||
wav->state = GST_WAVPARSE_DATA;
|
||||
wav->datastart = gst_bytestream_tell (wav->bs);
|
||||
if (length == 0) {
|
||||
guint64 file_length;
|
||||
|
||||
/* length is 0, data probably stretches to the end
|
||||
* of file */
|
||||
GST_DEBUG_OBJECT (wav, "length is 0 trying to find length");
|
||||
/* get length of file */
|
||||
file_length = gst_bytestream_length (wav->bs);
|
||||
if (file_length == -1) {
|
||||
GST_DEBUG_OBJECT (wav,
|
||||
"could not get file length, assuming data to eof");
|
||||
/* could not get length, assuming till eof */
|
||||
length = G_MAXUINT32;
|
||||
}
|
||||
if (file_length > G_MAXUINT32) {
|
||||
GST_DEBUG_OBJECT (wav, "file length %" G_GUINT64_FORMAT
|
||||
", clipping to 32 bits", file_length);
|
||||
/* could not get length, assuming till eof */
|
||||
length = G_MAXUINT32;
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (wav, "file length %" G_GUINT64_FORMAT
|
||||
", datalength %u", file_length, length);
|
||||
/* substract offset of datastart from length */
|
||||
length = file_length - wav->datastart;
|
||||
GST_DEBUG_OBJECT (wav, "datalength %u", length);
|
||||
}
|
||||
}
|
||||
wav->datasize = (guint64) length;
|
||||
GST_DEBUG_OBJECT (wav, "datasize = %ld", length)
|
||||
break;
|
||||
|
||||
case GST_RIFF_TAG_cue:
|
||||
if (!gst_riff_read_skip (wav)) {
|
||||
GST_WARNING_OBJECT (wav, "could not read skip");
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
GST_WARNING_OBJECT (wav, "skipping tag %" GST_FOURCC_FORMAT,
|
||||
GST_FOURCC_ARGS (tag));
|
||||
if (!gst_riff_read_skip (wav))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static gboolean
|
||||
gst_wavparse_parse_file_header (GstElement * element, GstBuffer * buf)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue