2006-08-07 Tim-Philipp Müller <tim at centricular dot net>
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_mdpr):
+ Handle audio streams with stream_version 3 properly; warn about
+ unknown stream versions; handle unknown fourccs a tad more
+ gracefully (setting bogus caps). Also, use GST_FOURCC_ARGS
+ with GST_FOURCC_FORMAT.
+
+2006-08-07 Tim-Philipp Müller <tim at centricular dot net>
+
* ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
Error out properly if this is an interactive DVD (fixes #345694).
version = 4;
break;
default:
- GST_WARNING_OBJECT (rmdemux, "Unknown video FOURCC code");
+ stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
+ "fourcc", GST_TYPE_FOURCC, stream->fourcc, NULL);
+ GST_WARNING_OBJECT (rmdemux,
+ "Unknown video FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
+ GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
}
if (version) {
break;
default:
+ stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
+ "fourcc", GST_TYPE_FOURCC, stream->fourcc, NULL);
GST_WARNING_OBJECT (rmdemux,
- "Unknown audio FOURCC code \"%" GST_FOURCC_FORMAT "\"",
- stream->fourcc);
+ "Unknown audio FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
+ GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
break;
}
break;
case GST_RMDEMUX_STREAM_AUDIO:{
stream->version = RMDEMUX_GUINT16_GET (data + offset + 4);
- stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
- stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
- /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
- stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
- stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
-
GST_INFO ("stream version = %u", stream->version);
switch (stream->version) {
+ case 3:
+ stream->fourcc = GST_RM_AUD_14_4;
+ stream->packet_size = 20;
+ stream->rate = 8000;
+ stream->n_channels = 1;
+ stream->sample_width = 16;
+ stream->flavor = 1;
+ stream->leaf_size = 0;
+ stream->height = 0;
+ break;
case 4:
+ stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
+ stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
+ /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
+ stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
+ stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
stream->rate = RMDEMUX_GUINT16_GET (data + offset + 48);
stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 52);
stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 54);
stream->extra_data = (guint8 *) data + offset + 71;
break;
case 5:
+ stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
+ stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
+ /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
+ stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
+ stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
stream->rate = RMDEMUX_GUINT16_GET (data + offset + 54);
stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 58);
stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 60);
stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 74);
stream->extra_data = (guint8 *) data + offset + 78;
break;
+ default:{
+ GST_WARNING_OBJECT (rmdemux, "Unhandled audio stream version %d",
+ stream->version);
+ break;
+ }
}
/* 14_4, 28_8, cook, dnet, sipr, raac, racp, ralf, atrc */