summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
3dbe0e1)
get_range_times worked for handling UTC ranges for seeks, but we also
need to convert back from NPT to the requested unit in
get_range_string. convert_range is now used for both.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702084
if (res == GST_RTSP_OK) {
if (gst_rtsp_range_parse (str, &range) == GST_RTSP_OK) {
/* we have a range, seek to the position */
if (res == GST_RTSP_OK) {
if (gst_rtsp_range_parse (str, &range) == GST_RTSP_OK) {
/* we have a range, seek to the position */
- gst_rtsp_media_seek (gst_rtsp_session_media_get_media (media), range);
+ gst_rtsp_media_seek (gst_rtsp_session_media_get_media (media), range);
gst_rtsp_range_free (range);
}
}
gst_rtsp_range_free (range);
}
}
GstMessage * message);
static void finish_unprepare (GstRTSPMedia * media);
static gboolean default_unprepare (GstRTSPMedia * media);
GstMessage * message);
static void finish_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 gboolean
+default_convert_range (GstRTSPMedia * media, GstRTSPTimeRange * range,
+ GstRTSPRangeUnit unit);
static guint gst_rtsp_media_signals[SIGNAL_LAST] = { 0 };
static guint gst_rtsp_media_signals[SIGNAL_LAST] = { 0 };
klass->handle_message = default_handle_message;
klass->unprepare = default_unprepare;
klass->handle_message = default_handle_message;
klass->unprepare = default_unprepare;
- klass->get_range_times = default_get_range_times;
+ klass->convert_range = default_convert_range;
gst_rtsp_media_get_range_string (GstRTSPMedia * media, gboolean play,
GstRTSPRangeUnit unit)
{
gst_rtsp_media_get_range_string (GstRTSPMedia * media, gboolean play,
GstRTSPRangeUnit unit)
{
+ GstRTSPMediaClass *klass;
GstRTSPMediaPrivate *priv;
gchar *result;
GstRTSPTimeRange range;
GstRTSPMediaPrivate *priv;
gchar *result;
GstRTSPTimeRange range;
+ klass = GST_RTSP_MEDIA_GET_CLASS (media);
g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), NULL);
g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), NULL);
+ g_return_val_if_fail (klass->convert_range != NULL, FALSE);
g_mutex_unlock (&priv->lock);
g_rec_mutex_unlock (&priv->state_lock);
g_mutex_unlock (&priv->lock);
g_rec_mutex_unlock (&priv->state_lock);
- gst_rtsp_range_convert_units (&range, unit);
+ if (!klass->convert_range (media, &range, unit)) {
+ goto conversion_failed;
+ }
result = gst_rtsp_range_to_string (&range);
result = gst_rtsp_range_to_string (&range);
g_rec_mutex_unlock (&priv->state_lock);
return NULL;
}
g_rec_mutex_unlock (&priv->state_lock);
return NULL;
}
+conversion_failed:
+ {
+ GST_WARNING ("range conversion to unit %d failed", unit);
+ g_rec_mutex_unlock (&priv->state_lock);
+ return NULL;
+ }
g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), FALSE);
g_return_val_if_fail (range != NULL, 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 (klass->get_range_times != NULL, FALSE);
+ g_return_val_if_fail (klass->convert_range != NULL, FALSE);
start_type = stop_type = GST_SEEK_TYPE_NONE;
start_type = stop_type = GST_SEEK_TYPE_NONE;
- if (!klass->get_range_times (media, range, &start, &stop))
+ if (!klass->convert_range (media, range, GST_RTSP_RANGE_NPT))
+ gst_rtsp_range_get_times (range, &start, &stop);
GST_INFO ("got %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
GST_INFO ("got %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
not_supported:
{
g_rec_mutex_unlock (&priv->state_lock);
not_supported:
{
g_rec_mutex_unlock (&priv->state_lock);
- GST_WARNING ("seek unit %d not supported", range->unit);
+ GST_WARNING ("conversion to npt not supported");
/* called with state-lock */
static gboolean
/* called with state-lock */
static gboolean
-default_get_range_times (GstRTSPMedia * media,
- const GstRTSPTimeRange * range, GstClockTime * min, GstClockTime * max)
+default_convert_range (GstRTSPMedia * media, GstRTSPTimeRange * range,
+ GstRTSPRangeUnit unit)
- return gst_rtsp_range_get_times (range, min, max);
+ return gst_rtsp_range_convert_units (range, unit);
/* vmethods */
gboolean (*handle_message) (GstRTSPMedia *media, GstMessage *message);
gboolean (*unprepare) (GstRTSPMedia *media);
/* vmethods */
gboolean (*handle_message) (GstRTSPMedia *media, GstMessage *message);
gboolean (*unprepare) (GstRTSPMedia *media);
- gboolean (*get_range_times) (GstRTSPMedia *media,
- const GstRTSPTimeRange * range,
- GstClockTime * min, GstClockTime * max);
+ gboolean (*convert_range) (GstRTSPMedia *media, GstRTSPTimeRange *range,
+ GstRTSPRangeUnit unit);
/* signals */
void (*new_stream) (GstRTSPMedia *media, GstRTSPStream * stream);
/* signals */
void (*new_stream) (GstRTSPMedia *media, GstRTSPStream * stream);