Improve flushing
This commit is contained in:
parent
d2aff4ecd3
commit
ed98e8cf60
@ -442,6 +442,8 @@ gst_amc_video_dec_change_state (GstElement * element, GstStateChange transition)
|
|||||||
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
|
self->flushing = TRUE;
|
||||||
|
gst_amc_codec_flush (self->codec);
|
||||||
g_mutex_lock (self->drain_lock);
|
g_mutex_lock (self->drain_lock);
|
||||||
self->draining = FALSE;
|
self->draining = FALSE;
|
||||||
g_cond_broadcast (self->drain_cond);
|
g_cond_broadcast (self->drain_cond);
|
||||||
@ -649,6 +651,9 @@ retry:
|
|||||||
/*} */
|
/*} */
|
||||||
|
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
|
if (self->flushing)
|
||||||
|
goto flushing;
|
||||||
|
|
||||||
switch (idx) {
|
switch (idx) {
|
||||||
case INFO_OUTPUT_BUFFERS_CHANGED:{
|
case INFO_OUTPUT_BUFFERS_CHANGED:{
|
||||||
GST_DEBUG_OBJECT (self, "Output buffers have changed");
|
GST_DEBUG_OBJECT (self, "Output buffers have changed");
|
||||||
@ -691,9 +696,6 @@ retry:
|
|||||||
}
|
}
|
||||||
case INFO_TRY_AGAIN_LATER:
|
case INFO_TRY_AGAIN_LATER:
|
||||||
GST_DEBUG_OBJECT (self, "Dequeueing output buffer timed out");
|
GST_DEBUG_OBJECT (self, "Dequeueing output buffer timed out");
|
||||||
if (self->flushing)
|
|
||||||
goto flushing;
|
|
||||||
else
|
|
||||||
goto retry;
|
goto retry;
|
||||||
break;
|
break;
|
||||||
case G_MININT:
|
case G_MININT:
|
||||||
@ -1120,12 +1122,11 @@ gst_amc_video_dec_handle_frame (GstVideoDecoder * decoder,
|
|||||||
GST_VIDEO_DECODER_STREAM_LOCK (self);
|
GST_VIDEO_DECODER_STREAM_LOCK (self);
|
||||||
|
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
|
if (self->flushing)
|
||||||
|
goto flushing;
|
||||||
switch (idx) {
|
switch (idx) {
|
||||||
case INFO_TRY_AGAIN_LATER:
|
case INFO_TRY_AGAIN_LATER:
|
||||||
GST_DEBUG_OBJECT (self, "Dequeueing input buffer timed out");
|
GST_DEBUG_OBJECT (self, "Dequeueing input buffer timed out");
|
||||||
if (self->flushing)
|
|
||||||
goto flushing;
|
|
||||||
else
|
|
||||||
continue; /* next try */
|
continue; /* next try */
|
||||||
break;
|
break;
|
||||||
case G_MININT:
|
case G_MININT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user