gst/elements/gstfilesrc.*: s/seek_happened/need_discont/ and require discont before sending any data

Original commit message from CVS:
* gst/elements/gstfilesrc.c: (gst_filesrc_init), (gst_filesrc_get),
(gst_filesrc_change_state), (gst_filesrc_srcpad_event):
* gst/elements/gstfilesrc.h:
s/seek_happened/need_discont/ and require discont before sending any
data
This commit is contained in:
Benjamin Otte 2004-04-16 02:57:55 +00:00
parent 06940084e5
commit 2713712906
5 changed files with 20 additions and 14 deletions

View file

@ -1,3 +1,11 @@
2004-04-16 Benjamin Otte <otte@gnome.org>
* gst/elements/gstfilesrc.c: (gst_filesrc_init), (gst_filesrc_get),
(gst_filesrc_change_state), (gst_filesrc_srcpad_event):
* gst/elements/gstfilesrc.h:
s/seek_happened/need_discont/ and require discont before sending any
data
2004-04-15 David Schleef <ds@schleef.org> 2004-04-15 David Schleef <ds@schleef.org>
* gst/gstvalue.c: (gst_value_serialize_buffer), * gst/gstvalue.c: (gst_value_serialize_buffer),

View file

@ -245,8 +245,6 @@ gst_filesrc_init (GstFileSrc * src)
src->mapbuf = NULL; src->mapbuf = NULL;
src->mapsize = DEFAULT_MMAPSIZE; /* default is 4MB */ src->mapsize = DEFAULT_MMAPSIZE; /* default is 4MB */
src->seek_happened = FALSE;
} }
static void static void
@ -660,10 +658,10 @@ gst_filesrc_get (GstPad * pad)
return GST_DATA (gst_event_new_flush ()); return GST_DATA (gst_event_new_flush ());
} }
/* check for seek */ /* check for seek */
if (src->seek_happened) { if (src->need_discont) {
GstEvent *event; GstEvent *event;
src->seek_happened = FALSE; src->need_discont = FALSE;
GST_DEBUG_OBJECT (src, "sending discont"); GST_DEBUG_OBJECT (src, "sending discont");
event = event =
gst_event_new_discontinuous (FALSE, GST_FORMAT_BYTES, src->curoffset, gst_event_new_discontinuous (FALSE, GST_FORMAT_BYTES, src->curoffset,
@ -806,11 +804,12 @@ gst_filesrc_change_state (GstElement * element)
if (!gst_filesrc_open_file (GST_FILESRC (element))) if (!gst_filesrc_open_file (GST_FILESRC (element)))
return GST_STATE_FAILURE; return GST_STATE_FAILURE;
} }
src->need_discont = TRUE;
break; break;
case GST_STATE_PAUSED_TO_READY: case GST_STATE_PAUSED_TO_READY:
if (GST_FLAG_IS_SET (element, GST_FILESRC_OPEN)) if (GST_FLAG_IS_SET (element, GST_FILESRC_OPEN))
gst_filesrc_close_file (GST_FILESRC (element)); gst_filesrc_close_file (GST_FILESRC (element));
src->seek_happened = TRUE; src->need_discont = TRUE;
break; break;
default: default:
break; break;
@ -910,7 +909,7 @@ gst_filesrc_srcpad_event (GstPad * pad, GstEvent * event)
goto error; goto error;
break; break;
} }
src->seek_happened = TRUE; src->need_discont = TRUE;
src->need_flush = GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH; src->need_flush = GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH;
break; break;
} }

View file

@ -70,7 +70,7 @@ struct _GstFileSrc {
GstBuffer *mapbuf; GstBuffer *mapbuf;
size_t mapsize; size_t mapsize;
gboolean seek_happened; gboolean need_discont;
gboolean need_flush; gboolean need_flush;
}; };

View file

@ -245,8 +245,6 @@ gst_filesrc_init (GstFileSrc * src)
src->mapbuf = NULL; src->mapbuf = NULL;
src->mapsize = DEFAULT_MMAPSIZE; /* default is 4MB */ src->mapsize = DEFAULT_MMAPSIZE; /* default is 4MB */
src->seek_happened = FALSE;
} }
static void static void
@ -660,10 +658,10 @@ gst_filesrc_get (GstPad * pad)
return GST_DATA (gst_event_new_flush ()); return GST_DATA (gst_event_new_flush ());
} }
/* check for seek */ /* check for seek */
if (src->seek_happened) { if (src->need_discont) {
GstEvent *event; GstEvent *event;
src->seek_happened = FALSE; src->need_discont = FALSE;
GST_DEBUG_OBJECT (src, "sending discont"); GST_DEBUG_OBJECT (src, "sending discont");
event = event =
gst_event_new_discontinuous (FALSE, GST_FORMAT_BYTES, src->curoffset, gst_event_new_discontinuous (FALSE, GST_FORMAT_BYTES, src->curoffset,
@ -806,11 +804,12 @@ gst_filesrc_change_state (GstElement * element)
if (!gst_filesrc_open_file (GST_FILESRC (element))) if (!gst_filesrc_open_file (GST_FILESRC (element)))
return GST_STATE_FAILURE; return GST_STATE_FAILURE;
} }
src->need_discont = TRUE;
break; break;
case GST_STATE_PAUSED_TO_READY: case GST_STATE_PAUSED_TO_READY:
if (GST_FLAG_IS_SET (element, GST_FILESRC_OPEN)) if (GST_FLAG_IS_SET (element, GST_FILESRC_OPEN))
gst_filesrc_close_file (GST_FILESRC (element)); gst_filesrc_close_file (GST_FILESRC (element));
src->seek_happened = TRUE; src->need_discont = TRUE;
break; break;
default: default:
break; break;
@ -910,7 +909,7 @@ gst_filesrc_srcpad_event (GstPad * pad, GstEvent * event)
goto error; goto error;
break; break;
} }
src->seek_happened = TRUE; src->need_discont = TRUE;
src->need_flush = GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH; src->need_flush = GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH;
break; break;
} }

View file

@ -70,7 +70,7 @@ struct _GstFileSrc {
GstBuffer *mapbuf; GstBuffer *mapbuf;
size_t mapsize; size_t mapsize;
gboolean seek_happened; gboolean need_discont;
gboolean need_flush; gboolean need_flush;
}; };