summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/faad/gstfaad.c290
-rw-r--r--ext/faad/gstfaad.h4
2 files changed, 1 insertions, 293 deletions
diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c
index ff0b72de0..b416a623c 100644
--- a/ext/faad/gstfaad.c
+++ b/ext/faad/gstfaad.c
@@ -139,7 +139,6 @@ static void gst_faad_reset (GstFaad * faad);
static void clear_queued (GstFaad * faad);
static gboolean gst_faad_setcaps (GstPad * pad, GstCaps * caps);
-static GstCaps *gst_faad_srcgetcaps (GstPad * pad);
static gboolean gst_faad_src_event (GstPad * pad, GstEvent * event);
static gboolean gst_faad_sink_event (GstPad * pad, GstEvent * event);
static gboolean gst_faad_src_query (GstPad * pad, GstQuery * query);
@@ -217,8 +216,6 @@ gst_faad_init (GstFaad * faad)
faad->srcpad = gst_pad_new_from_static_template (&src_template, "src");
gst_pad_use_fixed_caps (faad->srcpad);
- gst_pad_set_getcaps_function (faad->srcpad,
- GST_DEBUG_FUNCPTR (gst_faad_srcgetcaps));
gst_pad_set_query_function (faad->srcpad,
GST_DEBUG_FUNCPTR (gst_faad_src_query));
gst_pad_set_event_function (faad->srcpad,
@@ -234,7 +231,6 @@ gst_faad_reset (GstFaad * faad)
gst_segment_init (&faad->segment, GST_FORMAT_TIME);
faad->samplerate = -1;
faad->channels = -1;
- faad->need_channel_setup = TRUE;
faad->init = FALSE;
faad->packetised = FALSE;
g_free (faad->channel_positions);
@@ -384,8 +380,6 @@ gst_faad_setcaps (GstPad * pad, GstCaps * caps)
}
}
- faad->need_channel_setup = TRUE;
-
if (!faad->packetised)
gst_faad_send_tags (faad);
@@ -407,59 +401,6 @@ init_failed:
}
}
-
-/*
- * Channel identifier conversion - caller g_free()s result!
- */
-/*
-static guchar *
-gst_faad_chanpos_from_gst (GstAudioChannelPosition * pos, guint num)
-{
- guchar *fpos = g_new (guchar, num);
- guint n;
-
- for (n = 0; n < num; n++) {
- switch (pos[n]) {
- case GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT:
- fpos[n] = FRONT_CHANNEL_LEFT;
- break;
- case GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT:
- fpos[n] = FRONT_CHANNEL_RIGHT;
- break;
- case GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER:
- case GST_AUDIO_CHANNEL_POSITION_FRONT_MONO:
- fpos[n] = FRONT_CHANNEL_CENTER;
- break;
- case GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT:
- fpos[n] = SIDE_CHANNEL_LEFT;
- break;
- case GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT:
- fpos[n] = SIDE_CHANNEL_RIGHT;
- break;
- case GST_AUDIO_CHANNEL_POSITION_REAR_LEFT:
- fpos[n] = BACK_CHANNEL_LEFT;
- break;
- case GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT:
- fpos[n] = BACK_CHANNEL_RIGHT;
- break;
- case GST_AUDIO_CHANNEL_POSITION_REAR_CENTER:
- fpos[n] = BACK_CHANNEL_CENTER;
- break;
- case GST_AUDIO_CHANNEL_POSITION_LFE:
- fpos[n] = LFE_CHANNEL;
- break;
- default:
- GST_WARNING ("Unsupported GST channel position 0x%x encountered",
- pos[n]);
- g_free (fpos);
- return NULL;
- }
- }
-
- return fpos;
-}
-*/
-
static GstAudioChannelPosition *
gst_faad_chanpos_to_gst (GstFaad * faad, guchar * fpos, guint num,
gboolean * channel_map_failed)
@@ -547,237 +488,6 @@ gst_faad_chanpos_to_gst (GstFaad * faad, guchar * fpos, guint num,
return pos;
}
-static GstCaps *
-gst_faad_srcgetcaps (GstPad * pad)
-{
- GstFaad *faad = GST_FAAD (gst_pad_get_parent (pad));
- static GstAudioChannelPosition *supported_positions = NULL;
- static gint num_supported_positions = LFE_CHANNEL - FRONT_CHANNEL_CENTER + 1;
- GstCaps *templ;
-
- if (!supported_positions) {
- guchar *supported_fpos = g_new0 (guchar, num_supported_positions);
- gint n;
- gboolean map_failed;
-
- for (n = 0; n < num_supported_positions; n++) {
- supported_fpos[n] = n + FRONT_CHANNEL_CENTER;
- }
- supported_positions = gst_faad_chanpos_to_gst (faad, supported_fpos,
- num_supported_positions, &map_failed);
- g_free (supported_fpos);
- }
-
- if (faad->handle != NULL && faad->channels != -1 && faad->samplerate != -1) {
- GstCaps *caps = gst_caps_new_empty ();
- GstStructure *str;
- gint fmt[] = {
- FAAD_FMT_16BIT,
-#if 0
- FAAD_FMT_24BIT,
- FAAD_FMT_32BIT,
- FAAD_FMT_FLOAT,
- FAAD_FMT_DOUBLE,
-#endif
- -1
- }
- , n;
-
- for (n = 0; fmt[n] != -1; n++) {
- switch (fmt[n]) {
- case FAAD_FMT_16BIT:
- str = gst_structure_new ("audio/x-raw-int",
- "signed", G_TYPE_BOOLEAN, TRUE,
- "width", G_TYPE_INT, 16, "depth", G_TYPE_INT, 16, NULL);
- break;
-#if 0
- case FAAD_FMT_24BIT:
- str = gst_structure_new ("audio/x-raw-int",
- "signed", G_TYPE_BOOLEAN, TRUE,
- "width", G_TYPE_INT, 24, "depth", G_TYPE_INT, 24, NULL);
- break;
- case FAAD_FMT_32BIT:
- str = gst_structure_new ("audio/x-raw-int",
- "signed", G_TYPE_BOOLEAN, TRUE,
- "width", G_TYPE_INT, 32, "depth", G_TYPE_INT, 32, NULL);
- break;
- case FAAD_FMT_FLOAT:
- str = gst_structure_new ("audio/x-raw-float",
- "depth", G_TYPE_INT, 32, NULL);
- break;
- case FAAD_FMT_DOUBLE:
- str = gst_structure_new ("audio/x-raw-float",
- "depth", G_TYPE_INT, 64, NULL);
- break;
-#endif
- default:
- str = NULL;
- break;
- }
- if (!str)
- continue;
-
- if (faad->samplerate > 0) {
- gst_structure_set (str, "rate", G_TYPE_INT, faad->samplerate, NULL);
- } else {
- gst_structure_set (str, "rate", GST_TYPE_INT_RANGE, 8000, 96000, NULL);
- }
-
- if (faad->channels > 0) {
- gst_structure_set (str, "channels", G_TYPE_INT, faad->channels, NULL);
-
- /* put channel information here */
- if (faad->channel_positions) {
- GstAudioChannelPosition *pos;
- gboolean map_failed;
-
- pos = gst_faad_chanpos_to_gst (faad, faad->channel_positions,
- faad->channels, &map_failed);
- if (map_failed) {
- gst_structure_free (str);
- continue;
- }
- if (pos) {
- gst_audio_set_channel_positions (str, pos);
- g_free (pos);
- }
- } else {
- gst_audio_set_structure_channel_positions_list (str,
- supported_positions, num_supported_positions);
- }
- } else {
- gst_structure_set (str, "channels", GST_TYPE_INT_RANGE, 1, 8, NULL);
- /* we set channel positions later */
- }
-
- gst_structure_set (str, "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL);
-
- gst_caps_append_structure (caps, str);
- }
-
- if (faad->channels == -1) {
- gst_audio_set_caps_channel_positions_list (caps,
- supported_positions, num_supported_positions);
- }
- gst_object_unref (faad);
- return caps;
- }
-
- /* template with channel positions */
- templ = gst_caps_copy (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad)));
- gst_audio_set_caps_channel_positions_list (templ,
- supported_positions, num_supported_positions);
-
- gst_object_unref (faad);
- return templ;
-}
-
-/*
-static GstPadLinkReturn
-gst_faad_srcconnect (GstPad * pad, const GstCaps * caps)
-{
- GstStructure *structure;
- const gchar *mimetype;
- gint fmt = -1;
- gint depth, rate, channels;
- GstFaad *faad = GST_FAAD (gst_pad_get_parent (pad));
-
- structure = gst_caps_get_structure (caps, 0);
-
- if (!faad->handle || (faad->samplerate == -1 || faad->channels == -1) ||
- !faad->channel_positions) {
- return GST_PAD_LINK_DELAYED;
- }
-
- mimetype = gst_structure_get_name (structure);
-
- // Samplerate and channels are normally provided through
- // * the getcaps function
- if (!gst_structure_get_int (structure, "channels", &channels) ||
- !gst_structure_get_int (structure, "rate", &rate) ||
- rate != faad->samplerate || channels != faad->channels) {
- return GST_PAD_LINK_REFUSED;
- }
-
- // Another internal checkup.
- if (faad->need_channel_setup) {
- GstAudioChannelPosition *pos;
- guchar *fpos;
- guint i;
-
- pos = gst_audio_get_channel_positions (structure);
- if (!pos) {
- return GST_PAD_LINK_DELAYED;
- }
- fpos = gst_faad_chanpos_from_gst (pos, faad->channels);
- g_free (pos);
- if (!fpos)
- return GST_PAD_LINK_REFUSED;
-
- for (i = 0; i < faad->channels; i++) {
- if (fpos[i] != faad->channel_positions[i]) {
- g_free (fpos);
- return GST_PAD_LINK_REFUSED;
- }
- }
- g_free (fpos);
- }
-
- if (!strcmp (mimetype, "audio/x-raw-int")) {
- gint width;
-
- if (!gst_structure_get_int (structure, "depth", &depth) ||
- !gst_structure_get_int (structure, "width", &width))
- return GST_PAD_LINK_REFUSED;
- if (depth != width)
- return GST_PAD_LINK_REFUSED;
-
- switch (depth) {
- case 16:
- fmt = FAAD_FMT_16BIT;
- break;
-#if 0
- case 24:
- fmt = FAAD_FMT_24BIT;
- break;
- case 32:
- fmt = FAAD_FMT_32BIT;
- break;
-#endif
- }
- } else {
- if (!gst_structure_get_int (structure, "depth", &depth))
- return GST_PAD_LINK_REFUSED;
-
- switch (depth) {
-#if 0
- case 32:
- fmt = FAAD_FMT_FLOAT;
- break;
- case 64:
- fmt = FAAD_FMT_DOUBLE;
- break;
-#endif
- }
- }
-
- if (fmt != -1) {
- faacDecConfiguration *conf;
-
- conf = faacDecGetCurrentConfiguration (faad->handle);
- conf->outputFormat = fmt;
- if (faacDecSetConfiguration (faad->handle, conf) == 0)
- return GST_PAD_LINK_REFUSED;
-
- // FIXME: handle return value, how?
- faad->bps = depth / 8;
-
- return GST_PAD_LINK_OK;
- }
-
- return GST_PAD_LINK_REFUSED;
-}*/
-
static void
clear_queued (GstFaad * faad)
{
diff --git a/ext/faad/gstfaad.h b/ext/faad/gstfaad.h
index 7e7837953..7873ff05f 100644
--- a/ext/faad/gstfaad.h
+++ b/ext/faad/gstfaad.h
@@ -49,6 +49,7 @@ typedef struct _GstFaad {
guint samplerate; /* sample rate of the last MPEG frame */
guint channels; /* number of channels of the last frame */
guint bps; /* bytes per sample */
+ guchar *channel_positions;
guint8 fake_codec_data[2];
@@ -58,9 +59,6 @@ typedef struct _GstFaad {
faacDecHandle handle;
gboolean init;
- /* FAAD channel setup */
- guchar *channel_positions;
- gboolean need_channel_setup;
gboolean packetised; /* We must differentiate between raw and packetised streams */
gint64 prev_ts; /* timestamp of previous buffer */