mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-29 15:22:17 +00:00
object debugging is good
Original commit message from CVS: object debugging is good
This commit is contained in:
parent
6ed5bee3b0
commit
ffd3d7b3c7
2 changed files with 62 additions and 54 deletions
|
@ -357,7 +357,7 @@ gst_base_sink_preroll_queue_empty (GstBaseSink * basesink, GstPad * pad)
|
||||||
ret = GST_FLOW_OK;
|
ret = GST_FLOW_OK;
|
||||||
|
|
||||||
if (q) {
|
if (q) {
|
||||||
GST_DEBUG ("emptying queue");
|
GST_DEBUG_OBJECT (basesink, "emptying queue");
|
||||||
while ((obj = g_queue_pop_head (q))) {
|
while ((obj = g_queue_pop_head (q))) {
|
||||||
gboolean is_buffer;
|
gboolean is_buffer;
|
||||||
|
|
||||||
|
@ -381,17 +381,17 @@ gst_base_sink_preroll_queue_empty (GstBaseSink * basesink, GstPad * pad)
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
|
|
||||||
if (is_buffer) {
|
if (is_buffer) {
|
||||||
GST_DEBUG ("popped buffer %p", obj);
|
GST_DEBUG_OBJECT (basesink, "popped buffer %p", obj);
|
||||||
ret = gst_base_sink_handle_buffer (basesink, GST_BUFFER (obj));
|
ret = gst_base_sink_handle_buffer (basesink, GST_BUFFER (obj));
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG ("popped event %p", obj);
|
GST_DEBUG_OBJECT (basesink, "popped event %p", obj);
|
||||||
gst_base_sink_handle_event (basesink, GST_EVENT (obj));
|
gst_base_sink_handle_event (basesink, GST_EVENT (obj));
|
||||||
ret = GST_FLOW_OK;
|
ret = GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_PREROLL_LOCK (pad);
|
GST_PREROLL_LOCK (pad);
|
||||||
}
|
}
|
||||||
GST_DEBUG ("queue empty");
|
GST_DEBUG_OBJECT (basesink, "queue empty");
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -403,10 +403,10 @@ gst_base_sink_preroll_queue_flush (GstBaseSink * basesink, GstPad * pad)
|
||||||
GstMiniObject *obj;
|
GstMiniObject *obj;
|
||||||
GQueue *q = basesink->preroll_queue;
|
GQueue *q = basesink->preroll_queue;
|
||||||
|
|
||||||
GST_DEBUG ("flushing queue %p", basesink);
|
GST_DEBUG_OBJECT (basesink, "flushing queue %p", basesink);
|
||||||
if (q) {
|
if (q) {
|
||||||
while ((obj = g_queue_pop_head (q))) {
|
while ((obj = g_queue_pop_head (q))) {
|
||||||
GST_DEBUG ("popped %p", obj);
|
GST_DEBUG_OBJECT (basesink, "popped %p", obj);
|
||||||
gst_mini_object_unref (obj);
|
gst_mini_object_unref (obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -538,7 +538,8 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
if (GST_CLOCK_TIME_IS_VALID (end) &&
|
if (GST_CLOCK_TIME_IS_VALID (end) &&
|
||||||
GST_CLOCK_TIME_IS_VALID (basesink->segment_start)) {
|
GST_CLOCK_TIME_IS_VALID (basesink->segment_start)) {
|
||||||
if (end <= basesink->segment_start) {
|
if (end <= basesink->segment_start) {
|
||||||
GST_DEBUG ("buffer end %" GST_TIME_FORMAT " <= segment start %"
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"buffer end %" GST_TIME_FORMAT " <= segment start %"
|
||||||
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (end),
|
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (end),
|
||||||
GST_TIME_ARGS (basesink->segment_start));
|
GST_TIME_ARGS (basesink->segment_start));
|
||||||
goto dropping;
|
goto dropping;
|
||||||
|
@ -547,7 +548,8 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
if (GST_CLOCK_TIME_IS_VALID (start) &&
|
if (GST_CLOCK_TIME_IS_VALID (start) &&
|
||||||
GST_CLOCK_TIME_IS_VALID (basesink->segment_stop)) {
|
GST_CLOCK_TIME_IS_VALID (basesink->segment_stop)) {
|
||||||
if (basesink->segment_stop <= start) {
|
if (basesink->segment_stop <= start) {
|
||||||
GST_DEBUG ("buffer start %" GST_TIME_FORMAT " >= segment stop %"
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"buffer start %" GST_TIME_FORMAT " >= segment stop %"
|
||||||
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (start),
|
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (start),
|
||||||
GST_TIME_ARGS (basesink->segment_stop));
|
GST_TIME_ARGS (basesink->segment_stop));
|
||||||
goto dropping;
|
goto dropping;
|
||||||
|
@ -557,7 +559,8 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
basesink->preroll_queued++;
|
basesink->preroll_queued++;
|
||||||
basesink->buffers_queued++;
|
basesink->buffers_queued++;
|
||||||
}
|
}
|
||||||
GST_DEBUG ("now %d preroll, %d buffers, %d events on queue",
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"now %d preroll, %d buffers, %d events on queue",
|
||||||
basesink->preroll_queued,
|
basesink->preroll_queued,
|
||||||
basesink->buffers_queued, basesink->events_queued);
|
basesink->buffers_queued, basesink->events_queued);
|
||||||
|
|
||||||
|
@ -570,7 +573,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
|
|
||||||
/* there is a buffer queued */
|
/* there is a buffer queued */
|
||||||
if (basesink->buffers_queued == 1) {
|
if (basesink->buffers_queued == 1) {
|
||||||
GST_DEBUG ("do preroll %p", obj);
|
GST_DEBUG_OBJECT (basesink, "do preroll %p", obj);
|
||||||
|
|
||||||
/* if it's a buffer, we need to call the preroll method */
|
/* if it's a buffer, we need to call the preroll method */
|
||||||
if (GST_IS_BUFFER (obj)) {
|
if (GST_IS_BUFFER (obj)) {
|
||||||
|
@ -585,7 +588,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
length = basesink->preroll_queued;
|
length = basesink->preroll_queued;
|
||||||
GST_DEBUG ("prerolled length %d", length);
|
GST_DEBUG_OBJECT (basesink, "prerolled length %d", length);
|
||||||
|
|
||||||
if (length == 1) {
|
if (length == 1) {
|
||||||
gint t;
|
gint t;
|
||||||
|
@ -597,7 +600,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
||||||
* inside the STREAM_LOCK */
|
* inside the STREAM_LOCK */
|
||||||
t = GST_STREAM_UNLOCK_FULL (pad);
|
t = GST_STREAM_UNLOCK_FULL (pad);
|
||||||
GST_DEBUG ("released stream lock %d times", t);
|
GST_DEBUG_OBJECT (basesink, "released stream lock %d times", t);
|
||||||
if (t <= 0) {
|
if (t <= 0) {
|
||||||
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
||||||
g_warning ("STREAM_LOCK should have been locked !!");
|
g_warning ("STREAM_LOCK should have been locked !!");
|
||||||
|
@ -654,7 +657,7 @@ no_preroll:
|
||||||
{
|
{
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
|
||||||
GST_DEBUG ("no preroll needed");
|
GST_DEBUG_OBJECT (basesink, "no preroll needed");
|
||||||
/* maybe it was another sink that blocked in preroll, need to check for
|
/* maybe it was another sink that blocked in preroll, need to check for
|
||||||
buffers to drain */
|
buffers to drain */
|
||||||
basesink->have_preroll = FALSE;
|
basesink->have_preroll = FALSE;
|
||||||
|
@ -688,7 +691,7 @@ playing_async:
|
||||||
/* unroll locks, commit state, reacquire stream lock */
|
/* unroll locks, commit state, reacquire stream lock */
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
t = GST_STREAM_UNLOCK_FULL (pad);
|
t = GST_STREAM_UNLOCK_FULL (pad);
|
||||||
GST_DEBUG ("released stream lock %d times", t);
|
GST_DEBUG_OBJECT (basesink, "released stream lock %d times", t);
|
||||||
if (t <= 0) {
|
if (t <= 0) {
|
||||||
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
||||||
g_warning ("STREAM_LOCK should have been locked !!");
|
g_warning ("STREAM_LOCK should have been locked !!");
|
||||||
|
@ -707,21 +710,21 @@ flushing:
|
||||||
GST_UNLOCK (pad);
|
GST_UNLOCK (pad);
|
||||||
gst_base_sink_preroll_queue_flush (basesink, pad);
|
gst_base_sink_preroll_queue_flush (basesink, pad);
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
GST_DEBUG ("pad is flushing");
|
GST_DEBUG_OBJECT (basesink, "pad is flushing");
|
||||||
return GST_FLOW_WRONG_STATE;
|
return GST_FLOW_WRONG_STATE;
|
||||||
}
|
}
|
||||||
preroll_failed:
|
preroll_failed:
|
||||||
{
|
{
|
||||||
gint t;
|
gint t;
|
||||||
|
|
||||||
GST_DEBUG ("preroll failed");
|
GST_DEBUG_OBJECT (basesink, "preroll failed");
|
||||||
gst_base_sink_preroll_queue_flush (basesink, pad);
|
gst_base_sink_preroll_queue_flush (basesink, pad);
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
|
|
||||||
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
||||||
* inside the STREAM_LOCK */
|
* inside the STREAM_LOCK */
|
||||||
t = GST_STREAM_UNLOCK_FULL (pad);
|
t = GST_STREAM_UNLOCK_FULL (pad);
|
||||||
GST_DEBUG ("released stream lock %d times", t);
|
GST_DEBUG_OBJECT (basesink, "released stream lock %d times", t);
|
||||||
if (t <= 0) {
|
if (t <= 0) {
|
||||||
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
||||||
g_warning ("STREAM_LOCK should have been locked !!");
|
g_warning ("STREAM_LOCK should have been locked !!");
|
||||||
|
@ -752,7 +755,7 @@ gst_base_sink_event (GstPad * pad, GstEvent * event)
|
||||||
|
|
||||||
bclass = GST_BASE_SINK_GET_CLASS (basesink);
|
bclass = GST_BASE_SINK_GET_CLASS (basesink);
|
||||||
|
|
||||||
GST_DEBUG ("event %p", event);
|
GST_DEBUG_OBJECT (basesink, "event %p", event);
|
||||||
|
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_EOS:
|
case GST_EVENT_EOS:
|
||||||
|
@ -802,7 +805,7 @@ gst_base_sink_event (GstPad * pad, GstEvent * event)
|
||||||
gst_element_lost_state (GST_ELEMENT (basesink));
|
gst_element_lost_state (GST_ELEMENT (basesink));
|
||||||
GST_STREAM_UNLOCK (pad);
|
GST_STREAM_UNLOCK (pad);
|
||||||
GST_STATE_UNLOCK (basesink);
|
GST_STATE_UNLOCK (basesink);
|
||||||
GST_DEBUG ("event unref %p %p", basesink, event);
|
GST_DEBUG_OBJECT (basesink, "event unref %p %p", basesink, event);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
break;
|
break;
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
|
@ -817,12 +820,12 @@ gst_base_sink_event (GstPad * pad, GstEvent * event)
|
||||||
basesink->segment_stop = -1;
|
basesink->segment_stop = -1;
|
||||||
basesink->current_start = -1;
|
basesink->current_start = -1;
|
||||||
basesink->current_end = -1;
|
basesink->current_end = -1;
|
||||||
GST_DEBUG ("reset accum %" GST_TIME_FORMAT,
|
GST_DEBUG_OBJECT (basesink, "reset accum %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (basesink->segment_accum));
|
GST_TIME_ARGS (basesink->segment_accum));
|
||||||
basesink->segment_accum = 0;
|
basesink->segment_accum = 0;
|
||||||
GST_STREAM_UNLOCK (pad);
|
GST_STREAM_UNLOCK (pad);
|
||||||
|
|
||||||
GST_DEBUG ("event unref %p %p", basesink, event);
|
GST_DEBUG_OBJECT (basesink, "event unref %p %p", basesink, event);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1027,7 +1030,7 @@ gst_base_sink_handle_event (GstBaseSink * basesink, GstEvent * event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG ("event unref %p %p", basesink, event);
|
GST_DEBUG_OBJECT (basesink, "event unref %p %p", basesink, event);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1055,7 +1058,7 @@ gst_base_sink_handle_buffer (GstBaseSink * basesink, GstBuffer * buf)
|
||||||
ret = bclass->render (basesink, buf);
|
ret = bclass->render (basesink, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG ("buffer unref after render %p", basesink, buf);
|
GST_DEBUG_OBJECT (basesink, "buffer unref after render %p", basesink, buf);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1361,8 +1364,8 @@ gst_base_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
|
|
||||||
/* if we don't have a preroll buffer and we have not received EOS,
|
/* if we don't have a preroll buffer and we have not received EOS,
|
||||||
* we need to wait for a preroll */
|
* we need to wait for a preroll */
|
||||||
GST_DEBUG ("have_preroll: %d, EOS: %d", basesink->have_preroll,
|
GST_DEBUG_OBJECT (basesink, "have_preroll: %d, EOS: %d",
|
||||||
basesink->eos);
|
basesink->have_preroll, basesink->eos);
|
||||||
if (!basesink->have_preroll && !basesink->eos) {
|
if (!basesink->have_preroll && !basesink->eos) {
|
||||||
basesink->need_preroll = TRUE;
|
basesink->need_preroll = TRUE;
|
||||||
ret = GST_STATE_CHANGE_ASYNC;
|
ret = GST_STATE_CHANGE_ASYNC;
|
||||||
|
@ -1387,12 +1390,13 @@ gst_base_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
start_failed:
|
start_failed:
|
||||||
{
|
{
|
||||||
GST_DEBUG ("failed to start");
|
GST_DEBUG_OBJECT (basesink, "failed to start");
|
||||||
return GST_STATE_CHANGE_FAILURE;
|
return GST_STATE_CHANGE_FAILURE;
|
||||||
}
|
}
|
||||||
activate_failed:
|
activate_failed:
|
||||||
{
|
{
|
||||||
GST_DEBUG ("element failed to change states -- activation problem?");
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"element failed to change states -- activation problem?");
|
||||||
return GST_STATE_CHANGE_FAILURE;
|
return GST_STATE_CHANGE_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -357,7 +357,7 @@ gst_base_sink_preroll_queue_empty (GstBaseSink * basesink, GstPad * pad)
|
||||||
ret = GST_FLOW_OK;
|
ret = GST_FLOW_OK;
|
||||||
|
|
||||||
if (q) {
|
if (q) {
|
||||||
GST_DEBUG ("emptying queue");
|
GST_DEBUG_OBJECT (basesink, "emptying queue");
|
||||||
while ((obj = g_queue_pop_head (q))) {
|
while ((obj = g_queue_pop_head (q))) {
|
||||||
gboolean is_buffer;
|
gboolean is_buffer;
|
||||||
|
|
||||||
|
@ -381,17 +381,17 @@ gst_base_sink_preroll_queue_empty (GstBaseSink * basesink, GstPad * pad)
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
|
|
||||||
if (is_buffer) {
|
if (is_buffer) {
|
||||||
GST_DEBUG ("popped buffer %p", obj);
|
GST_DEBUG_OBJECT (basesink, "popped buffer %p", obj);
|
||||||
ret = gst_base_sink_handle_buffer (basesink, GST_BUFFER (obj));
|
ret = gst_base_sink_handle_buffer (basesink, GST_BUFFER (obj));
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG ("popped event %p", obj);
|
GST_DEBUG_OBJECT (basesink, "popped event %p", obj);
|
||||||
gst_base_sink_handle_event (basesink, GST_EVENT (obj));
|
gst_base_sink_handle_event (basesink, GST_EVENT (obj));
|
||||||
ret = GST_FLOW_OK;
|
ret = GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_PREROLL_LOCK (pad);
|
GST_PREROLL_LOCK (pad);
|
||||||
}
|
}
|
||||||
GST_DEBUG ("queue empty");
|
GST_DEBUG_OBJECT (basesink, "queue empty");
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -403,10 +403,10 @@ gst_base_sink_preroll_queue_flush (GstBaseSink * basesink, GstPad * pad)
|
||||||
GstMiniObject *obj;
|
GstMiniObject *obj;
|
||||||
GQueue *q = basesink->preroll_queue;
|
GQueue *q = basesink->preroll_queue;
|
||||||
|
|
||||||
GST_DEBUG ("flushing queue %p", basesink);
|
GST_DEBUG_OBJECT (basesink, "flushing queue %p", basesink);
|
||||||
if (q) {
|
if (q) {
|
||||||
while ((obj = g_queue_pop_head (q))) {
|
while ((obj = g_queue_pop_head (q))) {
|
||||||
GST_DEBUG ("popped %p", obj);
|
GST_DEBUG_OBJECT (basesink, "popped %p", obj);
|
||||||
gst_mini_object_unref (obj);
|
gst_mini_object_unref (obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -538,7 +538,8 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
if (GST_CLOCK_TIME_IS_VALID (end) &&
|
if (GST_CLOCK_TIME_IS_VALID (end) &&
|
||||||
GST_CLOCK_TIME_IS_VALID (basesink->segment_start)) {
|
GST_CLOCK_TIME_IS_VALID (basesink->segment_start)) {
|
||||||
if (end <= basesink->segment_start) {
|
if (end <= basesink->segment_start) {
|
||||||
GST_DEBUG ("buffer end %" GST_TIME_FORMAT " <= segment start %"
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"buffer end %" GST_TIME_FORMAT " <= segment start %"
|
||||||
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (end),
|
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (end),
|
||||||
GST_TIME_ARGS (basesink->segment_start));
|
GST_TIME_ARGS (basesink->segment_start));
|
||||||
goto dropping;
|
goto dropping;
|
||||||
|
@ -547,7 +548,8 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
if (GST_CLOCK_TIME_IS_VALID (start) &&
|
if (GST_CLOCK_TIME_IS_VALID (start) &&
|
||||||
GST_CLOCK_TIME_IS_VALID (basesink->segment_stop)) {
|
GST_CLOCK_TIME_IS_VALID (basesink->segment_stop)) {
|
||||||
if (basesink->segment_stop <= start) {
|
if (basesink->segment_stop <= start) {
|
||||||
GST_DEBUG ("buffer start %" GST_TIME_FORMAT " >= segment stop %"
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"buffer start %" GST_TIME_FORMAT " >= segment stop %"
|
||||||
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (start),
|
GST_TIME_FORMAT ", dropping buffer", GST_TIME_ARGS (start),
|
||||||
GST_TIME_ARGS (basesink->segment_stop));
|
GST_TIME_ARGS (basesink->segment_stop));
|
||||||
goto dropping;
|
goto dropping;
|
||||||
|
@ -557,7 +559,8 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
basesink->preroll_queued++;
|
basesink->preroll_queued++;
|
||||||
basesink->buffers_queued++;
|
basesink->buffers_queued++;
|
||||||
}
|
}
|
||||||
GST_DEBUG ("now %d preroll, %d buffers, %d events on queue",
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"now %d preroll, %d buffers, %d events on queue",
|
||||||
basesink->preroll_queued,
|
basesink->preroll_queued,
|
||||||
basesink->buffers_queued, basesink->events_queued);
|
basesink->buffers_queued, basesink->events_queued);
|
||||||
|
|
||||||
|
@ -570,7 +573,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
|
|
||||||
/* there is a buffer queued */
|
/* there is a buffer queued */
|
||||||
if (basesink->buffers_queued == 1) {
|
if (basesink->buffers_queued == 1) {
|
||||||
GST_DEBUG ("do preroll %p", obj);
|
GST_DEBUG_OBJECT (basesink, "do preroll %p", obj);
|
||||||
|
|
||||||
/* if it's a buffer, we need to call the preroll method */
|
/* if it's a buffer, we need to call the preroll method */
|
||||||
if (GST_IS_BUFFER (obj)) {
|
if (GST_IS_BUFFER (obj)) {
|
||||||
|
@ -585,7 +588,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
length = basesink->preroll_queued;
|
length = basesink->preroll_queued;
|
||||||
GST_DEBUG ("prerolled length %d", length);
|
GST_DEBUG_OBJECT (basesink, "prerolled length %d", length);
|
||||||
|
|
||||||
if (length == 1) {
|
if (length == 1) {
|
||||||
gint t;
|
gint t;
|
||||||
|
@ -597,7 +600,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad,
|
||||||
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
||||||
* inside the STREAM_LOCK */
|
* inside the STREAM_LOCK */
|
||||||
t = GST_STREAM_UNLOCK_FULL (pad);
|
t = GST_STREAM_UNLOCK_FULL (pad);
|
||||||
GST_DEBUG ("released stream lock %d times", t);
|
GST_DEBUG_OBJECT (basesink, "released stream lock %d times", t);
|
||||||
if (t <= 0) {
|
if (t <= 0) {
|
||||||
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
||||||
g_warning ("STREAM_LOCK should have been locked !!");
|
g_warning ("STREAM_LOCK should have been locked !!");
|
||||||
|
@ -654,7 +657,7 @@ no_preroll:
|
||||||
{
|
{
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
|
||||||
GST_DEBUG ("no preroll needed");
|
GST_DEBUG_OBJECT (basesink, "no preroll needed");
|
||||||
/* maybe it was another sink that blocked in preroll, need to check for
|
/* maybe it was another sink that blocked in preroll, need to check for
|
||||||
buffers to drain */
|
buffers to drain */
|
||||||
basesink->have_preroll = FALSE;
|
basesink->have_preroll = FALSE;
|
||||||
|
@ -688,7 +691,7 @@ playing_async:
|
||||||
/* unroll locks, commit state, reacquire stream lock */
|
/* unroll locks, commit state, reacquire stream lock */
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
t = GST_STREAM_UNLOCK_FULL (pad);
|
t = GST_STREAM_UNLOCK_FULL (pad);
|
||||||
GST_DEBUG ("released stream lock %d times", t);
|
GST_DEBUG_OBJECT (basesink, "released stream lock %d times", t);
|
||||||
if (t <= 0) {
|
if (t <= 0) {
|
||||||
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
||||||
g_warning ("STREAM_LOCK should have been locked !!");
|
g_warning ("STREAM_LOCK should have been locked !!");
|
||||||
|
@ -707,21 +710,21 @@ flushing:
|
||||||
GST_UNLOCK (pad);
|
GST_UNLOCK (pad);
|
||||||
gst_base_sink_preroll_queue_flush (basesink, pad);
|
gst_base_sink_preroll_queue_flush (basesink, pad);
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
GST_DEBUG ("pad is flushing");
|
GST_DEBUG_OBJECT (basesink, "pad is flushing");
|
||||||
return GST_FLOW_WRONG_STATE;
|
return GST_FLOW_WRONG_STATE;
|
||||||
}
|
}
|
||||||
preroll_failed:
|
preroll_failed:
|
||||||
{
|
{
|
||||||
gint t;
|
gint t;
|
||||||
|
|
||||||
GST_DEBUG ("preroll failed");
|
GST_DEBUG_OBJECT (basesink, "preroll failed");
|
||||||
gst_base_sink_preroll_queue_flush (basesink, pad);
|
gst_base_sink_preroll_queue_flush (basesink, pad);
|
||||||
GST_PREROLL_UNLOCK (pad);
|
GST_PREROLL_UNLOCK (pad);
|
||||||
|
|
||||||
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
/* have to release STREAM_LOCK as we cannot take the STATE_LOCK
|
||||||
* inside the STREAM_LOCK */
|
* inside the STREAM_LOCK */
|
||||||
t = GST_STREAM_UNLOCK_FULL (pad);
|
t = GST_STREAM_UNLOCK_FULL (pad);
|
||||||
GST_DEBUG ("released stream lock %d times", t);
|
GST_DEBUG_OBJECT (basesink, "released stream lock %d times", t);
|
||||||
if (t <= 0) {
|
if (t <= 0) {
|
||||||
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
GST_WARNING ("STREAM_LOCK should have been locked !!");
|
||||||
g_warning ("STREAM_LOCK should have been locked !!");
|
g_warning ("STREAM_LOCK should have been locked !!");
|
||||||
|
@ -752,7 +755,7 @@ gst_base_sink_event (GstPad * pad, GstEvent * event)
|
||||||
|
|
||||||
bclass = GST_BASE_SINK_GET_CLASS (basesink);
|
bclass = GST_BASE_SINK_GET_CLASS (basesink);
|
||||||
|
|
||||||
GST_DEBUG ("event %p", event);
|
GST_DEBUG_OBJECT (basesink, "event %p", event);
|
||||||
|
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_EOS:
|
case GST_EVENT_EOS:
|
||||||
|
@ -802,7 +805,7 @@ gst_base_sink_event (GstPad * pad, GstEvent * event)
|
||||||
gst_element_lost_state (GST_ELEMENT (basesink));
|
gst_element_lost_state (GST_ELEMENT (basesink));
|
||||||
GST_STREAM_UNLOCK (pad);
|
GST_STREAM_UNLOCK (pad);
|
||||||
GST_STATE_UNLOCK (basesink);
|
GST_STATE_UNLOCK (basesink);
|
||||||
GST_DEBUG ("event unref %p %p", basesink, event);
|
GST_DEBUG_OBJECT (basesink, "event unref %p %p", basesink, event);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
break;
|
break;
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
|
@ -817,12 +820,12 @@ gst_base_sink_event (GstPad * pad, GstEvent * event)
|
||||||
basesink->segment_stop = -1;
|
basesink->segment_stop = -1;
|
||||||
basesink->current_start = -1;
|
basesink->current_start = -1;
|
||||||
basesink->current_end = -1;
|
basesink->current_end = -1;
|
||||||
GST_DEBUG ("reset accum %" GST_TIME_FORMAT,
|
GST_DEBUG_OBJECT (basesink, "reset accum %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (basesink->segment_accum));
|
GST_TIME_ARGS (basesink->segment_accum));
|
||||||
basesink->segment_accum = 0;
|
basesink->segment_accum = 0;
|
||||||
GST_STREAM_UNLOCK (pad);
|
GST_STREAM_UNLOCK (pad);
|
||||||
|
|
||||||
GST_DEBUG ("event unref %p %p", basesink, event);
|
GST_DEBUG_OBJECT (basesink, "event unref %p %p", basesink, event);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1027,7 +1030,7 @@ gst_base_sink_handle_event (GstBaseSink * basesink, GstEvent * event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG ("event unref %p %p", basesink, event);
|
GST_DEBUG_OBJECT (basesink, "event unref %p %p", basesink, event);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1055,7 +1058,7 @@ gst_base_sink_handle_buffer (GstBaseSink * basesink, GstBuffer * buf)
|
||||||
ret = bclass->render (basesink, buf);
|
ret = bclass->render (basesink, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG ("buffer unref after render %p", basesink, buf);
|
GST_DEBUG_OBJECT (basesink, "buffer unref after render %p", basesink, buf);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1361,8 +1364,8 @@ gst_base_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
|
|
||||||
/* if we don't have a preroll buffer and we have not received EOS,
|
/* if we don't have a preroll buffer and we have not received EOS,
|
||||||
* we need to wait for a preroll */
|
* we need to wait for a preroll */
|
||||||
GST_DEBUG ("have_preroll: %d, EOS: %d", basesink->have_preroll,
|
GST_DEBUG_OBJECT (basesink, "have_preroll: %d, EOS: %d",
|
||||||
basesink->eos);
|
basesink->have_preroll, basesink->eos);
|
||||||
if (!basesink->have_preroll && !basesink->eos) {
|
if (!basesink->have_preroll && !basesink->eos) {
|
||||||
basesink->need_preroll = TRUE;
|
basesink->need_preroll = TRUE;
|
||||||
ret = GST_STATE_CHANGE_ASYNC;
|
ret = GST_STATE_CHANGE_ASYNC;
|
||||||
|
@ -1387,12 +1390,13 @@ gst_base_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
start_failed:
|
start_failed:
|
||||||
{
|
{
|
||||||
GST_DEBUG ("failed to start");
|
GST_DEBUG_OBJECT (basesink, "failed to start");
|
||||||
return GST_STATE_CHANGE_FAILURE;
|
return GST_STATE_CHANGE_FAILURE;
|
||||||
}
|
}
|
||||||
activate_failed:
|
activate_failed:
|
||||||
{
|
{
|
||||||
GST_DEBUG ("element failed to change states -- activation problem?");
|
GST_DEBUG_OBJECT (basesink,
|
||||||
|
"element failed to change states -- activation problem?");
|
||||||
return GST_STATE_CHANGE_FAILURE;
|
return GST_STATE_CHANGE_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue