diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-01-28 10:36:12 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-01-28 10:36:12 +0000 |
commit | 69d7980fe049396c7f44bf5cddd4df16ed904794 (patch) | |
tree | ac0c087b69258f20b32ea4e04501cea73d5bd4f6 /gst/qtdemux | |
parent | fba71c0906853090be4621b87fbfa4d44aa1164b (diff) | |
download | gst-plugins-bad-69d7980fe049396c7f44bf5cddd4df16ed904794.tar.gz gst-plugins-bad-69d7980fe049396c7f44bf5cddd4df16ed904794.tar.bz2 gst-plugins-bad-69d7980fe049396c7f44bf5cddd4df16ed904794.zip |
Add support for AMR-NB (mobile phone audio format; #155163, #163286).
Original commit message from CVS:
* configure.ac:
* ext/Makefile.am:
* ext/amrnb/Makefile.am:
* ext/amrnb/amrnb.c: (plugin_init):
* ext/amrnb/amrnbdec.c: (gst_amrnbdec_get_type),
(gst_amrnbdec_base_init), (gst_amrnbdec_class_init),
(gst_amrnbdec_init), (gst_amrnbdec_link), (gst_amrnbdec_chain),
(gst_amrnbdec_state_change):
* ext/amrnb/amrnbdec.h:
* ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
(gst_amrnbparse_base_init), (gst_amrnbparse_class_init),
(gst_amrnbparse_init), (gst_amrnbparse_formats),
(gst_amrnbparse_querytypes), (gst_amrnbparse_query),
(gst_amrnbparse_handle_event), (gst_amrnbparse_reserve),
(gst_amrnbparse_loop), (gst_amrnbparse_state_change):
* ext/amrnb/amrnbparse.h:
Add support for AMR-NB (mobile phone audio format; #155163, #163286).
* gst/typefind/gsttypefindfunctions.c: (plugin_init):
Add AMR-NB/-WB raw formats.
* ext/alsa/gstalsa.c: (gst_alsa_link):
Keep valid time when changing format.
* gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
(qtdemux_parse_trak):
Add some more format-specific options (#140141, #143555, #155163).
Diffstat (limited to 'gst/qtdemux')
-rw-r--r-- | gst/qtdemux/qtdemux.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 4e02a4ee..c565e285 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -78,6 +78,7 @@ struct _QtDemuxStream { guint32 subtype; GstCaps *caps; + guint32 fourcc; GstPad *pad; int n_samples; QtDemuxSample *samples; @@ -770,11 +771,14 @@ gst_qtdemux_loop_header (GstElement * element) */ } - GST_BUFFER_TIMESTAMP (buf) = - stream->samples[stream->sample_index].timestamp; - qtdemux->last_ts = GST_BUFFER_TIMESTAMP (buf); - GST_BUFFER_DURATION (buf) = - stream->samples[stream->sample_index].duration; + /* timestamps of AMR aren't known... */ + if (stream->fourcc != GST_MAKE_FOURCC ('s', 'a', 'm', 'r')) { + GST_BUFFER_TIMESTAMP (buf) = + stream->samples[stream->sample_index].timestamp; + qtdemux->last_ts = GST_BUFFER_TIMESTAMP (buf); + GST_BUFFER_DURATION (buf) = + stream->samples[stream->sample_index].duration; + } if (qtdemux->need_flush) { gst_pad_event_default (qtdemux->sinkpad, gst_event_new (GST_EVENT_FLUSH)); @@ -2022,7 +2026,7 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) GST_LOG ("frame count: %u", QTDEMUX_GUINT16_GET (stsd->data + offset + 48)); - fourcc = QTDEMUX_FOURCC_GET (stsd->data + offset + 4); + stream->fourcc = fourcc = QTDEMUX_FOURCC_GET (stsd->data + offset + 4); stream->caps = qtdemux_video_caps (qtdemux, fourcc, stsd->data); esds = NULL; @@ -2050,9 +2054,9 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) GST_LOG ("st type: " GST_FOURCC_FORMAT, GST_FOURCC_ARGS (QTDEMUX_FOURCC_GET (stsd->data + 16 + 4))); - fourcc = QTDEMUX_FOURCC_GET (stsd->data + 16 + 4); - + stream->fourcc = fourcc = QTDEMUX_FOURCC_GET (stsd->data + 16 + 4); offset = 32; + GST_LOG ("version/rev: %08x", QTDEMUX_GUINT32_GET (stsd->data + offset)); version = QTDEMUX_GUINT32_GET (stsd->data + offset); @@ -2098,6 +2102,17 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) stream->compression = 3; if (fourcc == GST_MAKE_FOURCC ('i', 'm', 'a', '4')) stream->compression = 4; + if (fourcc == GST_MAKE_FOURCC ('s', 'a', 'm', 'r')) { + stream->n_channels = 1; + stream->rate = 8000; + stream->bytes_per_frame <<= 3; + } + if (fourcc == GST_MAKE_FOURCC ('u', 'l', 'a', 'w')) + stream->compression = 2; + if (fourcc == GST_MAKE_FOURCC ('a', 'g', 's', 'm')) { + stream->bytes_per_frame *= 33; + stream->compression = 320; + } } else { GST_ERROR ("unknown version %08x", version); } |