mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
androidmedia: Make sure to unblock any thread waiting on the drain condition variable when errors happen
This commit is contained in:
parent
ca62186797
commit
8f25220b9c
3 changed files with 80 additions and 0 deletions
|
@ -603,6 +603,10 @@ dequeue_error:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -613,6 +617,10 @@ get_output_buffers_error:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -627,6 +635,10 @@ format_error:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
failed_release:
|
||||
|
@ -636,6 +648,10 @@ failed_release:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
flushing:
|
||||
|
@ -666,6 +682,10 @@ flow_error:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
}
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -677,6 +697,10 @@ invalid_buffer_index:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
invalid_buffer_size:
|
||||
|
@ -691,6 +715,10 @@ invalid_buffer_size:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -706,6 +734,10 @@ failed_allocate:
|
|||
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_AUDIO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -788,6 +788,10 @@ dequeue_error:
|
|||
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -798,6 +802,10 @@ get_output_buffers_error:
|
|||
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -812,6 +820,10 @@ format_error:
|
|||
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
failed_release:
|
||||
|
@ -821,6 +833,10 @@ failed_release:
|
|||
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
flushing:
|
||||
|
@ -851,6 +867,10 @@ flow_error:
|
|||
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
|
||||
}
|
||||
GST_VIDEO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -862,6 +882,10 @@ invalid_buffer:
|
|||
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_NOT_NEGOTIATED;
|
||||
GST_VIDEO_DECODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1090,6 +1090,10 @@ dequeue_error:
|
|||
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1100,6 +1104,10 @@ get_output_buffers_error:
|
|||
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1114,6 +1122,10 @@ format_error:
|
|||
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
failed_release:
|
||||
|
@ -1123,6 +1135,10 @@ failed_release:
|
|||
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_ERROR;
|
||||
GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
flushing:
|
||||
|
@ -1150,6 +1166,10 @@ flow_error:
|
|||
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
|
||||
}
|
||||
GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1161,6 +1181,10 @@ invalid_buffer:
|
|||
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
|
||||
self->downstream_flow_ret = GST_FLOW_NOT_NEGOTIATED;
|
||||
GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (&self->drain_lock);
|
||||
self->draining = FALSE;
|
||||
g_cond_broadcast (&self->drain_cond);
|
||||
g_mutex_unlock (&self->drain_lock);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue