summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c774
1 files changed, 370 insertions, 404 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 1b50b98e..03403488 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -32,72 +32,62 @@ GST_DEBUG_CATEGORY_STATIC (avidemux_debug);
#define GST_CAT_DEFAULT avidemux_debug
/* AviDemux signals and args */
-enum {
+enum
+{
/* FILL ME */
LAST_SIGNAL
};
-enum {
+enum
+{
ARG_0,
ARG_STREAMINFO,
/* FILL ME */
};
-static GstStaticPadTemplate sink_templ =
-GST_STATIC_PAD_TEMPLATE (
- "sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-msvideo")
-);
+static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-msvideo")
+ );
-static void gst_avi_demux_base_init (GstAviDemuxClass *klass);
-static void gst_avi_demux_class_init (GstAviDemuxClass *klass);
-static void gst_avi_demux_init (GstAviDemux *avi);
+static void gst_avi_demux_base_init (GstAviDemuxClass * klass);
+static void gst_avi_demux_class_init (GstAviDemuxClass * klass);
+static void gst_avi_demux_init (GstAviDemux * avi);
-static void gst_avi_demux_reset (GstAviDemux *avi);
-static void gst_avi_demux_loop (GstElement *element);
+static void gst_avi_demux_reset (GstAviDemux * avi);
+static void gst_avi_demux_loop (GstElement * element);
-static gboolean gst_avi_demux_send_event (GstElement *element,
- GstEvent *event);
+static gboolean gst_avi_demux_send_event (GstElement * element,
+ GstEvent * event);
-static const GstEventMask *
- gst_avi_demux_get_event_mask (GstPad *pad);
-static gboolean gst_avi_demux_handle_src_event (GstPad *pad,
- GstEvent *event);
-static const GstFormat *
- gst_avi_demux_get_src_formats (GstPad *pad);
-static const GstQueryType *
- gst_avi_demux_get_src_query_types (GstPad *pad);
-static gboolean gst_avi_demux_handle_src_query (GstPad *pad,
- GstQueryType type,
- GstFormat *format,
- gint64 *value);
-static gboolean gst_avi_demux_src_convert (GstPad *pad,
- GstFormat src_format,
- gint64 src_value,
- GstFormat *dest_format,
- gint64 *dest_value);
+static const GstEventMask *gst_avi_demux_get_event_mask (GstPad * pad);
+static gboolean gst_avi_demux_handle_src_event (GstPad * pad, GstEvent * event);
+static const GstFormat *gst_avi_demux_get_src_formats (GstPad * pad);
+static const GstQueryType *gst_avi_demux_get_src_query_types (GstPad * pad);
+static gboolean gst_avi_demux_handle_src_query (GstPad * pad,
+ GstQueryType type, GstFormat * format, gint64 * value);
+static gboolean gst_avi_demux_src_convert (GstPad * pad,
+ GstFormat src_format,
+ gint64 src_value, GstFormat * dest_format, gint64 * dest_value);
-static GstElementStateReturn
- gst_avi_demux_change_state (GstElement *element);
+static GstElementStateReturn gst_avi_demux_change_state (GstElement * element);
-static void gst_avi_demux_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
+static void gst_avi_demux_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
static GstRiffReadClass *parent_class = NULL;
+
/*static guint gst_avi_demux_signals[LAST_SIGNAL] = { 0 }; */
GType
-gst_avi_demux_get_type(void)
+gst_avi_demux_get_type (void)
{
static GType avi_demux_type = 0;
if (!avi_demux_type) {
static const GTypeInfo avi_demux_info = {
- sizeof (GstAviDemuxClass),
+ sizeof (GstAviDemuxClass),
(GBaseInitFunc) gst_avi_demux_base_init,
NULL,
(GClassInitFunc) gst_avi_demux_class_init,
@@ -110,40 +100,34 @@ gst_avi_demux_get_type(void)
avi_demux_type =
g_type_register_static (GST_TYPE_RIFF_READ,
- "GstAviDemux",
- &avi_demux_info, 0);
+ "GstAviDemux", &avi_demux_info, 0);
}
return avi_demux_type;
}
static void
-gst_avi_demux_base_init (GstAviDemuxClass *klass)
+gst_avi_demux_base_init (GstAviDemuxClass * klass)
{
- static GstElementDetails gst_avi_demux_details = GST_ELEMENT_DETAILS (
- "Avi demuxer",
- "Codec/Demuxer",
- "Demultiplex an avi file into audio and video",
- "Erik Walthinsen <omega@cse.ogi.edu>\n"
- "Wim Taymans <wim.taymans@chello.be>\n"
- "Ronald Bultje <rbultje@ronald.bitfreak.net>"
- );
+ static GstElementDetails gst_avi_demux_details =
+ GST_ELEMENT_DETAILS ("Avi demuxer",
+ "Codec/Demuxer",
+ "Demultiplex an avi file into audio and video",
+ "Erik Walthinsen <omega@cse.ogi.edu>\n"
+ "Wim Taymans <wim.taymans@chello.be>\n"
+ "Ronald Bultje <rbultje@ronald.bitfreak.net>");
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
GstPadTemplate *videosrctempl, *audiosrctempl;
GstCaps *audcaps, *vidcaps;
audcaps = gst_riff_create_audio_template_caps ();
audiosrctempl = gst_pad_template_new ("audio_%02d",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- audcaps);
+ GST_PAD_SRC, GST_PAD_SOMETIMES, audcaps);
vidcaps = gst_riff_create_video_template_caps ();
gst_caps_append (vidcaps, gst_riff_create_iavs_template_caps ());
videosrctempl = gst_pad_template_new ("video_%02d",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- vidcaps);
+ GST_PAD_SRC, GST_PAD_SOMETIMES, vidcaps);
gst_element_class_add_pad_template (element_class, audiosrctempl);
gst_element_class_add_pad_template (element_class, videosrctempl);
@@ -153,36 +137,37 @@ gst_avi_demux_base_init (GstAviDemuxClass *klass)
}
static void
-gst_avi_demux_class_init (GstAviDemuxClass *klass)
+gst_avi_demux_class_init (GstAviDemuxClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
- gobject_class = (GObjectClass*)klass;
- gstelement_class = (GstElementClass*)klass;
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
g_object_class_install_property (gobject_class, ARG_STREAMINFO,
- g_param_spec_boxed ("streaminfo", "Streaminfo", "Streaminfo",
- GST_TYPE_CAPS, G_PARAM_READABLE));
+ g_param_spec_boxed ("streaminfo", "Streaminfo", "Streaminfo",
+ GST_TYPE_CAPS, G_PARAM_READABLE));
GST_DEBUG_CATEGORY_INIT (avidemux_debug, "avidemux",
- 0, "Demuxer for AVI streams");
+ 0, "Demuxer for AVI streams");
parent_class = g_type_class_ref (GST_TYPE_RIFF_READ);
-
+
gobject_class->get_property = gst_avi_demux_get_property;
-
+
gstelement_class->change_state = gst_avi_demux_change_state;
gstelement_class->send_event = gst_avi_demux_send_event;
}
-static void
-gst_avi_demux_init (GstAviDemux *avi)
+static void
+gst_avi_demux_init (GstAviDemux * avi)
{
GST_FLAG_SET (avi, GST_ELEMENT_EVENT_AWARE);
- avi->sinkpad = gst_pad_new_from_template (
- gst_static_pad_template_get (&sink_templ), "sink");
+ avi->sinkpad =
+ gst_pad_new_from_template (gst_static_pad_template_get (&sink_templ),
+ "sink");
gst_element_add_pad (GST_ELEMENT (avi), avi->sinkpad);
GST_RIFF_READ (avi)->sinkpad = avi->sinkpad;
@@ -195,7 +180,7 @@ gst_avi_demux_init (GstAviDemux *avi)
}
static void
-gst_avi_demux_reset (GstAviDemux *avi)
+gst_avi_demux_reset (GstAviDemux * avi)
{
gint i;
@@ -221,27 +206,25 @@ gst_avi_demux_reset (GstAviDemux *avi)
avi->num_frames = 0;
avi->us_per_frame = 0;
- avi->seek_offset = (guint64) -1;
+ avi->seek_offset = (guint64) - 1;
gst_caps_replace (&avi->streaminfo, NULL);
}
static void
-gst_avi_demux_streaminfo (GstAviDemux *avi)
+gst_avi_demux_streaminfo (GstAviDemux * avi)
{
/* compression formats are added later - a bit hacky */
gst_caps_replace (&avi->streaminfo,
gst_caps_new_simple ("application/x-gst-streaminfo", NULL));
- /*g_object_notify(G_OBJECT(avi), "streaminfo");*/
+ /*g_object_notify(G_OBJECT(avi), "streaminfo"); */
}
static gst_avi_index_entry *
-gst_avi_demux_index_next (GstAviDemux *avi,
- gint stream_nr,
- gint start,
- guint32 flags)
+gst_avi_demux_index_next (GstAviDemux * avi,
+ gint stream_nr, gint start, guint32 flags)
{
gint i;
gst_avi_index_entry *entry = NULL;
@@ -258,10 +241,8 @@ gst_avi_demux_index_next (GstAviDemux *avi,
}
static gst_avi_index_entry *
-gst_avi_demux_index_entry_for_time (GstAviDemux *avi,
- gint stream_nr,
- guint64 time,
- guint32 flags)
+gst_avi_demux_index_entry_for_time (GstAviDemux * avi,
+ gint stream_nr, guint64 time, guint32 flags)
{
gst_avi_index_entry *entry = NULL, *last_entry = NULL;
gint i;
@@ -283,10 +264,8 @@ gst_avi_demux_index_entry_for_time (GstAviDemux *avi,
}
static gst_avi_index_entry *
-gst_avi_demux_index_entry_for_byte (GstAviDemux *avi,
- gint stream_nr,
- guint64 byte,
- guint32 flags)
+gst_avi_demux_index_entry_for_byte (GstAviDemux * avi,
+ gint stream_nr, guint64 byte, guint32 flags)
{
gst_avi_index_entry *entry = NULL, *last_entry = NULL;
gint i;
@@ -308,10 +287,8 @@ gst_avi_demux_index_entry_for_byte (GstAviDemux *avi,
}
static gst_avi_index_entry *
-gst_avi_demux_index_entry_for_frame (GstAviDemux *avi,
- gint stream_nr,
- guint32 frame,
- guint32 flags)
+gst_avi_demux_index_entry_for_frame (GstAviDemux * avi,
+ gint stream_nr, guint32 frame, guint32 flags)
{
gst_avi_index_entry *entry = NULL, *last_entry = NULL;
gint i;
@@ -333,7 +310,7 @@ gst_avi_demux_index_entry_for_frame (GstAviDemux *avi,
}
static const GstFormat *
-gst_avi_demux_get_src_formats (GstPad *pad)
+gst_avi_demux_get_src_formats (GstPad * pad)
{
avi_stream_context *stream = gst_pad_get_element_private (pad);
@@ -350,36 +327,34 @@ gst_avi_demux_get_src_formats (GstPad *pad)
};
return (stream->strh->type == GST_RIFF_FCC_auds ?
- src_a_formats : src_v_formats);
+ src_a_formats : src_v_formats);
}
static gboolean
-gst_avi_demux_src_convert (GstPad *pad,
- GstFormat src_format,
- gint64 src_value,
- GstFormat *dest_format,
- gint64 *dest_value)
+gst_avi_demux_src_convert (GstPad * pad,
+ GstFormat src_format,
+ gint64 src_value, GstFormat * dest_format, gint64 * dest_value)
{
gboolean res = TRUE;
- /*GstAviDemux *avi = GST_AVI_DEMUX (gst_pad_get_parent (pad));*/
+
+ /*GstAviDemux *avi = GST_AVI_DEMUX (gst_pad_get_parent (pad)); */
avi_stream_context *stream = gst_pad_get_element_private (pad);
- if (stream->strh->type != GST_RIFF_FCC_auds &&
- (src_format == GST_FORMAT_BYTES ||
- *dest_format == GST_FORMAT_BYTES))
+ if (stream->strh->type != GST_RIFF_FCC_auds &&
+ (src_format == GST_FORMAT_BYTES || *dest_format == GST_FORMAT_BYTES))
return FALSE;
switch (src_format) {
case GST_FORMAT_TIME:
switch (*dest_format) {
case GST_FORMAT_BYTES:
- *dest_value = src_value * stream->strh->rate /
- (stream->strh->scale * GST_SECOND);
- break;
- case GST_FORMAT_DEFAULT:
- *dest_value = src_value * stream->strh->rate /
- (stream->strh->scale * GST_SECOND);
- break;
+ *dest_value = src_value * stream->strh->rate /
+ (stream->strh->scale * GST_SECOND);
+ break;
+ case GST_FORMAT_DEFAULT:
+ *dest_value = src_value * stream->strh->rate /
+ (stream->strh->scale * GST_SECOND);
+ break;
default:
res = FALSE;
break;
@@ -388,7 +363,7 @@ gst_avi_demux_src_convert (GstPad *pad,
case GST_FORMAT_BYTES:
switch (*dest_format) {
case GST_FORMAT_TIME:
- *dest_value = ((gfloat) src_value) * GST_SECOND / stream->strh->rate;
+ *dest_value = ((gfloat) src_value) * GST_SECOND / stream->strh->rate;
break;
default:
res = FALSE;
@@ -398,8 +373,8 @@ gst_avi_demux_src_convert (GstPad *pad,
case GST_FORMAT_DEFAULT:
switch (*dest_format) {
case GST_FORMAT_TIME:
- *dest_value = ((((gfloat) src_value) * stream->strh->scale) /
- stream->strh->rate) * GST_SECOND;
+ *dest_value = ((((gfloat) src_value) * stream->strh->scale) /
+ stream->strh->rate) * GST_SECOND;
break;
default:
res = FALSE;
@@ -414,7 +389,7 @@ gst_avi_demux_src_convert (GstPad *pad,
}
static const GstQueryType *
-gst_avi_demux_get_src_query_types (GstPad *pad)
+gst_avi_demux_get_src_query_types (GstPad * pad)
{
static const GstQueryType src_types[] = {
GST_QUERY_TOTAL,
@@ -426,67 +401,64 @@ gst_avi_demux_get_src_query_types (GstPad *pad)
}
static gboolean
-gst_avi_demux_handle_src_query (GstPad *pad,
- GstQueryType type,
- GstFormat *format,
- gint64 *value)
+gst_avi_demux_handle_src_query (GstPad * pad,
+ GstQueryType type, GstFormat * format, gint64 * value)
{
gboolean res = TRUE;
- /*GstAviDemux *avi = GST_AVI_DEMUX (gst_pad_get_parent (pad));*/
+
+ /*GstAviDemux *avi = GST_AVI_DEMUX (gst_pad_get_parent (pad)); */
avi_stream_context *stream = gst_pad_get_element_private (pad);
switch (type) {
case GST_QUERY_TOTAL:
switch (*format) {
- case GST_FORMAT_TIME:
- *value = (((gfloat) stream->strh->scale) * stream->strh->length /
- stream->strh->rate) * GST_SECOND;
+ case GST_FORMAT_TIME:
+ *value = (((gfloat) stream->strh->scale) * stream->strh->length /
+ stream->strh->rate) * GST_SECOND;
break;
- case GST_FORMAT_BYTES:
- if (stream->strh->type == GST_RIFF_FCC_auds) {
- *value = stream->total_bytes;
- }
- else
+ case GST_FORMAT_BYTES:
+ if (stream->strh->type == GST_RIFF_FCC_auds) {
+ *value = stream->total_bytes;
+ } else
res = FALSE;
break;
- case GST_FORMAT_DEFAULT:
- if (stream->strh->type == GST_RIFF_FCC_auds)
- *value = stream->strh->length * stream->strh->samplesize;
+ case GST_FORMAT_DEFAULT:
+ if (stream->strh->type == GST_RIFF_FCC_auds)
+ *value = stream->strh->length * stream->strh->samplesize;
else if (stream->strh->type == GST_RIFF_FCC_vids)
- *value = stream->strh->length;
+ *value = stream->strh->length;
else
res = FALSE;
break;
default:
- res = FALSE;
+ res = FALSE;
break;
}
break;
case GST_QUERY_POSITION:
switch (*format) {
- case GST_FORMAT_TIME:
- if (stream->strh->samplesize &&
+ case GST_FORMAT_TIME:
+ if (stream->strh->samplesize &&
stream->strh->type == GST_RIFF_FCC_auds) {
- *value = ((gfloat) stream->current_byte) * GST_SECOND /
- stream->strh->rate;
- }
- else {
- *value = (((gfloat) stream->current_frame) * stream->strh->scale /
- stream->strh->rate) * GST_SECOND;
+ *value = ((gfloat) stream->current_byte) * GST_SECOND /
+ stream->strh->rate;
+ } else {
+ *value = (((gfloat) stream->current_frame) * stream->strh->scale /
+ stream->strh->rate) * GST_SECOND;
}
break;
- case GST_FORMAT_BYTES:
- *value = stream->current_byte;
+ case GST_FORMAT_BYTES:
+ *value = stream->current_byte;
break;
- case GST_FORMAT_DEFAULT:
- if (stream->strh->samplesize &&
- stream->strh->type == GST_RIFF_FCC_auds)
- *value = stream->current_byte * stream->strh->samplesize;
- else
- *value = stream->current_frame;
+ case GST_FORMAT_DEFAULT:
+ if (stream->strh->samplesize &&
+ stream->strh->type == GST_RIFF_FCC_auds)
+ *value = stream->current_byte * stream->strh->samplesize;
+ else
+ *value = stream->current_frame;
break;
default:
- res = FALSE;
+ res = FALSE;
break;
}
break;
@@ -499,7 +471,7 @@ gst_avi_demux_handle_src_query (GstPad *pad,
}
static GstCaps *
-gst_avi_demux_src_getcaps (GstPad *pad)
+gst_avi_demux_src_getcaps (GstPad * pad)
{
avi_stream_context *stream = gst_pad_get_element_private (pad);
@@ -507,8 +479,7 @@ gst_avi_demux_src_getcaps (GstPad *pad)
}
static gint32
-gst_avi_demux_sync_streams (GstAviDemux *avi,
- guint64 time)
+gst_avi_demux_sync_streams (GstAviDemux * avi, guint64 time)
{
gint i;
guint32 min_index = G_MAXUINT;
@@ -521,25 +492,25 @@ gst_avi_demux_sync_streams (GstAviDemux *avi,
GST_DEBUG ("finding %d for time %" G_GINT64_FORMAT, i, time);
entry = gst_avi_demux_index_entry_for_time (avi, stream->num, time,
- GST_RIFF_IF_KEYFRAME);
+ GST_RIFF_IF_KEYFRAME);
if (entry) {
min_index = MIN (entry->index_nr, min_index);
}
}
GST_DEBUG ("first index at %d", min_index);
-
+
/* now we know the entry we need to sync on. calculate number of frames to
* skip fro there on and the stream stats */
for (i = 0; i < avi->num_streams; i++) {
gst_avi_index_entry *next_entry;
+
stream = &avi->stream[i];
/* next entry */
- next_entry = gst_avi_demux_index_next (avi, stream->num,
- min_index, 0);
+ next_entry = gst_avi_demux_index_next (avi, stream->num, min_index, 0);
/* next entry with keyframe */
entry = gst_avi_demux_index_next (avi, stream->num, min_index,
- GST_RIFF_IF_KEYFRAME);
+ GST_RIFF_IF_KEYFRAME);
stream->current_byte = next_entry->bytes_before;
stream->current_frame = next_entry->frames_before;
@@ -554,14 +525,13 @@ gst_avi_demux_sync_streams (GstAviDemux *avi,
}
static gboolean
-gst_avi_demux_send_event (GstElement *element,
- GstEvent *event)
+gst_avi_demux_send_event (GstElement * element, GstEvent * event)
{
const GList *pads;
pads = gst_element_get_pad_list (element);
- while (pads) {
+ while (pads) {
GstPad *pad = GST_PAD (pads->data);
if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC) {
@@ -574,93 +544,88 @@ gst_avi_demux_send_event (GstElement *element,
return TRUE;
}
}
-
+
pads = g_list_next (pads);
}
-
+
gst_event_unref (event);
return FALSE;
}
static const GstEventMask *
-gst_avi_demux_get_event_mask (GstPad *pad)
+gst_avi_demux_get_event_mask (GstPad * pad)
{
static const GstEventMask masks[] = {
- { GST_EVENT_SEEK, GST_SEEK_METHOD_SET | GST_SEEK_FLAG_KEY_UNIT },
- { 0, }
+ {GST_EVENT_SEEK, GST_SEEK_METHOD_SET | GST_SEEK_FLAG_KEY_UNIT},
+ {0,}
};
return masks;
}
-
+
static gboolean
-gst_avi_demux_handle_src_event (GstPad *pad,
- GstEvent *event)
+gst_avi_demux_handle_src_event (GstPad * pad, GstEvent * event)
{
gboolean res = TRUE;
GstAviDemux *avi = GST_AVI_DEMUX (gst_pad_get_parent (pad));
avi_stream_context *stream;
-
+
stream = gst_pad_get_element_private (pad);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
GST_DEBUG ("seek format %d, %08x", GST_EVENT_SEEK_FORMAT (event),
- stream->strh->type);
+ stream->strh->type);
switch (GST_EVENT_SEEK_FORMAT (event)) {
case GST_FORMAT_BYTES:
case GST_FORMAT_DEFAULT:
- case GST_FORMAT_TIME: {
+ case GST_FORMAT_TIME:{
gst_avi_index_entry *seek_entry, *entry = NULL;
gint64 desired_offset = GST_EVENT_SEEK_OFFSET (event);
guint32 flags;
- guint64 min_index;
+ guint64 min_index;
/* no seek on audio yet */
if (stream->strh->type == GST_RIFF_FCC_auds) {
res = FALSE;
goto done;
}
- GST_DEBUG ("seeking to %" G_GINT64_FORMAT, desired_offset);
+ GST_DEBUG ("seeking to %" G_GINT64_FORMAT, desired_offset);
- flags = GST_RIFF_IF_KEYFRAME;
- switch (GST_EVENT_SEEK_FORMAT (event)) {
+ flags = GST_RIFF_IF_KEYFRAME;
+ switch (GST_EVENT_SEEK_FORMAT (event)) {
case GST_FORMAT_BYTES:
- entry = gst_avi_demux_index_entry_for_byte (avi, stream->num,
- desired_offset,
- flags);
- break;
+ entry = gst_avi_demux_index_entry_for_byte (avi, stream->num,
+ desired_offset, flags);
+ break;
case GST_FORMAT_DEFAULT:
- entry = gst_avi_demux_index_entry_for_frame (avi, stream->num,
- desired_offset,
- flags);
- break;
+ entry = gst_avi_demux_index_entry_for_frame (avi, stream->num,
+ desired_offset, flags);
+ break;
case GST_FORMAT_TIME:
- entry = gst_avi_demux_index_entry_for_time (avi, stream->num,
- desired_offset,
- flags);
- break;
- }
+ entry = gst_avi_demux_index_entry_for_time (avi, stream->num,
+ desired_offset, flags);
+ break;
+ }
if (entry) {
min_index = gst_avi_demux_sync_streams (avi, entry->ts);
- seek_entry = &avi->index_entries[min_index];
+ seek_entry = &avi->index_entries[min_index];
avi->seek_offset = seek_entry->offset + avi->index_offset;
- avi->last_seek = entry->ts;
+ avi->last_seek = entry->ts;
} else {
- GST_DEBUG ("no index entry found for format=%d value=%"
- G_GINT64_FORMAT, GST_EVENT_SEEK_FORMAT (event),
- desired_offset);
+ GST_DEBUG ("no index entry found for format=%d value=%"
+ G_GINT64_FORMAT, GST_EVENT_SEEK_FORMAT (event), desired_offset);
res = FALSE;
}
break;
}
default:
res = FALSE;
- break;
+ break;
}
break;
default:
@@ -679,7 +644,7 @@ done:
*/
gboolean
-gst_avi_demux_stream_init (GstAviDemux *avi)
+gst_avi_demux_stream_init (GstAviDemux * avi)
{
GstRiffRead *riff = GST_RIFF_READ (avi);
guint32 doctype;
@@ -699,9 +664,8 @@ gst_avi_demux_stream_init (GstAviDemux *avi)
*/
gboolean
-gst_avi_demux_stream_avih (GstAviDemux *avi,
- guint32 *flags,
- guint32 *streams)
+gst_avi_demux_stream_avih (GstAviDemux * avi,
+ guint32 * flags, guint32 * streams)
{
GstRiffRead *riff = GST_RIFF_READ (avi);
guint32 tag;
@@ -718,43 +682,43 @@ gst_avi_demux_stream_avih (GstAviDemux *avi,
}
if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_avih)) {
g_warning ("Too small avih (%d available, %d needed)",
- GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_avih));
+ GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_avih));
gst_buffer_unref (buf);
return FALSE;
}
_avih = (gst_riff_avih *) GST_BUFFER_DATA (buf);
- avih.us_frame = GUINT32_FROM_LE (_avih->us_frame);
- avih.max_bps = GUINT32_FROM_LE (_avih->max_bps);
- avih.pad_gran = GUINT32_FROM_LE (_avih->pad_gran);
- avih.flags = GUINT32_FROM_LE (_avih->flags);
- avih.tot_frames = GUINT32_FROM_LE (_avih->tot_frames);
+ avih.us_frame = GUINT32_FROM_LE (_avih->us_frame);
+ avih.max_bps = GUINT32_FROM_LE (_avih->max_bps);
+ avih.pad_gran = GUINT32_FROM_LE (_avih->pad_gran);
+ avih.flags = GUINT32_FROM_LE (_avih->flags);
+ avih.tot_frames = GUINT32_FROM_LE (_avih->tot_frames);
avih.init_frames = GUINT32_FROM_LE (_avih->init_frames);
- avih.streams = GUINT32_FROM_LE (_avih->streams);
- avih.bufsize = GUINT32_FROM_LE (_avih->bufsize);
- avih.width = GUINT32_FROM_LE (_avih->width);
- avih.height = GUINT32_FROM_LE (_avih->height);
- avih.scale = GUINT32_FROM_LE (_avih->scale);
- avih.rate = GUINT32_FROM_LE (_avih->rate);
- avih.start = GUINT32_FROM_LE (_avih->start);
- avih.length = GUINT32_FROM_LE (_avih->length);
+ avih.streams = GUINT32_FROM_LE (_avih->streams);
+ avih.bufsize = GUINT32_FROM_LE (_avih->bufsize);
+ avih.width = GUINT32_FROM_LE (_avih->width);
+ avih.height = GUINT32_FROM_LE (_avih->height);
+ avih.scale = GUINT32_FROM_LE (_avih->scale);
+ avih.rate = GUINT32_FROM_LE (_avih->rate);
+ avih.start = GUINT32_FROM_LE (_avih->start);
+ avih.length = GUINT32_FROM_LE (_avih->length);
/* debug stuff */
GST_INFO ("avih tag found:");
- GST_INFO (" us_frame %u", avih.us_frame);
- GST_INFO (" max_bps %u", avih.max_bps);
- GST_INFO (" pad_gran %u", avih.pad_gran);
+ GST_INFO (" us_frame %u", avih.us_frame);
+ GST_INFO (" max_bps %u", avih.max_bps);
+ GST_INFO (" pad_gran %u", avih.pad_gran);
GST_INFO (" flags 0x%08x", avih.flags);
- GST_INFO (" tot_frames %u", avih.tot_frames);
- GST_INFO (" init_frames %u", avih.init_frames);
- GST_INFO (" streams %u", avih.streams);
- GST_INFO (" bufsize %u", avih.bufsize);
- GST_INFO (" width %u", avih.width);
- GST_INFO (" height %u", avih.height);
- GST_INFO (" scale %u", avih.scale);
- GST_INFO (" rate %u", avih.rate);
- GST_INFO (" start %u", avih.start);
- GST_INFO (" length %u", avih.length);
+ GST_INFO (" tot_frames %u", avih.tot_frames);
+ GST_INFO (" init_frames %u", avih.init_frames);
+ GST_INFO (" streams %u", avih.streams);
+ GST_INFO (" bufsize %u", avih.bufsize);
+ GST_INFO (" width %u", avih.width);
+ GST_INFO (" height %u", avih.height);
+ GST_INFO (" scale %u", avih.scale);
+ GST_INFO (" rate %u", avih.rate);
+ GST_INFO (" start %u", avih.start);
+ GST_INFO (" length %u", avih.length);
avi->num_frames = avih.tot_frames;
avi->us_per_frame = avih.us_frame;
@@ -771,7 +735,7 @@ gst_avi_demux_stream_avih (GstAviDemux *avi,
*/
static gboolean
-gst_avi_demux_add_stream (GstAviDemux *avi)
+gst_avi_demux_add_stream (GstAviDemux * avi)
{
GstElementClass *klass = GST_ELEMENT_GET_CLASS (avi);
GstRiffRead *riff = GST_RIFF_READ (avi);
@@ -782,7 +746,8 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
GstPadTemplate *templ = NULL;
GstPad *pad;
avi_stream_context *stream;
- union {
+ union
+ {
gst_riff_strf_vids *vids;
gst_riff_strf_auds *auds;
gst_riff_strf_iavs *iavs;
@@ -803,25 +768,25 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
return FALSE;
if (tag != GST_RIFF_TAG_strf) {
GST_ELEMENT_ERROR (avi, STREAM, DEMUX, (NULL),
- ("Invalid AVI header (no strf as second tag)"));
+ ("Invalid AVI header (no strf as second tag)"));
goto skip_stream;
}
switch (strh->type) {
case GST_RIFF_FCC_vids:
if (!gst_riff_read_strf_vids (riff, &strf.vids))
- return FALSE;
+ return FALSE;
break;
case GST_RIFF_FCC_auds:
if (!gst_riff_read_strf_auds (riff, &strf.auds))
- return FALSE;
+ return FALSE;
break;
case GST_RIFF_FCC_iavs:
if (!gst_riff_read_strf_iavs (riff, &strf.iavs))
- return FALSE;
+ return FALSE;
break;
default:
g_warning ("Unknown stream type " GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (strh->type));
+ GST_FOURCC_ARGS (strh->type));
goto skip_stream;
}
@@ -836,22 +801,22 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
switch (tag) {
case GST_RIFF_TAG_strn:
- if (name)
- g_free (name);
- if (!gst_riff_read_ascii (riff, &tag, &name))
- return FALSE;
- break;
+ if (name)
+ g_free (name);
+ if (!gst_riff_read_ascii (riff, &tag, &name))
+ return FALSE;
+ break;
default:
- GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " in AVI header",
- GST_FOURCC_ARGS (tag));
- /* fall-through */
+ GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " in AVI header",
+ GST_FOURCC_ARGS (tag));
+ /* fall-through */
- case GST_RIFF_TAG_strd: /* what is this? */
+ case GST_RIFF_TAG_strd: /* what is this? */
case GST_RIFF_TAG_JUNK:
- if (!gst_riff_read_skip (riff))
- return FALSE;
- break;
+ if (!gst_riff_read_skip (riff))
+ return FALSE;
+ break;
}
if (avi->level_up) {
@@ -866,15 +831,17 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
{
char *codec_name = NULL;
GstTagList *list = gst_tag_list_new ();
+
padname = g_strdup_printf ("video_%02d", avi->num_v_streams);
templ = gst_element_class_get_pad_template (klass, "video_%02d");
caps = gst_riff_create_video_caps (strf.vids->compression, strh,
- strf.vids, &codec_name);
+ strf.vids, &codec_name);
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC,
- codec_name, NULL);
+ codec_name, NULL);
gst_element_found_tags (GST_ELEMENT (avi), list);
gst_tag_list_free (list);
- if (codec_name) g_free (codec_name);
+ if (codec_name)
+ g_free (codec_name);
g_free (strf.vids);
avi->num_v_streams++;
break;
@@ -883,15 +850,17 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
{
char *codec_name = NULL;
GstTagList *list = gst_tag_list_new ();
+
padname = g_strdup_printf ("audio_%02d", avi->num_a_streams);
templ = gst_element_class_get_pad_template (klass, "audio_%02d");
caps = gst_riff_create_audio_caps (strf.auds->format, strh, strf.auds,
- &codec_name);
+ &codec_name);
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_AUDIO_CODEC,
- codec_name, NULL);
+ codec_name, NULL);
gst_element_found_tags (GST_ELEMENT (avi), list);
gst_tag_list_free (list);
- if (codec_name) g_free (codec_name);
+ if (codec_name)
+ g_free (codec_name);
g_free (strf.auds);
avi->num_a_streams++;
break;
@@ -900,15 +869,17 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
{
char *codec_name = NULL;
GstTagList *list = gst_tag_list_new ();
+
padname = g_strdup_printf ("video_%02d", avi->num_v_streams);
templ = gst_element_class_get_pad_template (klass, "video_%02d");
caps = gst_riff_create_iavs_caps (strh->fcc_handler, strh, strf.iavs,
- &codec_name);
+ &codec_name);
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC,
- codec_name, NULL);
+ codec_name, NULL);
gst_element_found_tags (GST_ELEMENT (avi), list);
gst_tag_list_free (list);
- if (codec_name) g_free (codec_name);
+ if (codec_name)
+ g_free (codec_name);
g_free (strf.iavs);
avi->num_v_streams++;
break;
@@ -918,7 +889,7 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
}
/* set proper settings and add it */
- pad = gst_pad_new_from_template (templ, padname);
+ pad = gst_pad_new_from_template (templ, padname);
g_free (padname);
gst_pad_set_formats_function (pad, gst_avi_demux_get_src_formats);
@@ -964,7 +935,7 @@ skip_stream:
/* add a "NULL" stream */
avi->num_streams++;
- return TRUE; /* recoverable */
+ return TRUE; /* recoverable */
}
/*
@@ -972,7 +943,7 @@ skip_stream:
*/
static gboolean
-gst_avi_demux_stream_odml (GstAviDemux *avi)
+gst_avi_demux_stream_odml (GstAviDemux * avi)
{
GstRiffRead *riff = GST_RIFF_READ (avi);
guint32 tag;
@@ -987,38 +958,38 @@ gst_avi_demux_stream_odml (GstAviDemux *avi)
}
switch (tag) {
- case GST_RIFF_TAG_dmlh: {
- gst_riff_dmlh dmlh, *_dmlh;
- GstBuffer *buf;
-
- if (!gst_riff_read_data (riff, &tag, &buf))
- return FALSE;
- if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_dmlh)) {
- g_warning ("DMLH entry is too small (%d bytes, %d needed)",
- GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_dmlh));
- gst_buffer_unref (buf);
- break;
- }
- _dmlh = (gst_riff_dmlh *) GST_BUFFER_DATA (buf);
- dmlh.totalframes = GUINT32_FROM_LE (_dmlh->totalframes);
-
- GST_INFO ("dmlh tag found:");
- GST_INFO (" totalframes: %u", dmlh.totalframes);
-
- avi->num_frames = dmlh.totalframes;
- gst_buffer_unref (buf);
- break;
+ case GST_RIFF_TAG_dmlh:{
+ gst_riff_dmlh dmlh, *_dmlh;
+ GstBuffer *buf;
+
+ if (!gst_riff_read_data (riff, &tag, &buf))
+ return FALSE;
+ if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_dmlh)) {
+ g_warning ("DMLH entry is too small (%d bytes, %d needed)",
+ GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_dmlh));
+ gst_buffer_unref (buf);
+ break;
+ }
+ _dmlh = (gst_riff_dmlh *) GST_BUFFER_DATA (buf);
+ dmlh.totalframes = GUINT32_FROM_LE (_dmlh->totalframes);
+
+ GST_INFO ("dmlh tag found:");
+ GST_INFO (" totalframes: %u", dmlh.totalframes);
+
+ avi->num_frames = dmlh.totalframes;
+ gst_buffer_unref (buf);
+ break;
}
default:
- GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " in AVI header",
- GST_FOURCC_ARGS (tag));
- /* fall-through */
+ GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " in AVI header",
+ GST_FOURCC_ARGS (tag));
+ /* fall-through */
case GST_RIFF_TAG_JUNK:
- if (!gst_riff_read_skip (riff))
- return FALSE;
- break;
+ if (!gst_riff_read_skip (riff))
+ return FALSE;
+ break;
}
if (avi->level_up) {
@@ -1035,7 +1006,7 @@ gst_avi_demux_stream_odml (GstAviDemux *avi)
*/
gboolean
-gst_avi_demux_stream_index (GstAviDemux *avi)
+gst_avi_demux_stream_index (GstAviDemux * avi)
{
GstBuffer *buf = NULL;
guint i;
@@ -1065,7 +1036,7 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
return FALSE;
if (tag != GST_RIFF_TAG_idx1) {
g_warning ("No index after data, but " GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (tag));
+ GST_FOURCC_ARGS (tag));
goto end;
}
@@ -1075,7 +1046,8 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
/* parse all entries */
avi->index_size = GST_BUFFER_SIZE (buf) / sizeof (gst_riff_index_entry);
- avi->index_entries = g_malloc (avi->index_size * sizeof (gst_avi_index_entry));
+ avi->index_entries =
+ g_malloc (avi->index_size * sizeof (gst_avi_index_entry));
GST_INFO ("%u index entries", avi->index_size);
for (i = 0; i < avi->index_size; i++) {
@@ -1086,16 +1058,15 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
GstFormat format;
_entry = &((gst_riff_index_entry *) GST_BUFFER_DATA (buf))[i];
- entry.id = GUINT32_FROM_LE (_entry->id);
+ entry.id = GUINT32_FROM_LE (_entry->id);
entry.offset = GUINT32_FROM_LE (_entry->offset);
- entry.flags = GUINT32_FROM_LE (_entry->flags);
- entry.size = GUINT32_FROM_LE (_entry->size);
+ entry.flags = GUINT32_FROM_LE (_entry->flags);
+ entry.size = GUINT32_FROM_LE (_entry->size);
target = &avi->index_entries[i];
stream_nr = CHUNKID_TO_STREAMNR (entry.id);
if (stream_nr >= avi->num_streams || stream_nr < 0) {
- g_warning ("Index entry %d has invalid stream nr %d",
- i, stream_nr);
+ g_warning ("Index entry %d has invalid stream nr %d", i, stream_nr);
target->stream_nr = -1;
continue;
}
@@ -1103,9 +1074,9 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
stream = &avi->stream[stream_nr];
target->index_nr = i;
- target->flags = entry.flags;
- target->size = entry.size;
- target->offset = entry.offset;
+ target->flags = entry.flags;
+ target->size = entry.size;
+ target->offset = entry.offset;
/* figure out if the index is 0 based or relative to the MOVI start */
if (i == 0) {
@@ -1123,15 +1094,15 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
/* all audio frames are keyframes */
target->flags |= GST_RIFF_IF_KEYFRAME;
}
-
+
if (stream->strh->samplesize && stream->strh->type == GST_RIFF_FCC_auds) {
/* constant rate stream */
gst_pad_convert (stream->pad, GST_FORMAT_BYTES,
- stream->total_bytes, &format, &target->ts);
+ stream->total_bytes, &format, &target->ts);
} else {
/* VBR stream */
gst_pad_convert (stream->pad, GST_FORMAT_DEFAULT,
- stream->total_frames, &format, &target->ts);
+ stream->total_frames, &format, &target->ts);
}
stream->total_bytes += target->size;
@@ -1143,8 +1114,8 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
avi_stream_context *stream;
stream = &avi->stream[i];
- GST_DEBUG ("stream %u: %u frames, %" G_GINT64_FORMAT " bytes",
- i, stream->total_frames, stream->total_bytes);
+ GST_DEBUG ("stream %u: %u frames, %" G_GINT64_FORMAT " bytes",
+ i, stream->total_frames, stream->total_bytes);
}
end:
@@ -1164,7 +1135,7 @@ end:
*/
gboolean
-gst_avi_demux_stream_scan (GstAviDemux *avi)
+gst_avi_demux_stream_scan (GstAviDemux * avi)
{
//GstRiffRead *riff = GST_RIFF_READ (avi);
@@ -1178,7 +1149,7 @@ gst_avi_demux_stream_scan (GstAviDemux *avi)
*/
gboolean
-gst_avi_demux_stream_header (GstAviDemux *avi)
+gst_avi_demux_stream_header (GstAviDemux * avi)
{
GstRiffRead *riff = GST_RIFF_READ (avi);
guint32 tag, flags, streams;
@@ -1188,16 +1159,16 @@ gst_avi_demux_stream_header (GstAviDemux *avi)
return FALSE;
if (tag != GST_RIFF_TAG_LIST) {
GST_ELEMENT_ERROR (avi, STREAM, DEMUX, (NULL),
- ("Invalid AVI header (no LIST at start): "
- GST_FOURCC_FORMAT, GST_FOURCC_ARGS (tag)));
+ ("Invalid AVI header (no LIST at start): "
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (tag)));
return FALSE;
}
if (!gst_riff_read_list (riff, &tag))
return FALSE;
if (tag != GST_RIFF_LIST_hdrl) {
GST_ELEMENT_ERROR (avi, STREAM, DEMUX, (NULL),
- ("Invalid AVI header (no hdrl at start): "
- GST_FOURCC_FORMAT, GST_FOURCC_ARGS (tag)));
+ ("Invalid AVI header (no hdrl at start): "
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (tag)));
return FALSE;
}
@@ -1206,8 +1177,8 @@ gst_avi_demux_stream_header (GstAviDemux *avi)
return FALSE;
if (tag != GST_RIFF_TAG_avih) {
GST_ELEMENT_ERROR (avi, STREAM, DEMUX, (NULL),
- ("Invalid AVI header (no avih at start): "
- GST_FOURCC_FORMAT, GST_FOURCC_ARGS (tag)));
+ ("Invalid AVI header (no avih at start): "
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (tag)));
return FALSE;
}
if (!gst_avi_demux_stream_avih (avi, &flags, &streams))
@@ -1224,44 +1195,44 @@ gst_avi_demux_stream_header (GstAviDemux *avi)
switch (tag) {
case GST_RIFF_TAG_LIST:
- if (!(tag = gst_riff_peek_list (riff)))
- return FALSE;
-
- switch (tag) {
- case GST_RIFF_LIST_strl:
- if (!gst_riff_read_list (riff, &tag) ||
- !gst_avi_demux_add_stream (avi))
- return FALSE;
- break;
-
- case GST_RIFF_LIST_odml:
- if (!gst_riff_read_list (riff, &tag) ||
- !gst_avi_demux_stream_odml (avi))
- return FALSE;
- break;
-
- default:
- GST_WARNING ("Unknown list " GST_FOURCC_FORMAT " in AVI header",
- GST_FOURCC_ARGS (tag));
- /* fall-through */
-
- case GST_RIFF_TAG_JUNK:
- if (!gst_riff_read_skip (riff))
- return FALSE;
- break;
- }
-
- break;
+ if (!(tag = gst_riff_peek_list (riff)))
+ return FALSE;
+
+ switch (tag) {
+ case GST_RIFF_LIST_strl:
+ if (!gst_riff_read_list (riff, &tag) ||
+ !gst_avi_demux_add_stream (avi))
+ return FALSE;
+ break;
+
+ case GST_RIFF_LIST_odml:
+ if (!gst_riff_read_list (riff, &tag) ||
+ !gst_avi_demux_stream_odml (avi))
+ return FALSE;
+ break;
+
+ default:
+ GST_WARNING ("Unknown list " GST_FOURCC_FORMAT " in AVI header",
+ GST_FOURCC_ARGS (tag));
+ /* fall-through */
+
+ case GST_RIFF_TAG_JUNK:
+ if (!gst_riff_read_skip (riff))
+ return FALSE;
+ break;
+ }
+
+ break;
default:
- GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " in AVI header",
- GST_FOURCC_ARGS (tag));
- /* fall-through */
+ GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " in AVI header",
+ GST_FOURCC_ARGS (tag));
+ /* fall-through */
case GST_RIFF_TAG_JUNK:
- if (!gst_riff_read_skip (riff))
- return FALSE;
- break;
+ if (!gst_riff_read_skip (riff))
+ return FALSE;
+ break;
}
if (avi->level_up) {
@@ -1272,11 +1243,11 @@ gst_avi_demux_stream_header (GstAviDemux *avi)
if (avi->num_streams != streams) {
g_warning ("Stream header mentioned %d streams, but %d available",
- streams, avi->num_streams);
+ streams, avi->num_streams);
}
/* we've got streaminfo now */
- g_object_notify (G_OBJECT(avi), "streaminfo");
+ g_object_notify (G_OBJECT (avi), "streaminfo");
/* Now, find the data (i.e. skip all junk between header and data) */
while (1) {
@@ -1284,18 +1255,17 @@ gst_avi_demux_stream_header (GstAviDemux *avi)
return FALSE;
if (tag != GST_RIFF_TAG_LIST) {
if (!gst_riff_read_skip (riff))
- return FALSE;
+ return FALSE;
continue;
}
if (!(tag = gst_riff_peek_list (riff)))
return FALSE;
if (tag != GST_RIFF_LIST_movi) {
if (tag == GST_RIFF_LIST_INFO) {
- if (!gst_riff_read_list (riff, &tag) ||
- !gst_riff_read_info (riff))
- return FALSE;
- } else if (!gst_riff_read_skip (riff)) {
- return FALSE;
+ if (!gst_riff_read_list (riff, &tag) || !gst_riff_read_info (riff))
+ return FALSE;
+ } else if (!gst_riff_read_skip (riff)) {
+ return FALSE;
}
continue;
}
@@ -1319,7 +1289,7 @@ gst_avi_demux_stream_header (GstAviDemux *avi)
*/
static gboolean
-gst_avi_demux_handle_seek (GstAviDemux *avi)
+gst_avi_demux_handle_seek (GstAviDemux * avi)
{
GstRiffRead *riff = GST_RIFF_READ (avi);
guint i;
@@ -1336,8 +1306,8 @@ gst_avi_demux_handle_seek (GstAviDemux *avi)
avi_stream_context *stream = &avi->stream[i];
if (GST_PAD_IS_USABLE (stream->pad)) {
- event = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME,
- avi->last_seek + stream->delay , NULL);
+ event = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME,
+ avi->last_seek + stream->delay, NULL);
gst_pad_push (stream->pad, GST_DATA (event));
}
}
@@ -1350,17 +1320,17 @@ gst_avi_demux_handle_seek (GstAviDemux *avi)
*/
gboolean
-gst_avi_demux_stream_data (GstAviDemux *avi)
+gst_avi_demux_stream_data (GstAviDemux * avi)
{
GstRiffRead *riff = GST_RIFF_READ (avi);
guint32 tag;
guint stream_nr;
gst_avi_index_entry *entry;
- if (avi->seek_offset != (guint64) -1) {
+ if (avi->seek_offset != (guint64) - 1) {
if (!gst_avi_demux_handle_seek (avi))
return FALSE;
- avi->seek_offset = (guint64) -1;
+ avi->seek_offset = (guint64) - 1;
}
/* peek first (for the end of this 'list/movi' section) */
@@ -1377,40 +1347,40 @@ gst_avi_demux_stream_data (GstAviDemux *avi)
switch (tag) {
case GST_RIFF_TAG_LIST:
- if (!(tag = gst_riff_peek_list (riff)))
- return FALSE;
-
- switch (tag) {
- case GST_RIFF_LIST_AVIX:
- case GST_RIFF_LIST_movi:
- if (!gst_riff_read_list (riff, &tag))
- return FALSE;
- /* we're now going to read buffers! */
- break;
-
- default:
- GST_WARNING ("Unknown list " GST_FOURCC_FORMAT " before AVI data",
- GST_FOURCC_ARGS (tag));
- /* fall-through */
-
- case GST_RIFF_TAG_JUNK:
- if (!gst_riff_read_skip (riff))
- return FALSE;
- break;
- }
-
- break;
+ if (!(tag = gst_riff_peek_list (riff)))
+ return FALSE;
+
+ switch (tag) {
+ case GST_RIFF_LIST_AVIX:
+ case GST_RIFF_LIST_movi:
+ if (!gst_riff_read_list (riff, &tag))
+ return FALSE;
+ /* we're now going to read buffers! */
+ break;
+
+ default:
+ GST_WARNING ("Unknown list " GST_FOURCC_FORMAT " before AVI data",
+ GST_FOURCC_ARGS (tag));
+ /* fall-through */
+
+ case GST_RIFF_TAG_JUNK:
+ if (!gst_riff_read_skip (riff))
+ return FALSE;
+ break;
+ }
+
+ break;
default:
- GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " before AVI data",
- GST_FOURCC_ARGS (tag));
- /* fall-through */
+ GST_WARNING ("Unknown tag " GST_FOURCC_FORMAT " before AVI data",
+ GST_FOURCC_ARGS (tag));
+ /* fall-through */
case GST_RIFF_TAG_idx1:
case GST_RIFF_TAG_JUNK:
- if (!gst_riff_read_skip (riff))
- return FALSE;
- break;
+ if (!gst_riff_read_skip (riff))
+ return FALSE;
+ break;
}
}
@@ -1421,7 +1391,7 @@ gst_avi_demux_stream_data (GstAviDemux *avi)
if (stream_nr < 0 || stream_nr >= avi->num_streams) {
/* recoverable */
g_warning ("Invalid stream ID %d (" GST_FOURCC_FORMAT ")",
- stream_nr, GST_FOURCC_ARGS (tag));
+ stream_nr, GST_FOURCC_ARGS (tag));
if (!gst_riff_read_skip (riff))
return FALSE;
} else {
@@ -1437,20 +1407,19 @@ gst_avi_demux_stream_data (GstAviDemux *avi)
/* get time of this buffer */
stream = &avi->stream[stream_nr];
entry = gst_avi_demux_index_next (avi, stream_nr,
- stream->current_entry + 1, 0);
+ stream->current_entry + 1, 0);
if (entry) {
stream->current_entry = entry->index_nr;
if (entry->flags & GST_RIFF_IF_KEYFRAME) {
- GST_BUFFER_FLAG_SET (buf, GST_BUFFER_KEY_UNIT);
+ GST_BUFFER_FLAG_SET (buf, GST_BUFFER_KEY_UNIT);
}
}
format = GST_FORMAT_TIME;
- gst_pad_query (stream->pad, GST_QUERY_POSITION,
- &format, &next_ts);
+ gst_pad_query (stream->pad, GST_QUERY_POSITION, &format, &next_ts);
/* set delay (if any) */
if (stream->strh->init_frames == stream->current_frame &&
- stream->delay == 0)
+ stream->delay == 0)
stream->delay = next_ts;
stream->current_frame++;
@@ -1462,16 +1431,15 @@ gst_avi_demux_stream_data (GstAviDemux *avi)
gst_buffer_unref (buf);
} else {
if (!stream->pad || !GST_PAD_IS_USABLE (stream->pad)) {
- gst_buffer_unref (buf);
+ gst_buffer_unref (buf);
} else {
- GstClockTime dur_ts;
+ GstClockTime dur_ts;
- GST_BUFFER_TIMESTAMP (buf) = next_ts;
- gst_pad_query (stream->pad, GST_QUERY_POSITION,
- &format, &dur_ts);
- GST_BUFFER_DURATION (buf) = dur_ts - next_ts;
+ GST_BUFFER_TIMESTAMP (buf) = next_ts;
+ gst_pad_query (stream->pad, GST_QUERY_POSITION, &format, &dur_ts);
+ GST_BUFFER_DURATION (buf) = dur_ts - next_ts;
- gst_pad_push (stream->pad, GST_DATA (buf));
+ gst_pad_push (stream->pad, GST_DATA (buf));
}
}
}
@@ -1480,26 +1448,26 @@ gst_avi_demux_stream_data (GstAviDemux *avi)
}
static void
-gst_avi_demux_loop (GstElement *element)
+gst_avi_demux_loop (GstElement * element)
{
GstAviDemux *avi = GST_AVI_DEMUX (element);
switch (avi->state) {
case GST_AVI_DEMUX_START:
if (!gst_avi_demux_stream_init (avi))
- return;
+ return;
avi->state = GST_AVI_DEMUX_HEADER;
/* fall-through */
case GST_AVI_DEMUX_HEADER:
if (!gst_avi_demux_stream_header (avi))
- return;
+ return;
avi->state = GST_AVI_DEMUX_MOVI;
/* fall-through */
case GST_AVI_DEMUX_MOVI:
if (!gst_avi_demux_stream_data (avi))
- return;
+ return;
break;
default:
@@ -1508,7 +1476,7 @@ gst_avi_demux_loop (GstElement *element)
}
static GstElementStateReturn
-gst_avi_demux_change_state (GstElement *element)
+gst_avi_demux_change_state (GstElement * element)
{
GstAviDemux *avi = GST_AVI_DEMUX (element);
@@ -1530,10 +1498,8 @@ gst_avi_demux_change_state (GstElement *element)
}
static void
-gst_avi_demux_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+gst_avi_demux_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec)
{
GstAviDemux *avi = GST_AVI_DEMUX (object);