summaryrefslogtreecommitdiff
path: root/omx/gstomxaudioenc.c
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2011-11-17 10:19:35 -0800
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2011-11-17 10:19:47 -0800
commit7df465bfb38406880a635fe4f787498b66b04269 (patch)
treeb522804b31e37367c3f29432167de008a8a6420d /omx/gstomxaudioenc.c
parent2408e0d33afe3408e6acd7817c5ebca607901347 (diff)
omxaudioenc: Shutdown component in PAUSED->READY and deallocate buffers
Diffstat (limited to 'omx/gstomxaudioenc.c')
-rw-r--r--omx/gstomxaudioenc.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/omx/gstomxaudioenc.c b/omx/gstomxaudioenc.c
index 5062407..940774d 100644
--- a/omx/gstomxaudioenc.c
+++ b/omx/gstomxaudioenc.c
@@ -285,11 +285,14 @@ gst_omx_audio_enc_open (GstOMXAudioEnc * self)
return TRUE;
}
+
static gboolean
-gst_omx_audio_enc_close (GstOMXAudioEnc * self)
+gst_omx_audio_enc_shutdown (GstOMXAudioEnc * self)
{
OMX_STATETYPE state;
+ GST_DEBUG_OBJECT (self, "Shutting down encoder");
+
state = gst_omx_component_get_state (self->component, 0);
if (state > OMX_StateLoaded || state == OMX_StateInvalid) {
if (state > OMX_StateIdle) {
@@ -303,6 +306,17 @@ gst_omx_audio_enc_close (GstOMXAudioEnc * self)
gst_omx_component_get_state (self->component, 5 * GST_SECOND);
}
+ return TRUE;
+}
+
+static gboolean
+gst_omx_audio_enc_close (GstOMXAudioEnc * self)
+{
+ GST_DEBUG_OBJECT (self, "Closing encoder");
+
+ if (!gst_omx_audio_enc_shutdown (self))
+ return FALSE;
+
self->in_port = NULL;
self->out_port = NULL;
if (self->component)
@@ -379,6 +393,9 @@ gst_omx_audio_enc_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_PAUSED_TO_READY:
self->downstream_flow_ret = GST_FLOW_WRONG_STATE;
self->started = FALSE;
+
+ if (!gst_omx_audio_enc_shutdown (self))
+ ret = GST_STATE_CHANGE_FAILURE;
break;
case GST_STATE_CHANGE_READY_TO_NULL:
if (!gst_omx_audio_enc_close (self))