mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
ext/ogg/gstoggmux.c: Fix interrupt event handling (#144436).
Original commit message from CVS: * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer), (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop): Fix interrupt event handling (#144436).
This commit is contained in:
parent
d27b3ec02f
commit
67fb4efc00
2 changed files with 24 additions and 7 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
||||||
|
|
||||||
|
* ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
|
||||||
|
(gst_ogg_mux_queue_pads), (gst_ogg_mux_loop):
|
||||||
|
Fix interrupt event handling (#144436).
|
||||||
|
|
||||||
2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
||||||
|
|
||||||
* ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind):
|
* ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind):
|
||||||
|
|
|
@ -409,7 +409,7 @@ gst_ogg_mux_handle_src_event (GstPad * pad, GstEvent * event)
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstBuffer *
|
static GstBuffer *
|
||||||
gst_ogg_mux_next_buffer (GstOggPad * pad)
|
gst_ogg_mux_next_buffer (GstOggPad * pad, gboolean * interrupt)
|
||||||
{
|
{
|
||||||
GstData *data = NULL;
|
GstData *data = NULL;
|
||||||
|
|
||||||
|
@ -430,6 +430,9 @@ gst_ogg_mux_next_buffer (GstOggPad * pad)
|
||||||
pad->eos = TRUE;
|
pad->eos = TRUE;
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
case GST_EVENT_INTERRUPT:
|
||||||
|
*interrupt = TRUE;
|
||||||
|
return NULL;
|
||||||
case GST_EVENT_DISCONTINUOUS:
|
case GST_EVENT_DISCONTINUOUS:
|
||||||
{
|
{
|
||||||
guint64 value;
|
guint64 value;
|
||||||
|
@ -560,7 +563,7 @@ gst_ogg_mux_compare_pads (GstOggMux * ogg_mux, GstOggPad * old, GstOggPad * new)
|
||||||
/* make sure a buffer is queued on all pads, returns a pointer to an oggpad
|
/* make sure a buffer is queued on all pads, returns a pointer to an oggpad
|
||||||
* that holds the best buffer or NULL when no pad was usable */
|
* that holds the best buffer or NULL when no pad was usable */
|
||||||
static GstOggPad *
|
static GstOggPad *
|
||||||
gst_ogg_mux_queue_pads (GstOggMux * ogg_mux)
|
gst_ogg_mux_queue_pads (GstOggMux * ogg_mux, gboolean * interrupt)
|
||||||
{
|
{
|
||||||
GstOggPad *bestpad = NULL;
|
GstOggPad *bestpad = NULL;
|
||||||
GSList *walk;
|
GSList *walk;
|
||||||
|
@ -577,7 +580,9 @@ gst_ogg_mux_queue_pads (GstOggMux * ogg_mux)
|
||||||
|
|
||||||
/* try to get a new buffer for this pad if needed and possible */
|
/* try to get a new buffer for this pad if needed and possible */
|
||||||
if (pad->buffer == NULL && GST_PAD_IS_USABLE (pad->pad)) {
|
if (pad->buffer == NULL && GST_PAD_IS_USABLE (pad->pad)) {
|
||||||
pad->buffer = gst_ogg_mux_next_buffer (pad);
|
pad->buffer = gst_ogg_mux_next_buffer (pad, interrupt);
|
||||||
|
if (*interrupt)
|
||||||
|
return NULL;
|
||||||
/* no next buffer, try another pad */
|
/* no next buffer, try another pad */
|
||||||
if (pad->buffer == NULL)
|
if (pad->buffer == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
@ -850,11 +855,13 @@ gst_ogg_mux_loop (GstElement * element)
|
||||||
GstOggMux *ogg_mux;
|
GstOggMux *ogg_mux;
|
||||||
GstOggPad *best;
|
GstOggPad *best;
|
||||||
gboolean delta_unit;
|
gboolean delta_unit;
|
||||||
|
gboolean interrupt = FALSE;
|
||||||
|
|
||||||
ogg_mux = GST_OGG_MUX (element);
|
ogg_mux = GST_OGG_MUX (element);
|
||||||
|
|
||||||
best = gst_ogg_mux_queue_pads (ogg_mux);
|
best = gst_ogg_mux_queue_pads (ogg_mux, &interrupt);
|
||||||
|
if (interrupt)
|
||||||
|
return;
|
||||||
|
|
||||||
/* we're pulling a pad and there is a better one, see if we need
|
/* we're pulling a pad and there is a better one, see if we need
|
||||||
* to flush the current page */
|
* to flush the current page */
|
||||||
|
@ -916,7 +923,9 @@ gst_ogg_mux_loop (GstElement * element)
|
||||||
buf = pad->buffer;
|
buf = pad->buffer;
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
/* no buffer, get one, and store in the pad so we free it later on */
|
/* no buffer, get one, and store in the pad so we free it later on */
|
||||||
buf = pad->buffer = gst_ogg_mux_next_buffer (pad);
|
buf = pad->buffer = gst_ogg_mux_next_buffer (pad, &interrupt);
|
||||||
|
if (interrupt)
|
||||||
|
return;
|
||||||
/* data exhausted on this pad (EOS) */
|
/* data exhausted on this pad (EOS) */
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
/* stop pulling from the pad */
|
/* stop pulling from the pad */
|
||||||
|
@ -939,7 +948,9 @@ gst_ogg_mux_loop (GstElement * element)
|
||||||
packet.packetno = pad->packetno++;
|
packet.packetno = pad->packetno++;
|
||||||
|
|
||||||
/* read ahead one more buffer to find EOS */
|
/* read ahead one more buffer to find EOS */
|
||||||
tmpbuf = gst_ogg_mux_next_buffer (pad);
|
tmpbuf = gst_ogg_mux_next_buffer (pad, &interrupt);
|
||||||
|
if (interrupt)
|
||||||
|
return;
|
||||||
/* data exhausted on this pad */
|
/* data exhausted on this pad */
|
||||||
if (tmpbuf == NULL) {
|
if (tmpbuf == NULL) {
|
||||||
/* stop pulling from the pad */
|
/* stop pulling from the pad */
|
||||||
|
|
Loading…
Reference in a new issue