diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-02-27 16:55:16 +0100 |
---|---|---|
committer | Josep Torra <n770galaxy@gmail.com> | 2013-03-01 11:50:32 +0100 |
commit | de5e69aedc2394e05fa07bbbd56889d1748897fa (patch) | |
tree | 0b2af36302c4b7fbef7b16ce94e1f7de761bec31 | |
parent | 269a20de50b127adcf926a31db1224cace1090e6 (diff) |
omx: Refactor code flow a bit if output port settings have changed
Conflicts:
omx/gstomxaudioenc.c
omx/gstomxvideodec.c
omx/gstomxvideoenc.c
-rw-r--r-- | omx/gstomxaudioenc.c | 83 | ||||
-rw-r--r-- | omx/gstomxvideodec.c | 85 | ||||
-rw-r--r-- | omx/gstomxvideoenc.c | 82 |
3 files changed, 129 insertions, 121 deletions
diff --git a/omx/gstomxaudioenc.c b/omx/gstomxaudioenc.c index 974ab38..c7d7018 100644 --- a/omx/gstomxaudioenc.c +++ b/omx/gstomxaudioenc.c @@ -450,54 +450,39 @@ gst_omx_audio_enc_loop (GstOMXAudioEnc * self) goto component_error; } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_FLUSHING) { goto flushing; - } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { - OMX_ERRORTYPE err; - - /* Reallocate all buffers */ - err = gst_omx_port_set_enabled (port, FALSE); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_wait_buffers_released (port, 5 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_deallocate_buffers (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_wait_enabled (port, 1 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_set_enabled (port, TRUE); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_allocate_buffers (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_wait_enabled (port, 5 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_mark_reconfigured (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - /* Update caps below */ } - GST_AUDIO_ENCODER_STREAM_LOCK (self); if (!GST_PAD_CAPS (GST_AUDIO_ENCODER_SRC_PAD (self)) || acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { GstAudioInfo *info = gst_audio_encoder_get_audio_info (GST_AUDIO_ENCODER (self)); GstCaps *caps; + OMX_ERRORTYPE err; GST_DEBUG_OBJECT (self, "Port settings have changed, updating caps"); + /* Reallocate all buffers */ + if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + err = gst_omx_port_set_enabled (port, FALSE); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_wait_buffers_released (port, 5 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_deallocate_buffers (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_wait_enabled (port, 1 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + } + + GST_AUDIO_ENCODER_STREAM_LOCK (self); + caps = klass->get_caps (self, self->enc_out_port, info); if (!caps) { if (buf) @@ -517,13 +502,31 @@ gst_omx_audio_enc_loop (GstOMXAudioEnc * self) } gst_caps_unref (caps); + GST_AUDIO_ENCODER_STREAM_UNLOCK (self); + + if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + err = gst_omx_port_set_enabled (port, TRUE); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_allocate_buffers (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_wait_enabled (port, 5 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_mark_reconfigured (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + } + /* Now get a buffer */ if (acq_return != GST_OMX_ACQUIRE_BUFFER_OK) { - GST_AUDIO_ENCODER_STREAM_UNLOCK (self); return; } } - GST_AUDIO_ENCODER_STREAM_UNLOCK (self); g_assert (acq_return == GST_OMX_ACQUIRE_BUFFER_OK); diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c index cd07877..d389e82 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c @@ -706,53 +706,38 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self) goto component_error; } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_FLUSHING) { goto flushing; - } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { - OMX_ERRORTYPE err; - - /* Reallocate all buffers */ - err = gst_omx_port_set_enabled (port, FALSE); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_wait_buffers_released (port, 5 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_deallocate_buffers (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; + } - err = gst_omx_port_wait_enabled (port, 1 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; + if (!GST_PAD_CAPS (GST_VIDEO_DECODER_SRC_PAD (self)) || + acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + OMX_ERRORTYPE err; + GstVideoCodecState *state; + OMX_PARAM_PORTDEFINITIONTYPE port_def; + GstVideoFormat format; - err = gst_omx_port_set_enabled (port, TRUE); - if (err != OMX_ErrorNone) - goto reconfigure_error; + GST_DEBUG_OBJECT (self, "Port settings have changed, updating caps"); - err = gst_omx_port_allocate_buffers (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; + /* Reallocate all buffers */ + if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + err = gst_omx_port_set_enabled (port, FALSE); + if (err != OMX_ErrorNone) + goto reconfigure_error; - err = gst_omx_port_wait_enabled (port, 5 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; + err = gst_omx_port_wait_buffers_released (port, 5 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; - err = gst_omx_port_mark_reconfigured (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; + err = gst_omx_port_deallocate_buffers (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; - /* Update caps below */ - } + err = gst_omx_port_wait_enabled (port, 1 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + } - GST_VIDEO_DECODER_STREAM_LOCK (self); - if (!GST_PAD_CAPS (GST_VIDEO_DECODER_SRC_PAD (self)) - || acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { - GstVideoCodecState *state; - OMX_PARAM_PORTDEFINITIONTYPE port_def; - GstVideoFormat format; + GST_VIDEO_DECODER_STREAM_LOCK (self); - GST_DEBUG_OBJECT (self, "Port settings have changed, updating caps"); gst_omx_port_get_port_definition (port, &port_def); g_assert (port_def.format.video.eCompressionFormat == @@ -802,13 +787,31 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self) gst_video_codec_state_unref (state); + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + + if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + err = gst_omx_port_set_enabled (port, TRUE); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_allocate_buffers (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_wait_enabled (port, 5 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_mark_reconfigured (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + } + /* Now get a buffer */ if (acq_return != GST_OMX_ACQUIRE_BUFFER_OK) { - GST_VIDEO_DECODER_STREAM_UNLOCK (self); return; } } - GST_VIDEO_DECODER_STREAM_UNLOCK (self); g_assert (acq_return == GST_OMX_ACQUIRE_BUFFER_OK); diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c index beddcad..441ca3f 100644 --- a/omx/gstomxvideoenc.c +++ b/omx/gstomxvideoenc.c @@ -871,53 +871,37 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self) goto component_error; } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_FLUSHING) { goto flushing; - } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { - OMX_ERRORTYPE err; - - /* Reallocate all buffers */ - err = gst_omx_port_set_enabled (port, FALSE); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_wait_buffers_released (port, 5 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_deallocate_buffers (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_wait_enabled (port, 1 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_set_enabled (port, TRUE); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_allocate_buffers (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_wait_enabled (port, 5 * GST_SECOND); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - err = gst_omx_port_mark_reconfigured (port); - if (err != OMX_ErrorNone) - goto reconfigure_error; - - /* Update caps below */ } - GST_VIDEO_ENCODER_STREAM_LOCK (self); if (!GST_PAD_CAPS (GST_VIDEO_ENCODER_SRC_PAD (self)) || acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { GstCaps *caps; GstVideoCodecState *state; + OMX_ERRORTYPE err; GST_DEBUG_OBJECT (self, "Port settings have changed, updating caps"); + if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + /* Reallocate all buffers */ + err = gst_omx_port_set_enabled (port, FALSE); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_wait_buffers_released (port, 5 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_deallocate_buffers (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_wait_enabled (port, 1 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + } + + GST_VIDEO_ENCODER_STREAM_LOCK (self); + caps = klass->get_caps (self, self->enc_out_port, self->input_state); if (!caps) { if (buf) @@ -942,13 +926,31 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self) } #endif + GST_VIDEO_ENCODER_STREAM_UNLOCK (self); + + if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + err = gst_omx_port_set_enabled (port, TRUE); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_allocate_buffers (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_wait_enabled (port, 5 * GST_SECOND); + if (err != OMX_ErrorNone) + goto reconfigure_error; + + err = gst_omx_port_mark_reconfigured (port); + if (err != OMX_ErrorNone) + goto reconfigure_error; + } + /* Now get a buffer */ if (acq_return != GST_OMX_ACQUIRE_BUFFER_OK) { - GST_VIDEO_ENCODER_STREAM_UNLOCK (self); return; } } - GST_VIDEO_ENCODER_STREAM_UNLOCK (self); g_assert (acq_return == GST_OMX_ACQUIRE_BUFFER_OK); |