summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-08-28 10:44:31 +0300
committerSebastian Dröge <sebastian@centricular.com>2014-08-28 10:45:37 +0300
commitcdb918aefba276a0df70052948ff846deb128bf1 (patch)
tree12b0c74d7da10f9f635294295dff5e793489218c
parent2c98a6ab7ec2e67c6838ea84175eec50c4b02045 (diff)
omxaudioenc: Implement the hack flag GST_OMX_HACK_NO_COMPONENT_RECONFIGURE
-rw-r--r--omx/gstomxaudioenc.c51
1 files changed, 31 insertions, 20 deletions
diff --git a/omx/gstomxaudioenc.c b/omx/gstomxaudioenc.c
index d829c80..2d7332c 100644
--- a/omx/gstomxaudioenc.c
+++ b/omx/gstomxaudioenc.c
@@ -669,26 +669,37 @@ gst_omx_audio_enc_set_format (GstAudioEncoder * encoder, GstAudioInfo * info)
gst_pad_stop_task (GST_AUDIO_ENCODER_SRC_PAD (encoder));
GST_AUDIO_ENCODER_STREAM_LOCK (self);
- if (gst_omx_port_set_enabled (self->enc_in_port, FALSE) != OMX_ErrorNone)
- return FALSE;
- if (gst_omx_port_set_enabled (self->enc_out_port, FALSE) != OMX_ErrorNone)
- return FALSE;
- if (gst_omx_port_wait_buffers_released (self->enc_in_port,
- 5 * GST_SECOND) != OMX_ErrorNone)
- return FALSE;
- if (gst_omx_port_wait_buffers_released (self->enc_out_port,
- 1 * GST_SECOND) != OMX_ErrorNone)
- return FALSE;
- if (gst_omx_port_deallocate_buffers (self->enc_in_port) != OMX_ErrorNone)
- return FALSE;
- if (gst_omx_port_deallocate_buffers (self->enc_out_port) != OMX_ErrorNone)
- return FALSE;
- if (gst_omx_port_wait_enabled (self->enc_in_port,
- 1 * GST_SECOND) != OMX_ErrorNone)
- return FALSE;
- if (gst_omx_port_wait_enabled (self->enc_out_port,
- 1 * GST_SECOND) != OMX_ErrorNone)
- return FALSE;
+ if (klass->cdata.hacks & GST_OMX_HACK_NO_COMPONENT_RECONFIGURE) {
+ GST_AUDIO_ENCODER_STREAM_UNLOCK (self);
+ gst_omx_audio_enc_stop (GST_AUDIO_ENCODER (self));
+ gst_omx_audio_enc_close (GST_AUDIO_ENCODER (self));
+ GST_AUDIO_ENCODER_STREAM_LOCK (self);
+
+ if (!gst_omx_audio_enc_open (GST_AUDIO_ENCODER (self)))
+ return FALSE;
+ needs_disable = FALSE;
+ } else {
+ if (gst_omx_port_set_enabled (self->enc_in_port, FALSE) != OMX_ErrorNone)
+ return FALSE;
+ if (gst_omx_port_set_enabled (self->enc_out_port, FALSE) != OMX_ErrorNone)
+ return FALSE;
+ if (gst_omx_port_wait_buffers_released (self->enc_in_port,
+ 5 * GST_SECOND) != OMX_ErrorNone)
+ return FALSE;
+ if (gst_omx_port_wait_buffers_released (self->enc_out_port,
+ 1 * GST_SECOND) != OMX_ErrorNone)
+ return FALSE;
+ if (gst_omx_port_deallocate_buffers (self->enc_in_port) != OMX_ErrorNone)
+ return FALSE;
+ if (gst_omx_port_deallocate_buffers (self->enc_out_port) != OMX_ErrorNone)
+ return FALSE;
+ if (gst_omx_port_wait_enabled (self->enc_in_port,
+ 1 * GST_SECOND) != OMX_ErrorNone)
+ return FALSE;
+ if (gst_omx_port_wait_enabled (self->enc_out_port,
+ 1 * GST_SECOND) != OMX_ErrorNone)
+ return FALSE;
+ }
GST_DEBUG_OBJECT (self, "Encoder drained and disabled");
}