ext/amrnb/amrnbparse.c: use #defines for HEADER. Unref the object in _sink_activate_pull().

Original commit message from CVS:
* ext/amrnb/amrnbparse.c:
use #defines for HEADER. Unref the object in _sink_activate_pull().
This commit is contained in:
Stefan Kost 2008-10-09 09:23:00 +00:00
parent 26209707d9
commit b3f491c6e1
2 changed files with 26 additions and 13 deletions

View file

@ -1,3 +1,8 @@
2008-10-09 Stefan Kost <ensonic@users.sf.net>
* ext/amrnb/amrnbparse.c:
use #defines for HEADER. Unref the object in _sink_activate_pull().
2008-10-08 Wim Taymans <wim.taymans@collabora.co.uk> 2008-10-08 Wim Taymans <wim.taymans@collabora.co.uk>
* ext/mad/gstmad.c: (gst_mad_src_event), (gst_mad_chain), * ext/mad/gstmad.c: (gst_mad_src_event), (gst_mad_chain),

View file

@ -57,6 +57,9 @@ static const gint block_size[16] = { 12, 13, 15, 17, 19, 20, 26, 31, 5,
0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0
}; };
#define AMRNB_HEADER_SIZE 6
#define AMRNB_HEADER_STR "#!AMR\n"
/*static const GstFormat *gst_amrnbparse_formats (GstPad * pad);*/ /*static const GstFormat *gst_amrnbparse_formats (GstPad * pad);*/
static const GstQueryType *gst_amrnbparse_querytypes (GstPad * pad); static const GstQueryType *gst_amrnbparse_querytypes (GstPad * pad);
static gboolean gst_amrnbparse_query (GstPad * pad, GstQuery * query); static gboolean gst_amrnbparse_query (GstPad * pad, GstQuery * query);
@ -180,6 +183,7 @@ gst_amrnbparse_querytypes (GstPad * pad)
{ {
static const GstQueryType list[] = { static const GstQueryType list[] = {
GST_QUERY_POSITION, GST_QUERY_POSITION,
GST_QUERY_DURATION,
0 0
}; };
@ -296,9 +300,10 @@ gst_amrnbparse_handle_pull_seek (GstAmrnbParse * amrnbparse, GstPad * pad,
* decoding. */ * decoding. */
cur = cur / (20 * GST_MSECOND) * (20 * GST_MSECOND); cur = cur / (20 * GST_MSECOND) * (20 * GST_MSECOND);
if (cur != -1) if (cur != -1)
byte_cur = amrnbparse->block * (cur / 20 / GST_MSECOND) + 6; byte_cur = amrnbparse->block * (cur / 20 / GST_MSECOND) + AMRNB_HEADER_SIZE;
if (stop != -1) if (stop != -1)
byte_stop = amrnbparse->block * (stop / 20 / GST_MSECOND) + 6; byte_stop =
amrnbparse->block * (stop / 20 / GST_MSECOND) + AMRNB_HEADER_SIZE;
amrnbparse->offset = byte_cur; amrnbparse->offset = byte_cur;
amrnbparse->ts = cur; amrnbparse->ts = cur;
@ -354,9 +359,10 @@ gst_amrnbparse_handle_push_seek (GstAmrnbParse * amrnbparse, GstPad * pad,
* decoding. */ * decoding. */
cur = cur / (20 * GST_MSECOND) * (20 * GST_MSECOND); cur = cur / (20 * GST_MSECOND) * (20 * GST_MSECOND);
if (cur != -1) if (cur != -1)
byte_cur = amrnbparse->block * (cur / 20 / GST_MSECOND) + 6; byte_cur = amrnbparse->block * (cur / 20 / GST_MSECOND) + AMRNB_HEADER_SIZE;
if (stop != -1) if (stop != -1)
byte_stop = amrnbparse->block * (stop / 20 / GST_MSECOND) + 6; byte_stop =
amrnbparse->block * (stop / 20 / GST_MSECOND) + AMRNB_HEADER_SIZE;
amrnbparse->ts = cur; amrnbparse->ts = cur;
GST_DEBUG_OBJECT (amrnbparse, "Seeking to byte range %" G_GINT64_FORMAT GST_DEBUG_OBJECT (amrnbparse, "Seeking to byte range %" G_GINT64_FORMAT
@ -464,14 +470,14 @@ gst_amrnbparse_chain (GstPad * pad, GstBuffer * buffer)
GstEvent *segev; GstEvent *segev;
GstCaps *caps; GstCaps *caps;
if (gst_adapter_available (amrnbparse->adapter) < 6) if (gst_adapter_available (amrnbparse->adapter) < AMRNB_HEADER_SIZE)
goto done; goto done;
data = gst_adapter_peek (amrnbparse->adapter, 6); data = gst_adapter_peek (amrnbparse->adapter, AMRNB_HEADER_SIZE);
if (memcmp (data, "#!AMR\n", 6) != 0) if (memcmp (data, AMRNB_HEADER_STR, AMRNB_HEADER_SIZE) != 0)
goto done; goto done;
gst_adapter_flush (amrnbparse->adapter, 6); gst_adapter_flush (amrnbparse->adapter, AMRNB_HEADER_SIZE);
amrnbparse->need_header = FALSE; amrnbparse->need_header = FALSE;
@ -531,21 +537,22 @@ gst_amrnbparse_pull_header (GstAmrnbParse * amrnbparse)
guint8 *data; guint8 *data;
gint size; gint size;
ret = gst_pad_pull_range (amrnbparse->sinkpad, 0, 6, &buffer); ret = gst_pad_pull_range (amrnbparse->sinkpad, G_GUINT64_CONSTANT (0),
AMRNB_HEADER_SIZE, &buffer);
if (ret != GST_FLOW_OK) if (ret != GST_FLOW_OK)
return FALSE; return FALSE;
data = GST_BUFFER_DATA (buffer); data = GST_BUFFER_DATA (buffer);
size = GST_BUFFER_SIZE (buffer); size = GST_BUFFER_SIZE (buffer);
if (size < 6) if (size < AMRNB_HEADER_SIZE)
goto not_enough; goto not_enough;
if (memcmp (data, "#!AMR\n", 6)) if (memcmp (data, AMRNB_HEADER_STR, AMRNB_HEADER_SIZE))
goto no_header; goto no_header;
gst_buffer_unref (buffer); gst_buffer_unref (buffer);
amrnbparse->offset = 6; amrnbparse->offset = AMRNB_HEADER_SIZE;
return TRUE; return TRUE;
not_enough: not_enough:
@ -720,8 +727,8 @@ gst_amrnbparse_sink_activate_push (GstPad * sinkpad, gboolean active)
} else { } else {
amrnbparse->seek_handler = NULL; amrnbparse->seek_handler = NULL;
} }
gst_object_unref (amrnbparse);
gst_object_unref (amrnbparse);
return TRUE; return TRUE;
} }
@ -740,6 +747,7 @@ gst_amrnbparse_sink_activate_pull (GstPad * sinkpad, gboolean active)
result = gst_pad_stop_task (sinkpad); result = gst_pad_stop_task (sinkpad);
} }
gst_object_unref (amrnbparse);
return result; return result;
} }