summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2013-02-27 16:55:16 +0100
committerJosep Torra <n770galaxy@gmail.com>2013-03-01 11:50:32 +0100
commitde5e69aedc2394e05fa07bbbd56889d1748897fa (patch)
tree0b2af36302c4b7fbef7b16ce94e1f7de761bec31
parent269a20de50b127adcf926a31db1224cace1090e6 (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.c83
-rw-r--r--omx/gstomxvideodec.c85
-rw-r--r--omx/gstomxvideoenc.c82
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);