summaryrefslogtreecommitdiffstats
path: root/gst/flv/gstflvdemux.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/flv/gstflvdemux.c')
-rw-r--r--gst/flv/gstflvdemux.c78
1 files changed, 38 insertions, 40 deletions
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index 3e4b6a22..61e68c26 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -152,14 +152,6 @@ gst_flv_demux_cleanup (GstFLVDemux * demux)
}
}
-static void
-gst_flv_demux_adapter_flush (GstFLVDemux * demux, guint64 bytes)
-{
- demux->offset += bytes;
-
- gst_adapter_flush (demux->adapter, bytes);
-}
-
static GstFlowReturn
gst_flv_demux_chain (GstPad * pad, GstBuffer * buffer)
{
@@ -205,13 +197,14 @@ parse:
case FLV_STATE_HEADER:
{
if (gst_adapter_available (demux->adapter) >= FLV_HEADER_SIZE) {
- const guint8 *data;
+ GstBuffer *buffer;
- data = gst_adapter_peek (demux->adapter, FLV_HEADER_SIZE);
+ buffer = gst_adapter_take_buffer (demux->adapter, FLV_HEADER_SIZE);
- ret = gst_flv_parse_header (demux, data, FLV_HEADER_SIZE);
+ ret = gst_flv_parse_header (demux, buffer);
- gst_flv_demux_adapter_flush (demux, FLV_HEADER_SIZE);
+ gst_buffer_unref (buffer);
+ demux->offset += FLV_HEADER_SIZE;
demux->state = FLV_STATE_TAG_TYPE;
goto parse;
@@ -222,16 +215,17 @@ parse:
case FLV_STATE_TAG_TYPE:
{
if (gst_adapter_available (demux->adapter) >= FLV_TAG_TYPE_SIZE) {
- const guint8 *data;
+ GstBuffer *buffer;
/* Remember the tag offset in bytes */
demux->cur_tag_offset = demux->offset;
- data = gst_adapter_peek (demux->adapter, FLV_TAG_TYPE_SIZE);
+ buffer = gst_adapter_take_buffer (demux->adapter, FLV_TAG_TYPE_SIZE);
- ret = gst_flv_parse_tag_type (demux, data, FLV_TAG_TYPE_SIZE);
+ ret = gst_flv_parse_tag_type (demux, buffer);
- gst_flv_demux_adapter_flush (demux, FLV_TAG_TYPE_SIZE);
+ gst_buffer_unref (buffer);
+ demux->offset += FLV_TAG_TYPE_SIZE;
goto parse;
} else {
@@ -241,13 +235,14 @@ parse:
case FLV_STATE_TAG_VIDEO:
{
if (gst_adapter_available (demux->adapter) >= demux->tag_size) {
- const guint8 *data;
+ GstBuffer *buffer;
- data = gst_adapter_peek (demux->adapter, demux->tag_size);
+ buffer = gst_adapter_take_buffer (demux->adapter, demux->tag_size);
- ret = gst_flv_parse_tag_video (demux, data, demux->tag_size);
+ ret = gst_flv_parse_tag_video (demux, buffer);
- gst_flv_demux_adapter_flush (demux, demux->tag_size);
+ gst_buffer_unref (buffer);
+ demux->offset += demux->tag_size;
demux->state = FLV_STATE_TAG_TYPE;
goto parse;
@@ -258,13 +253,14 @@ parse:
case FLV_STATE_TAG_AUDIO:
{
if (gst_adapter_available (demux->adapter) >= demux->tag_size) {
- const guint8 *data;
+ GstBuffer *buffer;
- data = gst_adapter_peek (demux->adapter, demux->tag_size);
+ buffer = gst_adapter_take_buffer (demux->adapter, demux->tag_size);
- ret = gst_flv_parse_tag_audio (demux, data, demux->tag_size);
+ ret = gst_flv_parse_tag_audio (demux, buffer);
- gst_flv_demux_adapter_flush (demux, demux->tag_size);
+ gst_buffer_unref (buffer);
+ demux->offset += demux->tag_size;
demux->state = FLV_STATE_TAG_TYPE;
goto parse;
@@ -275,13 +271,14 @@ parse:
case FLV_STATE_TAG_SCRIPT:
{
if (gst_adapter_available (demux->adapter) >= demux->tag_size) {
- const guint8 *data;
+ GstBuffer *buffer;
- data = gst_adapter_peek (demux->adapter, demux->tag_size);
+ buffer = gst_adapter_take_buffer (demux->adapter, demux->tag_size);
- ret = gst_flv_parse_tag_script (demux, data, demux->tag_size);
+ ret = gst_flv_parse_tag_script (demux, buffer);
- gst_flv_demux_adapter_flush (demux, demux->tag_size);
+ gst_buffer_unref (buffer);
+ demux->offset += demux->tag_size;
demux->state = FLV_STATE_TAG_TYPE;
goto parse;
@@ -349,8 +346,7 @@ gst_flv_demux_pull_tag (GstPad * pad, GstFLVDemux * demux)
goto beach;
/* Identify tag type */
- ret = gst_flv_parse_tag_type (demux, GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer));
+ ret = gst_flv_parse_tag_type (demux, buffer);
gst_buffer_unref (buffer);
@@ -367,16 +363,13 @@ gst_flv_demux_pull_tag (GstPad * pad, GstFLVDemux * demux)
switch (demux->state) {
case FLV_STATE_TAG_VIDEO:
- ret = gst_flv_parse_tag_video (demux, GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer));
+ ret = gst_flv_parse_tag_video (demux, buffer);
break;
case FLV_STATE_TAG_AUDIO:
- ret = gst_flv_parse_tag_audio (demux, GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer));
+ ret = gst_flv_parse_tag_audio (demux, buffer);
break;
case FLV_STATE_TAG_SCRIPT:
- ret = gst_flv_parse_tag_script (demux, GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer));
+ ret = gst_flv_parse_tag_script (demux, buffer);
break;
default:
GST_WARNING_OBJECT (demux, "unexpected state %d", demux->state);
@@ -418,8 +411,9 @@ gst_flv_demux_pull_header (GstPad * pad, GstFLVDemux * demux)
FLV_HEADER_SIZE, &buffer)) != GST_FLOW_OK))
goto beach;
- ret = gst_flv_parse_header (demux, GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer));
+ ret = gst_flv_parse_header (demux, buffer);
+
+ gst_buffer_unref (buffer);
/* Jump over the header now */
demux->offset += FLV_HEADER_SIZE;
@@ -470,9 +464,13 @@ gst_flv_demux_create_index (GstFLVDemux * demux)
while ((ret =
gst_flv_demux_pull_range (demux, demux->sinkpad, demux->offset, 12,
&buffer)) == GST_FLOW_OK) {
- if (gst_flv_parse_tag_timestamp (demux, GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer), &tag_size) == GST_CLOCK_TIME_NONE)
+ if (gst_flv_parse_tag_timestamp (demux, buffer,
+ &tag_size) == GST_CLOCK_TIME_NONE) {
+ gst_buffer_unref (buffer);
break;
+ }
+
+ gst_buffer_unref (buffer);
demux->offset += tag_size;
}