mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-13 17:55:30 +00:00
media: possibility to override range time conversion
Make it possible to override the conversion from GstRTSPTimeRange to GstClockTimes, that is done before seeking on the media pipeline. Overriding can be useful for UTC ranges, where the default conversion gives nanoseconds since 1900. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701191
This commit is contained in:
parent
c5b3066c33
commit
7efa871c1f
2 changed files with 19 additions and 1 deletions
|
@ -123,6 +123,8 @@ static gboolean default_handle_message (GstRTSPMedia * media,
|
||||||
GstMessage * message);
|
GstMessage * message);
|
||||||
static void finish_unprepare (GstRTSPMedia * media);
|
static void finish_unprepare (GstRTSPMedia * media);
|
||||||
static gboolean default_unprepare (GstRTSPMedia * media);
|
static gboolean default_unprepare (GstRTSPMedia * media);
|
||||||
|
static gboolean default_get_range_times (GstRTSPMedia * media,
|
||||||
|
const GstRTSPTimeRange * range, GstClockTime * min, GstClockTime * max);
|
||||||
|
|
||||||
static guint gst_rtsp_media_signals[SIGNAL_LAST] = { 0 };
|
static guint gst_rtsp_media_signals[SIGNAL_LAST] = { 0 };
|
||||||
|
|
||||||
|
@ -211,6 +213,7 @@ gst_rtsp_media_class_init (GstRTSPMediaClass * klass)
|
||||||
|
|
||||||
klass->handle_message = default_handle_message;
|
klass->handle_message = default_handle_message;
|
||||||
klass->unprepare = default_unprepare;
|
klass->unprepare = default_unprepare;
|
||||||
|
klass->get_range_times = default_get_range_times;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1124,14 +1127,18 @@ not_prepared:
|
||||||
gboolean
|
gboolean
|
||||||
gst_rtsp_media_seek (GstRTSPMedia * media, GstRTSPTimeRange * range)
|
gst_rtsp_media_seek (GstRTSPMedia * media, GstRTSPTimeRange * range)
|
||||||
{
|
{
|
||||||
|
GstRTSPMediaClass *klass;
|
||||||
GstRTSPMediaPrivate *priv;
|
GstRTSPMediaPrivate *priv;
|
||||||
GstSeekFlags flags;
|
GstSeekFlags flags;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
GstClockTime start, stop;
|
GstClockTime start, stop;
|
||||||
GstSeekType start_type, stop_type;
|
GstSeekType start_type, stop_type;
|
||||||
|
|
||||||
|
klass = GST_RTSP_MEDIA_GET_CLASS (media);
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), FALSE);
|
g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), FALSE);
|
||||||
g_return_val_if_fail (range != NULL, FALSE);
|
g_return_val_if_fail (range != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (klass->get_range_times != NULL, FALSE);
|
||||||
|
|
||||||
priv = media->priv;
|
priv = media->priv;
|
||||||
|
|
||||||
|
@ -1148,7 +1155,7 @@ gst_rtsp_media_seek (GstRTSPMedia * media, GstRTSPTimeRange * range)
|
||||||
|
|
||||||
start_type = stop_type = GST_SEEK_TYPE_NONE;
|
start_type = stop_type = GST_SEEK_TYPE_NONE;
|
||||||
|
|
||||||
if (!gst_rtsp_range_get_times (range, &start, &stop))
|
if (!klass->get_range_times (media, range, &start, &stop))
|
||||||
goto not_supported;
|
goto not_supported;
|
||||||
|
|
||||||
GST_INFO ("got %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
|
GST_INFO ("got %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
|
||||||
|
@ -2043,3 +2050,11 @@ not_prepared:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* called with state-lock */
|
||||||
|
static gboolean
|
||||||
|
default_get_range_times (GstRTSPMedia * media,
|
||||||
|
const GstRTSPTimeRange * range, GstClockTime * min, GstClockTime * max)
|
||||||
|
{
|
||||||
|
return gst_rtsp_range_get_times (range, min, max);
|
||||||
|
}
|
||||||
|
|
|
@ -100,6 +100,9 @@ struct _GstRTSPMediaClass {
|
||||||
/* vmethods */
|
/* vmethods */
|
||||||
gboolean (*handle_message) (GstRTSPMedia *media, GstMessage *message);
|
gboolean (*handle_message) (GstRTSPMedia *media, GstMessage *message);
|
||||||
gboolean (*unprepare) (GstRTSPMedia *media);
|
gboolean (*unprepare) (GstRTSPMedia *media);
|
||||||
|
gboolean (*get_range_times) (GstRTSPMedia *media,
|
||||||
|
const GstRTSPTimeRange * range,
|
||||||
|
GstClockTime * min, GstClockTime * max);
|
||||||
|
|
||||||
/* signals */
|
/* signals */
|
||||||
void (*new_stream) (GstRTSPMedia *media, GstRTSPStream * stream);
|
void (*new_stream) (GstRTSPMedia *media, GstRTSPStream * stream);
|
||||||
|
|
Loading…
Reference in a new issue