adaptivedemux2: Add most recent data time and offset helper

Add a field to the DownloadRequest that reports the most recent time at which
data arrived. Update it in the DownloadHelper.

Add a method to retrieve the GST_BUFFER_OFFSET() for the DownloadRequest's data
buffer (if any).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3883>
This commit is contained in:
Jan Schmidt 2022-10-14 23:30:59 +11:00 committed by GStreamer Marge Bot
parent 40938c8853
commit 5192181ef5
3 changed files with 26 additions and 7 deletions

View file

@ -309,19 +309,20 @@ on_read_ready (GObject * source, GAsyncResult * result, gpointer user_data)
} }
} }
if (request->download_start_time == GST_CLOCK_TIME_NONE) {
GST_LOG ("Got first data for URI %s", request->uri);
request->download_start_time = now;
}
if (gst_buffer != NULL) { if (gst_buffer != NULL) {
/* Unsent means cancellation is in progress, so don't override /* Unsent means cancellation is in progress, so don't override
* the state. Otherwise make sure it is LOADING */ * the state. Otherwise make sure it is LOADING */
if (request->state != DOWNLOAD_REQUEST_STATE_UNSENT) if (request->state != DOWNLOAD_REQUEST_STATE_UNSENT)
request->state = DOWNLOAD_REQUEST_STATE_LOADING; request->state = DOWNLOAD_REQUEST_STATE_LOADING;
GST_LOG ("Adding %u bytes to buffer", if (request->download_start_time == GST_CLOCK_TIME_NONE) {
(guint) (gst_buffer_get_size (gst_buffer))); GST_LOG ("Got first data for URI %s", request->uri);
request->download_start_time = now;
}
request->download_newest_data_time = now;
GST_LOG ("Adding %u bytes to buffer (request URI %s)",
(guint) (gst_buffer_get_size (gst_buffer)), request->uri);
download_request_add_buffer (request, gst_buffer); download_request_add_buffer (request, gst_buffer);

View file

@ -328,6 +328,22 @@ download_request_get_bytes_available (DownloadRequest * request)
return ret; return ret;
} }
guint64
download_request_get_cur_offset (DownloadRequest * request)
{
DownloadRequestPrivate *priv = DOWNLOAD_REQUEST_PRIVATE (request);
guint64 ret = GST_BUFFER_OFFSET_NONE;
g_rec_mutex_lock (&priv->lock);
if (priv->buffer != NULL)
ret = GST_BUFFER_OFFSET (priv->buffer);
g_rec_mutex_unlock (&priv->lock);
return ret;
}
void void
download_request_set_uri (DownloadRequest * request, const gchar * uri, download_request_set_uri (DownloadRequest * request, const gchar * uri,
gint64 range_start, gint64 range_end) gint64 range_start, gint64 range_end)

View file

@ -68,6 +68,7 @@ struct _DownloadRequest
guint64 download_request_time; /* Epoch time when the download started */ guint64 download_request_time; /* Epoch time when the download started */
guint64 download_start_time; /* Epoch time when the first data for the download arrived */ guint64 download_start_time; /* Epoch time when the first data for the download arrived */
guint64 download_newest_data_time; /* Epoch time when the most recent data for the download arrived */
guint64 download_end_time; /* Epoch time when the download finished */ guint64 download_end_time; /* Epoch time when the download finished */
}; };
@ -87,6 +88,7 @@ void download_request_add_buffer (DownloadRequest *request, GstBuffer *buffer);
GstBuffer * download_request_take_buffer (DownloadRequest *request); GstBuffer * download_request_take_buffer (DownloadRequest *request);
GstBuffer * download_request_take_buffer_range (DownloadRequest *request, gint64 range_start, gint64 range_end); GstBuffer * download_request_take_buffer_range (DownloadRequest *request, gint64 range_start, gint64 range_end);
guint64 download_request_get_bytes_available (DownloadRequest *request); guint64 download_request_get_bytes_available (DownloadRequest *request);
guint64 download_request_get_cur_offset (DownloadRequest *request);
DownloadRequest * download_request_new (void); DownloadRequest * download_request_new (void);
DownloadRequest * download_request_new_uri (const gchar * uri); DownloadRequest * download_request_new_uri (const gchar * uri);