mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 23:18:52 +00:00
1 Handle events.
Original commit message from CVS: 1 Handle events. 2 Add gst_bytestream_flush_fast.
This commit is contained in:
parent
66b48557b7
commit
c8a65ed978
2 changed files with 48 additions and 7 deletions
|
@ -120,9 +120,37 @@ gst_bytestream_get_next_buf (GstByteStream * bs)
|
||||||
bs_print ("get_next_buf: pulling buffer\n");
|
bs_print ("get_next_buf: pulling buffer\n");
|
||||||
nextbuf = gst_pad_pull (bs->pad);
|
nextbuf = gst_pad_pull (bs->pad);
|
||||||
|
|
||||||
|
// g_assert (nextbuf); ??
|
||||||
if (!nextbuf)
|
if (!nextbuf)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
if (GST_IS_EVENT (nextbuf)) {
|
||||||
|
GstEvent *ev = GST_EVENT (nextbuf);
|
||||||
|
gint ret=0;
|
||||||
|
gboolean result = FALSE;
|
||||||
|
|
||||||
|
switch (ev->type) {
|
||||||
|
case GST_EVENT_EOS:
|
||||||
|
// do something
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GST_EVENT_DISCONTINUOUS:
|
||||||
|
gst_bytestream_flush_fast (bs, bs->listavail);
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
g_warning ("Ignoring unknown event %d", ev->type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_event_free (ev);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bs_print ("get_next_buf: got buffer of %d bytes\n", GST_BUFFER_SIZE (nextbuf));
|
bs_print ("get_next_buf: got buffer of %d bytes\n", GST_BUFFER_SIZE (nextbuf));
|
||||||
|
|
||||||
// first see if there are any buffers in the list at all
|
// first see if there are any buffers in the list at all
|
||||||
|
@ -315,19 +343,32 @@ gst_bytestream_assemble (GstByteStream * bs, guint32 len)
|
||||||
gboolean
|
gboolean
|
||||||
gst_bytestream_flush (GstByteStream * bs, guint32 len)
|
gst_bytestream_flush (GstByteStream * bs, guint32 len)
|
||||||
{
|
{
|
||||||
GstBuffer *headbuf;
|
|
||||||
|
|
||||||
bs_print ("flush: flushing %d bytes\n", len);
|
bs_print ("flush: flushing %d bytes\n", len);
|
||||||
|
|
||||||
// make sure we have enough
|
// make sure we have enough
|
||||||
bs_print ("flush: there are %d bytes in the list\n", bs->listavail);
|
bs_print ("flush: there are %d bytes in the list\n", bs->listavail);
|
||||||
if (len > bs->listavail) {
|
if (len > bs->listavail) {
|
||||||
if (!gst_bytestream_fill_bytes (bs, len))
|
if (!gst_bytestream_fill_bytes (bs, len))
|
||||||
return FALSE;
|
{
|
||||||
|
gst_bytestream_flush_fast (bs, bs->listavail);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
bs_print ("flush: there are now %d bytes in the list\n", bs->listavail);
|
bs_print ("flush: there are now %d bytes in the list\n", bs->listavail);
|
||||||
}
|
}
|
||||||
|
|
||||||
// repeat until we've flushed enough data
|
gst_bytestream_flush_fast (bs, len);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_bytestream_flush_fast (GstByteStream * bs, guint32 len)
|
||||||
|
{
|
||||||
|
GstBuffer *headbuf;
|
||||||
|
|
||||||
|
g_return_if_fail (bs);
|
||||||
|
g_assert (len <= bs->listavail);
|
||||||
|
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
headbuf = GST_BUFFER (bs->buflist->data);
|
headbuf = GST_BUFFER (bs->buflist->data);
|
||||||
|
|
||||||
|
@ -367,15 +408,14 @@ gst_bytestream_flush (GstByteStream * bs, guint32 len)
|
||||||
|
|
||||||
bs_print ("flush: bottom of while(), len is now %d\n", len);
|
bs_print ("flush: bottom of while(), len is now %d\n", len);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GstBuffer *
|
GstBuffer *
|
||||||
gst_bytestream_read_loc (GST_WHERE_ARGS_ GstByteStream * bs, guint32 len)
|
gst_bytestream_read_loc (GST_WHERE_ARGS_ GstByteStream * bs, guint32 len)
|
||||||
{
|
{
|
||||||
GstBuffer *buf = gst_bytestream_peek_loc (GST_WHERE_VARS_ bs, len);
|
GstBuffer *buf = gst_bytestream_peek_loc (GST_WHERE_VARS_ bs, len);
|
||||||
gst_bytestream_flush (bs, len);
|
if (buf)
|
||||||
|
gst_bytestream_flush_fast (bs, len);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ GstBuffer* gst_bytestream_read_loc (GST_WHERE_ARGS_ GstByteStream *bs, guint32
|
||||||
GstBuffer* gst_bytestream_peek_loc (GST_WHERE_ARGS_ GstByteStream *bs, guint32 len);
|
GstBuffer* gst_bytestream_peek_loc (GST_WHERE_ARGS_ GstByteStream *bs, guint32 len);
|
||||||
guint8* gst_bytestream_peek_bytes (GstByteStream *bs, guint32 len);
|
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_print_status (GstByteStream *bs);
|
void gst_bytestream_print_status (GstByteStream *bs);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue