mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-04 17:52:29 +00:00
libs/gst/base/gstbasesrc.*: Don't cache the seekable status.
Original commit message from CVS: * libs/gst/base/gstbasesrc.c: * libs/gst/base/gstbasesrc.h: Don't cache the seekable status. Fixes bug #544174
This commit is contained in:
parent
4abe96918a
commit
4d9689b66a
3 changed files with 25 additions and 11 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2008-07-24 Thijs Vermeir <thijsvermeir@gmail.com>
|
||||||
|
|
||||||
|
* libs/gst/base/gstbasesrc.c:
|
||||||
|
* libs/gst/base/gstbasesrc.h:
|
||||||
|
Don't cache the seekable status.
|
||||||
|
Fixes bug #544174
|
||||||
|
|
||||||
2008-07-24 Rene Stadler <mail@renestadler.de>
|
2008-07-24 Rene Stadler <mail@renestadler.de>
|
||||||
|
|
||||||
* docs/manual/advanced-autoplugging.xml: Add fakesink to example
|
* docs/manual/advanced-autoplugging.xml: Add fakesink to example
|
||||||
|
|
|
@ -319,6 +319,7 @@ static GstFlowReturn gst_base_src_pad_get_range (GstPad * pad, guint64 offset,
|
||||||
guint length, GstBuffer ** buf);
|
guint length, GstBuffer ** buf);
|
||||||
static GstFlowReturn gst_base_src_get_range (GstBaseSrc * src, guint64 offset,
|
static GstFlowReturn gst_base_src_get_range (GstBaseSrc * src, guint64 offset,
|
||||||
guint length, GstBuffer ** buf);
|
guint length, GstBuffer ** buf);
|
||||||
|
static gboolean gst_base_src_seekable (GstBaseSrc * src);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_base_src_base_init (gpointer g_class)
|
gst_base_src_base_init (gpointer g_class)
|
||||||
|
@ -794,7 +795,7 @@ gst_base_src_default_query (GstBaseSrc * src, GstQuery * query)
|
||||||
case GST_QUERY_SEEKING:
|
case GST_QUERY_SEEKING:
|
||||||
{
|
{
|
||||||
gst_query_set_seeking (query, src->segment.format,
|
gst_query_set_seeking (query, src->segment.format,
|
||||||
src->seekable, 0, src->segment.duration);
|
gst_base_src_seekable (src), 0, src->segment.duration);
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1445,6 +1446,17 @@ wrong_mode:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_base_src_seekable (GstBaseSrc * src)
|
||||||
|
{
|
||||||
|
GstBaseSrcClass *bclass;
|
||||||
|
bclass = GST_BASE_SRC_GET_CLASS (src);
|
||||||
|
if (bclass->is_seekable)
|
||||||
|
return bclass->is_seekable (src);
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_base_src_default_event (GstBaseSrc * src, GstEvent * event)
|
gst_base_src_default_event (GstBaseSrc * src, GstEvent * event)
|
||||||
{
|
{
|
||||||
|
@ -1453,7 +1465,7 @@ gst_base_src_default_event (GstBaseSrc * src, GstEvent * event)
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_SEEK:
|
case GST_EVENT_SEEK:
|
||||||
/* is normally called when in push mode */
|
/* is normally called when in push mode */
|
||||||
if (!src->seekable)
|
if (!gst_base_src_seekable (src))
|
||||||
goto not_seekable;
|
goto not_seekable;
|
||||||
|
|
||||||
result = gst_base_src_perform_seek (src, event, TRUE);
|
result = gst_base_src_perform_seek (src, event, TRUE);
|
||||||
|
@ -2347,6 +2359,7 @@ gst_base_src_start (GstBaseSrc * basesrc)
|
||||||
GstBaseSrcClass *bclass;
|
GstBaseSrcClass *bclass;
|
||||||
gboolean result;
|
gboolean result;
|
||||||
guint64 size;
|
guint64 size;
|
||||||
|
gboolean seekable;
|
||||||
|
|
||||||
if (GST_OBJECT_FLAG_IS_SET (basesrc, GST_BASE_SRC_STARTED))
|
if (GST_OBJECT_FLAG_IS_SET (basesrc, GST_BASE_SRC_STARTED))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -2391,16 +2404,11 @@ gst_base_src_start (GstBaseSrc * basesrc)
|
||||||
G_GINT64_FORMAT, basesrc->segment.format, result, size,
|
G_GINT64_FORMAT, basesrc->segment.format, result, size,
|
||||||
basesrc->segment.duration);
|
basesrc->segment.duration);
|
||||||
|
|
||||||
/* check if we can seek */
|
seekable = gst_base_src_seekable (basesrc);
|
||||||
if (bclass->is_seekable)
|
GST_DEBUG_OBJECT (basesrc, "is seekable: %d", seekable);
|
||||||
basesrc->seekable = bclass->is_seekable (basesrc);
|
|
||||||
else
|
|
||||||
basesrc->seekable = FALSE;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (basesrc, "is seekable: %d", basesrc->seekable);
|
|
||||||
|
|
||||||
/* update for random access flag */
|
/* update for random access flag */
|
||||||
basesrc->random_access = basesrc->seekable &&
|
basesrc->random_access = seekable &&
|
||||||
basesrc->segment.format == GST_FORMAT_BYTES;
|
basesrc->segment.format == GST_FORMAT_BYTES;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (basesrc, "is random_access: %d", basesrc->random_access);
|
GST_DEBUG_OBJECT (basesrc, "is random_access: %d", basesrc->random_access);
|
||||||
|
|
|
@ -85,7 +85,6 @@ struct _GstBaseSrc {
|
||||||
gint blocksize; /* size of buffers when operating push based */
|
gint blocksize; /* size of buffers when operating push based */
|
||||||
gboolean can_activate_push; /* some scheduling properties */
|
gboolean can_activate_push; /* some scheduling properties */
|
||||||
GstActivateMode pad_mode;
|
GstActivateMode pad_mode;
|
||||||
gboolean seekable;
|
|
||||||
gboolean random_access;
|
gboolean random_access;
|
||||||
|
|
||||||
GstClockID clock_id; /* for syncing */
|
GstClockID clock_id; /* for syncing */
|
||||||
|
|
Loading…
Reference in a new issue