mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-04 22:48:49 +00:00
Added gst_bytestream_get_timestamp() call to get timestamp of data at the front of the stream. If no data in stream,...
Original commit message from CVS: Added gst_bytestream_get_timestamp() call to get timestamp of data at the front of the stream. If no data in stream, loads 1 byte to get a new buffer and uses its timestamp. Does nothing to handle readers that try to read data lengths that span buffers with multiple timestamps. _get_timestamp() now used when creating new buffers.
This commit is contained in:
parent
01f172bedc
commit
321f046aaf
2 changed files with 35 additions and 0 deletions
|
@ -236,6 +236,7 @@ gst_bytestream_peek (GstByteStream * bs, guint32 len)
|
||||||
retbuf = gst_buffer_new ();
|
retbuf = gst_buffer_new ();
|
||||||
GST_BUFFER_SIZE (retbuf) = len;
|
GST_BUFFER_SIZE (retbuf) = len;
|
||||||
GST_BUFFER_DATA (retbuf) = gst_bytestream_assemble (bs, len);
|
GST_BUFFER_DATA (retbuf) = gst_bytestream_assemble (bs, len);
|
||||||
|
GST_BUFFER_TIMESTAMP (retbuf) = gst_bytestream_get_timestamp (bs);
|
||||||
if (GST_BUFFER_OFFSET (headbuf) != -1)
|
if (GST_BUFFER_OFFSET (headbuf) != -1)
|
||||||
GST_BUFFER_OFFSET (retbuf) = GST_BUFFER_OFFSET (headbuf) + (GST_BUFFER_SIZE (headbuf) - bs->headbufavail);
|
GST_BUFFER_OFFSET (retbuf) = GST_BUFFER_OFFSET (headbuf) + (GST_BUFFER_SIZE (headbuf) - bs->headbufavail);
|
||||||
}
|
}
|
||||||
|
@ -465,6 +466,39 @@ gst_bytestream_get_status (GstByteStream *bs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_bytestream_get_timestamp
|
||||||
|
* @bs: a bytestream
|
||||||
|
*
|
||||||
|
* Get the timestamp of the first data in the bytestream. If no data
|
||||||
|
* exists 1 byte is read to load a new buffer.
|
||||||
|
*
|
||||||
|
* This function will not check input buffer boundries. It is possible
|
||||||
|
* the next read could span two or more input buffers with different
|
||||||
|
* timestamps.
|
||||||
|
*/
|
||||||
|
guint64
|
||||||
|
gst_bytestream_get_timestamp (GstByteStream *bs)
|
||||||
|
{
|
||||||
|
GstBuffer *headbuf;
|
||||||
|
|
||||||
|
g_return_val_if_fail (bs != NULL, 0);
|
||||||
|
|
||||||
|
bs_print ("get_timestamp: asking for %d bytes\n", len);
|
||||||
|
|
||||||
|
/* make sure we have a buffer */
|
||||||
|
if (bs->listavail == 0) {
|
||||||
|
bs_print ("gst_timestamp: fetching a buffer\n");
|
||||||
|
if (!gst_bytestream_fill_bytes (bs, 1))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* extract the head buffer */
|
||||||
|
headbuf = GST_BUFFER (bs->buflist->data);
|
||||||
|
|
||||||
|
return GST_BUFFER_TIMESTAMP (headbuf);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_bytestream_print_status (GstByteStream * bs)
|
gst_bytestream_print_status (GstByteStream * bs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,6 +53,7 @@ guint8* gst_bytestream_peek_bytes (GstByteStream *bs, guint32 len);
|
||||||
gboolean gst_bytestream_flush (GstByteStream *bs, guint32 len);
|
gboolean gst_bytestream_flush (GstByteStream *bs, guint32 len);
|
||||||
void gst_bytestream_flush_fast (GstByteStream *bs, guint32 len);
|
void gst_bytestream_flush_fast (GstByteStream *bs, guint32 len);
|
||||||
void gst_bytestream_get_status (GstByteStream *bs, guint32 *avail_out, GstEvent **event_out);
|
void gst_bytestream_get_status (GstByteStream *bs, guint32 *avail_out, GstEvent **event_out);
|
||||||
|
guint64 gst_bytestream_get_timestamp (GstByteStream *bs);
|
||||||
|
|
||||||
void gst_bytestream_print_status (GstByteStream *bs);
|
void gst_bytestream_print_status (GstByteStream *bs);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue