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).
This commit is contained in:
Ronald S. Bultje 2005-01-28 10:36:12 +00:00
parent 6532344da9
commit d1fc8e9747
4 changed files with 70 additions and 8 deletions

View file

@ -1,3 +1,30 @@
2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* 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).
2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* gst/matroska/matroska-demux.c:

View file

@ -778,6 +778,16 @@ GST_CHECK_FEATURE(ALSA, [alsa plug-ins], gstalsa, [
])
])
dnl *** AMR-NB ***
translit(dnm, m, l) AM_CONDITIONAL(USE_AMRNB, true)
GST_CHECK_FEATURE(AMRNB, [AMR-NB], amrnbdec amrnbenc, [
GST_CHECK_LIBHEADER(AMRNB, amrnb,
Decoder_Interface_init, -lm,
amrnb/interf_dec.h,
AMRNB_LIBS="-lamrnb -lm"
AC_SUBST(AMRNB_LIBS))
])
dnl *** arts ***
dnl if mcopidl can't be found there's no use in compiling it
AC_CHECK_PROG(MCOPIDL, mcopidl, yes, no)
@ -2021,6 +2031,7 @@ ext/Makefile
ext/a52dec/Makefile
ext/aalib/Makefile
ext/alsa/Makefile
ext/amrnb/Makefile
ext/arts/Makefile
ext/artsd/Makefile
ext/audiofile/Makefile

View file

@ -16,6 +16,12 @@ else
ALSA_DIR=
endif
if USE_AMRNB
AMRNB_DIR=amrnb
else
AMRNB=
endif
if USE_ARTS
ARTS_DIR=arts
else
@ -398,6 +404,8 @@ SUBDIRS=\
$(A52DEC_DIR) \
$(AALIB_DIR) \
$(ALSA_DIR) \
$(AMRNB_DIR) \
$(AMRWB_DIR) \
$(ARTS_DIR) \
$(ARTSC_DIR) \
$(AUDIOFILE_DIR) \
@ -464,6 +472,7 @@ DIST_SUBDIRS=\
a52dec \
aalib \
alsa \
amrnb \
arts \
artsd \
audiofile \

View file

@ -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);
}