From: Rob C. <ro...@ti...> - 2010-03-07 23:15:42
|
rebased on top of 'boilerplate macros' patchset Rob Clark (10): construct GOmxPort objects in element constructor don't hard-code port indexes add accessor for OMX_HANDLE add some debug traces add G_OMX_INIT_PARAM utility macro add g_omx_core_{get,set}_{config,param} helper functions add input-buffers/output-buffers properties to the base classes add some debug traces add component-role support Add GstOmxBaseAudioDec base class omx/Makefile.am | 1 + omx/gstomx.c | 14 +++- omx/gstomx.h | 1 + omx/gstomx_aacdec.c | 50 +------------ omx/gstomx_aacdec.h | 6 +- omx/gstomx_aacenc.c | 44 ++++------- omx/gstomx_adpcmdec.c | 14 +-- omx/gstomx_adpcmenc.c | 22 ++---- omx/gstomx_amrnbdec.c | 53 +------------- omx/gstomx_amrnbdec.h | 6 +- omx/gstomx_amrnbenc.c | 22 ++---- omx/gstomx_amrwbdec.c | 53 +------------- omx/gstomx_amrwbdec.h | 6 +- omx/gstomx_amrwbenc.c | 22 ++---- omx/gstomx_audiosink.c | 13 +-- omx/gstomx_base_audiodec.c | 97 +++++++++++++++++++++++ omx/gstomx_base_audiodec.h | 53 +++++++++++++ omx/gstomx_base_filter.c | 91 ++++++++++++++++++---- omx/gstomx_base_sink.c | 84 +++++++++++++++++--- omx/gstomx_base_src.c | 84 +++++++++++++++++--- omx/gstomx_base_videodec.c | 34 +++------ omx/gstomx_base_videoenc.c | 25 +++---- omx/gstomx_filereadersrc.c | 2 +- omx/gstomx_g711dec.c | 14 ++-- omx/gstomx_g711enc.c | 13 +-- omx/gstomx_g729dec.c | 4 +- omx/gstomx_g729dec.h | 6 +- omx/gstomx_g729enc.c | 13 +-- omx/gstomx_h263enc.c | 11 +-- omx/gstomx_h264enc.c | 11 +-- omx/gstomx_ilbcdec.c | 1 + omx/gstomx_jpegenc.c | 40 ++++------ omx/gstomx_mp2dec.c | 60 +-------------- omx/gstomx_mp2dec.h | 6 +- omx/gstomx_mp3dec.c | 61 +-------------- omx/gstomx_mp3dec.h | 6 +- omx/gstomx_mpeg4enc.c | 11 +-- omx/gstomx_util.c | 183 +++++++++++++++++++++++++++++++++++++------- omx/gstomx_util.h | 21 +++++- omx/gstomx_videosink.c | 35 +++----- omx/gstomx_volume.c | 11 +-- omx/gstomx_vorbisdec.c | 50 +------------ omx/gstomx_vorbisdec.h | 6 +- 43 files changed, 706 insertions(+), 654 deletions(-) create mode 100644 omx/gstomx_base_audiodec.c create mode 100644 omx/gstomx_base_audiodec.h |
From: Rob C. <ro...@ti...> - 2010-03-07 23:16:39
|
The port objects are constructed up front (so they are valid at any point in the element's lifecycle), and bound to a port_index at construction time. This will be useful later to enable properties that directly set port params. --- omx/gstomx_base_filter.c | 13 +++++------ omx/gstomx_base_sink.c | 10 +++----- omx/gstomx_base_src.c | 10 +++----- omx/gstomx_util.c | 47 +++++++++++++++++++-------------------------- omx/gstomx_util.h | 4 +- 5 files changed, 36 insertions(+), 48 deletions(-) diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c index 44841c3..ddb480f 100644 --- a/omx/gstomx_base_filter.c +++ b/omx/gstomx_base_filter.c @@ -64,14 +64,14 @@ setup_ports (GstOmxBaseFilter *self) param.nPortIndex = 0; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); - self->in_port = g_omx_core_setup_port (core, ¶m); + g_omx_port_setup (self->in_port, ¶m); gst_pad_set_element_private (self->sinkpad, self->in_port); /* Output port configuration. */ param.nPortIndex = 1; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); - self->out_port = g_omx_core_setup_port (core, ¶m); + g_omx_port_setup (self->out_port, ¶m); gst_pad_set_element_private (self->srcpad, self->out_port); if (g_getenv ("OMX_ALLOCATE_ON")) @@ -877,11 +877,10 @@ type_instance_init (GTypeInstance *instance, self->use_timestamps = TRUE; /* GOmx */ - { - GOmxCore *gomx; - self->gomx = gomx = g_omx_core_new (self); - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); - } + self->gomx = g_omx_core_new (self); + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); + self->in_port = g_omx_core_get_port (self->gomx, 0); + self->out_port = g_omx_core_get_port (self->gomx, 1); self->ready_lock = g_mutex_new (); diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c index 6838f08..1c7888c 100644 --- a/omx/gstomx_base_sink.c +++ b/omx/gstomx_base_sink.c @@ -52,7 +52,7 @@ setup_ports (GstOmxBaseSink *self) param.nPortIndex = 0; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); - self->in_port = g_omx_core_setup_port (core, ¶m); + g_omx_port_setup (self->in_port, ¶m); gst_pad_set_element_private (self->sinkpad, self->in_port); } @@ -417,11 +417,9 @@ type_instance_init (GTypeInstance *instance, GST_LOG_OBJECT (self, "begin"); /* GOmx */ - { - GOmxCore *gomx; - self->gomx = gomx = g_omx_core_new (self); - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); - } + self->gomx = g_omx_core_new (self); + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); + self->in_port = g_omx_core_get_port (self->gomx, 0); { GstPad *sinkpad; diff --git a/omx/gstomx_base_src.c b/omx/gstomx_base_src.c index dd2be9e..a19c08f 100644 --- a/omx/gstomx_base_src.c +++ b/omx/gstomx_base_src.c @@ -43,7 +43,7 @@ setup_ports (GstOmxBaseSrc *self) param.nPortIndex = 0; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); - self->out_port = g_omx_core_setup_port (core, ¶m); + g_omx_port_setup (self->out_port, ¶m); if (self->setup_ports) { @@ -402,11 +402,9 @@ type_instance_init (GTypeInstance *instance, GST_LOG_OBJECT (self, "begin"); /* GOmx */ - { - GOmxCore *gomx; - self->gomx = gomx = g_omx_core_new (self); - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); - } + self->gomx = g_omx_core_new (self); + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); + self->out_port = g_omx_core_get_port (self->gomx, 1); GST_LOG_OBJECT (self, "end"); } diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c index b2a96c8..d8cc7f0 100644 --- a/omx/gstomx_util.c +++ b/omx/gstomx_util.c @@ -76,9 +76,7 @@ omx_state_to_str (OMX_STATETYPE omx_state); static inline const char * omx_error_to_str (OMX_ERRORTYPE omx_error); -static inline GOmxPort * -g_omx_core_get_port (GOmxCore *core, - guint index); +static inline GOmxPort * get_port (GOmxCore *core, guint index); static inline void port_free_buffers (GOmxPort *port); @@ -133,7 +131,7 @@ core_for_each_port (GOmxCore *core, { GOmxPort *port; - port = g_omx_core_get_port (core, index); + port = get_port (core, index); if (port) func (port); @@ -396,37 +394,30 @@ g_omx_core_unload (GOmxCore *core) g_ptr_array_clear (core->ports); } -GOmxPort * -g_omx_core_setup_port (GOmxCore *core, - OMX_PARAM_PORTDEFINITIONTYPE *omx_port) +static inline GOmxPort * +get_port (GOmxCore *core, guint index) { - GOmxPort *port; - guint index; - - index = omx_port->nPortIndex; - port = g_omx_core_get_port (core, index); - - if (!port) + if (G_LIKELY (index < core->ports->len)) { - port = g_omx_port_new (core); - g_ptr_array_insert (core->ports, index, port); + return g_ptr_array_index (core->ports, index); } - g_omx_port_setup (port, omx_port); - - return port; + return NULL; } -static inline GOmxPort * +GOmxPort * g_omx_core_get_port (GOmxCore *core, guint index) { - if (G_LIKELY (index < core->ports->len)) + GOmxPort *port = get_port (core, index); + + if (!port) { - return g_ptr_array_index (core->ports, index); + port = g_omx_port_new (core, index); + g_ptr_array_insert (core->ports, index, port); } - return NULL; + return port; } void @@ -459,12 +450,13 @@ g_omx_core_flush_stop (GOmxCore *core) */ GOmxPort * -g_omx_port_new (GOmxCore *core) +g_omx_port_new (GOmxCore *core, guint index) { GOmxPort *port; port = g_new0 (GOmxPort, 1); port->core = core; + port->port_index = index; port->num_buffers = 0; port->buffer_size = 0; port->buffers = NULL; @@ -492,6 +484,8 @@ g_omx_port_setup (GOmxPort *port, { GOmxPortType type = -1; + g_assert (port->port_index == omx_port->nPortIndex); + switch (omx_port->eDir) { case OMX_DirInput: @@ -508,7 +502,6 @@ g_omx_port_setup (GOmxPort *port, /** @todo should it be nBufferCountMin? */ port->num_buffers = omx_port->nBufferCountActual; port->buffer_size = omx_port->nBufferSize; - port->port_index = omx_port->nPortIndex; g_free (port->buffers); port->buffers = g_new0 (OMX_BUFFERHEADERTYPE *, port->num_buffers); @@ -904,7 +897,7 @@ EmptyBufferDone (OMX_HANDLETYPE omx_handle, GOmxPort *port; core = (GOmxCore*) app_data; - port = g_omx_core_get_port (core, omx_buffer->nInputPortIndex); + port = get_port (core, omx_buffer->nInputPortIndex); GST_CAT_LOG_OBJECT (gstomx_util_debug, core->object, "omx_buffer=%p", omx_buffer); got_buffer (core, port, omx_buffer); @@ -921,7 +914,7 @@ FillBufferDone (OMX_HANDLETYPE omx_handle, GOmxPort *port; core = (GOmxCore *) app_data; - port = g_omx_core_get_port (core, omx_buffer->nOutputPortIndex); + port = get_port (core, omx_buffer->nOutputPortIndex); GST_CAT_LOG_OBJECT (gstomx_util_debug, core->object, "omx_buffer=%p", omx_buffer); got_buffer (core, port, omx_buffer); diff --git a/omx/gstomx_util.h b/omx/gstomx_util.h index 6450c0d..060b042 100644 --- a/omx/gstomx_util.h +++ b/omx/gstomx_util.h @@ -130,9 +130,9 @@ void g_omx_core_set_done (GOmxCore *core); void g_omx_core_wait_for_done (GOmxCore *core); void g_omx_core_flush_start (GOmxCore *core); void g_omx_core_flush_stop (GOmxCore *core); -GOmxPort *g_omx_core_setup_port (GOmxCore *core, OMX_PARAM_PORTDEFINITIONTYPE *omx_port); +GOmxPort *g_omx_core_get_port (GOmxCore *core, guint index); -GOmxPort *g_omx_port_new (GOmxCore *core); +GOmxPort *g_omx_port_new (GOmxCore *core, guint index); void g_omx_port_free (GOmxPort *port); void g_omx_port_setup (GOmxPort *port, OMX_PARAM_PORTDEFINITIONTYPE *omx_port); void g_omx_port_push_buffer (GOmxPort *port, OMX_BUFFERHEADERTYPE *omx_buffer); -- 1.6.3.2 |
From: Rob C. <ro...@ti...> - 2010-03-07 23:17:30
|
This improves readability by keeping knowledge of numeric port-index value in only one place (in the element constructor), and makes it easier to later add derived classes with different port indexes (for example GstOmxCamera subclassing GstOmxBaseSrc, but having GstOmxBaseSrc handling a port whose index != 0 while derived class handles port index 0 and others). --- omx/gstomx_aacdec.c | 2 +- omx/gstomx_aacenc.c | 8 ++++---- omx/gstomx_adpcmdec.c | 2 +- omx/gstomx_adpcmenc.c | 4 ++-- omx/gstomx_amrnbdec.c | 2 +- omx/gstomx_amrnbenc.c | 4 ++-- omx/gstomx_amrwbdec.c | 2 +- omx/gstomx_amrwbenc.c | 4 ++-- omx/gstomx_audiosink.c | 2 +- omx/gstomx_base_filter.c | 4 ++-- omx/gstomx_base_sink.c | 2 +- omx/gstomx_base_src.c | 2 +- omx/gstomx_base_videodec.c | 6 +++--- omx/gstomx_base_videoenc.c | 4 ++-- omx/gstomx_g711dec.c | 2 +- omx/gstomx_g711enc.c | 2 +- omx/gstomx_g729enc.c | 2 +- omx/gstomx_h263enc.c | 2 +- omx/gstomx_h264enc.c | 2 +- omx/gstomx_jpegenc.c | 8 ++++---- omx/gstomx_mp2dec.c | 2 +- omx/gstomx_mp3dec.c | 2 +- omx/gstomx_mpeg4enc.c | 2 +- omx/gstomx_videosink.c | 6 +++--- omx/gstomx_volume.c | 2 +- omx/gstomx_vorbisdec.c | 2 +- 26 files changed, 41 insertions(+), 41 deletions(-) diff --git a/omx/gstomx_aacdec.c b/omx/gstomx_aacdec.c index f72178d..1f22dd8 100644 --- a/omx/gstomx_aacdec.c +++ b/omx/gstomx_aacdec.c @@ -148,7 +148,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; diff --git a/omx/gstomx_aacenc.c b/omx/gstomx_aacenc.c index 5882a31..565bc82 100644 --- a/omx/gstomx_aacenc.c +++ b/omx/gstomx_aacenc.c @@ -308,7 +308,7 @@ sink_setcaps (GstPad *pad, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; @@ -356,7 +356,7 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Output port configuration. */ { - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioAac, ¶m); GST_DEBUG_OBJECT (omx_base, "setting bitrate: %i", self->bitrate); @@ -383,7 +383,7 @@ omx_setup (GstOmxBaseFilter *omx_base) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; @@ -398,7 +398,7 @@ omx_setup (GstOmxBaseFilter *omx_base) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAac, ¶m); param.nSampleRate = rate; diff --git a/omx/gstomx_adpcmdec.c b/omx/gstomx_adpcmdec.c index ed77085..12ee81f 100644 --- a/omx/gstomx_adpcmdec.c +++ b/omx/gstomx_adpcmdec.c @@ -130,7 +130,7 @@ sink_setcaps (GstPad *pad, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; diff --git a/omx/gstomx_adpcmenc.c b/omx/gstomx_adpcmenc.c index ab5ce61..fea6bf4 100644 --- a/omx/gstomx_adpcmenc.c +++ b/omx/gstomx_adpcmenc.c @@ -121,7 +121,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAdpcm, ¶m); rate = param.nSampleRate; @@ -185,7 +185,7 @@ sink_setcaps (GstPad *pad, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; diff --git a/omx/gstomx_amrnbdec.c b/omx/gstomx_amrnbdec.c index a32f162..f32b15f 100644 --- a/omx/gstomx_amrnbdec.c +++ b/omx/gstomx_amrnbdec.c @@ -121,7 +121,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; diff --git a/omx/gstomx_amrnbenc.c b/omx/gstomx_amrnbenc.c index e1c9b19..cc3486f 100644 --- a/omx/gstomx_amrnbenc.c +++ b/omx/gstomx_amrnbenc.c @@ -186,7 +186,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAmr, ¶m); channels = param.nChannels; @@ -236,7 +236,7 @@ sink_setcaps (GstPad *pad, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; diff --git a/omx/gstomx_amrwbdec.c b/omx/gstomx_amrwbdec.c index 26e1692..20dddcb 100644 --- a/omx/gstomx_amrwbdec.c +++ b/omx/gstomx_amrwbdec.c @@ -121,7 +121,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; diff --git a/omx/gstomx_amrwbenc.c b/omx/gstomx_amrwbenc.c index a19e670..3d95272 100644 --- a/omx/gstomx_amrwbenc.c +++ b/omx/gstomx_amrwbenc.c @@ -186,7 +186,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAmr, ¶m); channels = param.nChannels; @@ -236,7 +236,7 @@ sink_setcaps (GstPad *pad, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; diff --git a/omx/gstomx_audiosink.c b/omx/gstomx_audiosink.c index a05a7cd..6c912f0 100644 --- a/omx/gstomx_audiosink.c +++ b/omx/gstomx_audiosink.c @@ -114,7 +114,7 @@ setcaps (GstBaseSink *gst_sink, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = self->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); param.nChannels = channels; diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c index ddb480f..70bf617 100644 --- a/omx/gstomx_base_filter.c +++ b/omx/gstomx_base_filter.c @@ -62,14 +62,14 @@ setup_ports (GstOmxBaseFilter *self) /* Input port configuration. */ - param.nPortIndex = 0; + param.nPortIndex = self->in_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->in_port, ¶m); gst_pad_set_element_private (self->sinkpad, self->in_port); /* Output port configuration. */ - param.nPortIndex = 1; + param.nPortIndex = self->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->out_port, ¶m); gst_pad_set_element_private (self->srcpad, self->out_port); diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c index 1c7888c..5ea7c31 100644 --- a/omx/gstomx_base_sink.c +++ b/omx/gstomx_base_sink.c @@ -50,7 +50,7 @@ setup_ports (GstOmxBaseSink *self) /* Input port configuration. */ - param.nPortIndex = 0; + param.nPortIndex = self->in_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->in_port, ¶m); gst_pad_set_element_private (self->sinkpad, self->in_port); diff --git a/omx/gstomx_base_src.c b/omx/gstomx_base_src.c index a19c08f..54f9032 100644 --- a/omx/gstomx_base_src.c +++ b/omx/gstomx_base_src.c @@ -41,7 +41,7 @@ setup_ports (GstOmxBaseSrc *self) /* Input port configuration. */ - param.nPortIndex = 0; + param.nPortIndex = self->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->out_port, ¶m); diff --git a/omx/gstomx_base_videodec.c b/omx/gstomx_base_videodec.c index 3ff2f44..5c6d1e1 100644 --- a/omx/gstomx_base_videodec.c +++ b/omx/gstomx_base_videodec.c @@ -116,7 +116,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; @@ -217,7 +217,7 @@ sink_setcaps (GstPad *pad, /* Input port configuration. */ { - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); param.format.video.nFrameWidth = width; @@ -250,7 +250,7 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Input port configuration. */ { - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); param.format.video.eCompressionFormat = self->compression_format; diff --git a/omx/gstomx_base_videoenc.c b/omx/gstomx_base_videoenc.c index 7c99a53..d243fbd 100644 --- a/omx/gstomx_base_videoenc.c +++ b/omx/gstomx_base_videoenc.c @@ -222,7 +222,7 @@ sink_setcaps (GstPad *pad, /* Input port configuration. */ { - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); param.format.video.nFrameWidth = width; @@ -264,7 +264,7 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Output port configuration. */ { - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); param.format.video.eCompressionFormat = self->compression_format; diff --git a/omx/gstomx_g711dec.c b/omx/gstomx_g711dec.c index 40cd64b..bc2fb18 100644 --- a/omx/gstomx_g711dec.c +++ b/omx/gstomx_g711dec.c @@ -142,7 +142,7 @@ sink_setcaps (GstPad *pad, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); if (strcmp (mode, "audio/x-alaw") == 0) diff --git a/omx/gstomx_g711enc.c b/omx/gstomx_g711enc.c index 16d58aa..ba8d297 100644 --- a/omx/gstomx_g711enc.c +++ b/omx/gstomx_g711enc.c @@ -152,7 +152,7 @@ sink_setcaps (GstPad *pad, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); if (strcmp (mode, "audio/x-alaw") == 0) diff --git a/omx/gstomx_g729enc.c b/omx/gstomx_g729enc.c index b6c41f0..67f9b38 100644 --- a/omx/gstomx_g729enc.c +++ b/omx/gstomx_g729enc.c @@ -230,7 +230,7 @@ omx_setup (GstOmxBaseFilter *omx_base) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioG729, ¶m); param.bDTX = self->dtx; diff --git a/omx/gstomx_h263enc.c b/omx/gstomx_h263enc.c index 5f39029..2d2a1a0 100644 --- a/omx/gstomx_h263enc.c +++ b/omx/gstomx_h263enc.c @@ -97,7 +97,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base_filter->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; diff --git a/omx/gstomx_h264enc.c b/omx/gstomx_h264enc.c index 336ea9a..7d2c2b6 100644 --- a/omx/gstomx_h264enc.c +++ b/omx/gstomx_h264enc.c @@ -96,7 +96,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base_filter->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; diff --git a/omx/gstomx_jpegenc.c b/omx/gstomx_jpegenc.c index 2799521..63ff8fe 100644 --- a/omx/gstomx_jpegenc.c +++ b/omx/gstomx_jpegenc.c @@ -211,7 +211,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); width = param.format.image.nFrameWidth; @@ -294,7 +294,7 @@ sink_setcaps (GstPad *pad, /* Input port configuration. */ { - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); param.format.image.nFrameWidth = width; @@ -329,7 +329,7 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Output port configuration. */ { - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); param.format.image.eCompressionFormat = OMX_IMAGE_CodingJPEG; @@ -347,7 +347,7 @@ omx_setup (GstOmxBaseFilter *omx_base) param.nVersion.s.nVersionMinor = 1; param.nQFactor = self->quality; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_SetParameter (gomx->omx_handle, OMX_IndexParamQFactor, ¶m); } diff --git a/omx/gstomx_mp2dec.c b/omx/gstomx_mp2dec.c index f6c2568..6e78e5f 100644 --- a/omx/gstomx_mp2dec.c +++ b/omx/gstomx_mp2dec.c @@ -124,7 +124,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; diff --git a/omx/gstomx_mp3dec.c b/omx/gstomx_mp3dec.c index 08f1896..3824a9d 100644 --- a/omx/gstomx_mp3dec.c +++ b/omx/gstomx_mp3dec.c @@ -124,7 +124,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; diff --git a/omx/gstomx_mpeg4enc.c b/omx/gstomx_mpeg4enc.c index 7a91c1c..f365639 100644 --- a/omx/gstomx_mpeg4enc.c +++ b/omx/gstomx_mpeg4enc.c @@ -98,7 +98,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base_filter->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; diff --git a/omx/gstomx_videosink.c b/omx/gstomx_videosink.c index 683ee4c..7c5849b 100644 --- a/omx/gstomx_videosink.c +++ b/omx/gstomx_videosink.c @@ -166,7 +166,7 @@ setcaps (GstBaseSink *gst_sink, param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 0; + param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); switch (color_format) @@ -205,7 +205,7 @@ setcaps (GstBaseSink *gst_sink, config.nVersion.s.nVersionMajor = 1; config.nVersion.s.nVersionMinor = 1; - config.nPortIndex = 0; + config.nPortIndex = omx_base->in_port->port_index; OMX_GetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, &config); config.nRotation = self->rotation; @@ -221,7 +221,7 @@ setcaps (GstBaseSink *gst_sink, config.nVersion.s.nVersionMajor = 1; config.nVersion.s.nVersionMinor = 1; - config.nPortIndex = 0; + config.nPortIndex = omx_base->in_port->port_index; OMX_GetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, &config); config.xWidth = self->x_scale; diff --git a/omx/gstomx_volume.c b/omx/gstomx_volume.c index cd23103..91e116e 100644 --- a/omx/gstomx_volume.c +++ b/omx/gstomx_volume.c @@ -126,7 +126,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; diff --git a/omx/gstomx_vorbisdec.c b/omx/gstomx_vorbisdec.c index 2adad9b..aad896a 100644 --- a/omx/gstomx_vorbisdec.c +++ b/omx/gstomx_vorbisdec.c @@ -119,7 +119,7 @@ settings_changed_cb (GOmxCore *core) param.nVersion.s.nVersionMajor = 1; param.nVersion.s.nVersionMinor = 1; - param.nPortIndex = 1; + param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; -- 1.6.3.2 |
From: Rob C. <ro...@ti...> - 2010-03-07 23:17:55
|
A method for GOmxCore object which can be called at any time to access OMX component handle. If the OMX component is not yet instantiated, this will trigger OMX_GetHandle(). This makes it safe to use in places like get/set_property methods which could be called before the OMX component would otherwise be instantiated. --- omx/gstomx_util.c | 29 ++++++++++++++++++++++++++++- omx/gstomx_util.h | 1 + 2 files changed, 29 insertions(+), 1 deletions(-) diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c index d8cc7f0..efe953d 100644 --- a/omx/gstomx_util.c +++ b/omx/gstomx_util.c @@ -287,6 +287,8 @@ g_omx_core_new (void *object) void g_omx_core_free (GOmxCore *core) { + g_omx_core_deinit (core); /* just in case we didn't have a READY->NULL.. mainly for gst-inspect */ + g_sem_free (core->port_sem); g_sem_free (core->flush_sem); g_sem_free (core->done_sem); @@ -302,6 +304,9 @@ g_omx_core_free (GOmxCore *core) void g_omx_core_init (GOmxCore *core) { + if (core->omx_handle) + return; + core->imp = request_imp (core->library_name); if (!core->imp) @@ -318,14 +323,21 @@ g_omx_core_init (GOmxCore *core) void g_omx_core_deinit (GOmxCore *core) { - if (!core->imp) + if (!core->imp || !core->omx_handle) return; if (core->omx_state == OMX_StateLoaded || core->omx_state == OMX_StateInvalid) { if (core->omx_handle) + { core->omx_error = core->imp->sym_table.free_handle (core->omx_handle); + core->omx_handle = NULL; + } + } + else + { + GST_WARNING ("incorrect state: %s", omx_state_to_str (core->omx_state)); } g_free (core->library_name); @@ -445,6 +457,21 @@ g_omx_core_flush_stop (GOmxCore *core) core_for_each_port (core, g_omx_port_resume); } +/** + * Accessor for OMX component handle. If the OMX component is not constructed + * yet, this will trigger it to be constructed (OMX_GetHandle()). This should + * at least be used in places where g_omx_core_init() might not have been + * called yet (such as setting/getting properties) + */ +OMX_HANDLETYPE +g_omx_core_get_handle (GOmxCore *core) +{ + if (!core->omx_handle) + g_omx_core_init (core); + return core->omx_handle; +} + + /* * Port */ diff --git a/omx/gstomx_util.h b/omx/gstomx_util.h index 060b042..404df8a 100644 --- a/omx/gstomx_util.h +++ b/omx/gstomx_util.h @@ -130,6 +130,7 @@ void g_omx_core_set_done (GOmxCore *core); void g_omx_core_wait_for_done (GOmxCore *core); void g_omx_core_flush_start (GOmxCore *core); void g_omx_core_flush_stop (GOmxCore *core); +OMX_HANDLETYPE g_omx_core_get_handle (GOmxCore *core); GOmxPort *g_omx_core_get_port (GOmxCore *core, guint index); GOmxPort *g_omx_port_new (GOmxCore *core, guint index); -- 1.6.3.2 |
From: Rob C. <ro...@ti...> - 2010-03-07 23:18:23
|
--- omx/gstomx_util.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c index efe953d..b6633e4 100644 --- a/omx/gstomx_util.c +++ b/omx/gstomx_util.c @@ -157,6 +157,9 @@ imp_new (const gchar *name) void *handle; imp->dl_handle = handle = dlopen (name, RTLD_LAZY); + + GST_DEBUG ("dlopen(%s) -> %p", name, handle); + if (!handle) { g_warning ("%s\n", dlerror ()); @@ -307,6 +310,9 @@ g_omx_core_init (GOmxCore *core) if (core->omx_handle) return; + GST_DEBUG_OBJECT (core->object, "loading: %s (%s)", + core->component_name, core->library_name); + core->imp = request_imp (core->library_name); if (!core->imp) @@ -316,6 +322,10 @@ g_omx_core_init (GOmxCore *core) (char *) core->component_name, core, &callbacks); + + GST_DEBUG_OBJECT (core->object, "OMX_GetHandle(&%p) -> %d", + core->omx_handle, core->omx_error); + if (!core->omx_error) core->omx_state = OMX_StateLoaded; } @@ -332,6 +342,8 @@ g_omx_core_deinit (GOmxCore *core) if (core->omx_handle) { core->omx_error = core->imp->sym_table.free_handle (core->omx_handle); + GST_DEBUG_OBJECT (core->object, "OMX_FreeHandle(%p) -> %d", + core->omx_handle, core->omx_error); core->omx_handle = NULL; } } @@ -530,6 +542,10 @@ g_omx_port_setup (GOmxPort *port, port->num_buffers = omx_port->nBufferCountActual; port->buffer_size = omx_port->nBufferSize; + GST_DEBUG_OBJECT (port->core->object, + "type=%d, num_buffers=%d, buffer_size=%ld, port_index=%d", + port->type, port->num_buffers, port->buffer_size, port->port_index); + g_free (port->buffers); port->buffers = g_new0 (OMX_BUFFERHEADERTYPE *, port->num_buffers); } @@ -862,6 +878,8 @@ EventHandler (OMX_HANDLETYPE omx_handle, cmd = (OMX_COMMANDTYPE) data_1; + GST_DEBUG_OBJECT (core->object, "OMX_EventCmdComplete: %d", cmd); + switch (cmd) { case OMX_CommandStateSet: @@ -880,6 +898,7 @@ EventHandler (OMX_HANDLETYPE omx_handle, } case OMX_EventBufferFlag: { + GST_DEBUG_OBJECT (core->object, "OMX_EventBufferFlag"); if (data_2 & OMX_BUFFERFLAG_EOS) { g_omx_core_set_done (core); @@ -888,6 +907,7 @@ EventHandler (OMX_HANDLETYPE omx_handle, } case OMX_EventPortSettingsChanged: { + GST_DEBUG_OBJECT (core->object, "OMX_EventPortSettingsChanged"); /** @todo only on the relevant port. */ if (core->settings_changed_cb) { -- 1.6.3.2 |
From: Felipe C. <fel...@no...> - 2010-03-08 16:14:38
|
On Mon, Mar 08, 2010 at 12:14:51AM +0100, Rob Clark wrote: > --- > omx/gstomx_util.c | 20 ++++++++++++++++++++ > 1 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c > index efe953d..b6633e4 100644 > --- a/omx/gstomx_util.c > +++ b/omx/gstomx_util.c > @@ -157,6 +157,9 @@ imp_new (const gchar *name) > void *handle; > > imp->dl_handle = handle = dlopen (name, RTLD_LAZY); > + > + GST_DEBUG ("dlopen(%s) -> %p", name, handle); I think this should be done before the dlopen(). Suppose dlopen() crashes; we want the debug to appear before it does. The rest looks ok. -- Felipe Contreras |
From: Rob C. <ro...@ti...> - 2010-03-07 23:19:21
|
--- omx/gstomx_aacdec.c | 7 +------ omx/gstomx_aacenc.c | 22 ++++------------------ omx/gstomx_adpcmdec.c | 7 +------ omx/gstomx_adpcmenc.c | 12 ++---------- omx/gstomx_amrnbdec.c | 7 +------ omx/gstomx_amrnbenc.c | 12 ++---------- omx/gstomx_amrwbdec.c | 7 +------ omx/gstomx_amrwbenc.c | 12 ++---------- omx/gstomx_audiosink.c | 7 +------ omx/gstomx_base_filter.c | 7 ++----- omx/gstomx_base_sink.c | 7 ++----- omx/gstomx_base_src.c | 7 ++----- omx/gstomx_base_videodec.c | 18 +++--------------- omx/gstomx_base_videoenc.c | 13 ++++--------- omx/gstomx_g711dec.c | 7 ++----- omx/gstomx_g711enc.c | 7 ++----- omx/gstomx_g729enc.c | 7 +------ omx/gstomx_h263enc.c | 7 +------ omx/gstomx_h264enc.c | 7 +------ omx/gstomx_jpegenc.c | 20 ++++---------------- omx/gstomx_mp2dec.c | 7 +------ omx/gstomx_mp3dec.c | 7 +------ omx/gstomx_mpeg4enc.c | 7 +------ omx/gstomx_util.h | 9 +++++++++ omx/gstomx_videosink.c | 17 ++++------------- omx/gstomx_volume.c | 7 +------ omx/gstomx_vorbisdec.c | 7 +------ 27 files changed, 57 insertions(+), 204 deletions(-) diff --git a/omx/gstomx_aacdec.c b/omx/gstomx_aacdec.c index 1f22dd8..b8f0fb2 100644 --- a/omx/gstomx_aacdec.c +++ b/omx/gstomx_aacdec.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxAacDec, gst_omx_aacdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -143,10 +141,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_aacenc.c b/omx/gstomx_aacenc.c index 565bc82..2eb0e96 100644 --- a/omx/gstomx_aacenc.c +++ b/omx/gstomx_aacenc.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - enum { ARG_0, @@ -303,10 +301,7 @@ sink_setcaps (GstPad *pad, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); @@ -349,10 +344,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_AUDIO_PARAM_AACPROFILETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_AACPROFILETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Output port configuration. */ { @@ -378,10 +370,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); @@ -393,10 +382,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_AUDIO_PARAM_AACPROFILETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_AACPROFILETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAac, ¶m); diff --git a/omx/gstomx_adpcmdec.c b/omx/gstomx_adpcmdec.c index 12ee81f..63151d9 100644 --- a/omx/gstomx_adpcmdec.c +++ b/omx/gstomx_adpcmdec.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxAdpcmDec, gst_omx_adpcmdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -125,10 +123,7 @@ sink_setcaps (GstPad *pad, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_adpcmenc.c b/omx/gstomx_adpcmenc.c index fea6bf4..fabb4bd 100644 --- a/omx/gstomx_adpcmenc.c +++ b/omx/gstomx_adpcmenc.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxAdpcmEnc, gst_omx_adpcmenc, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -116,10 +114,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_ADPCMTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_ADPCMTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAdpcm, ¶m); @@ -180,10 +175,7 @@ sink_setcaps (GstPad *pad, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_amrnbdec.c b/omx/gstomx_amrnbdec.c index f32b15f..6d0cbaf 100644 --- a/omx/gstomx_amrnbdec.c +++ b/omx/gstomx_amrnbdec.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxAmrNbDec, gst_omx_amrnbdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -116,10 +114,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_amrnbenc.c b/omx/gstomx_amrnbenc.c index cc3486f..5e1ccff 100644 --- a/omx/gstomx_amrnbenc.c +++ b/omx/gstomx_amrnbenc.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - enum { ARG_0, @@ -181,10 +179,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_AMRTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_AMRTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAmr, ¶m); @@ -231,10 +226,7 @@ sink_setcaps (GstPad *pad, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_amrwbdec.c b/omx/gstomx_amrwbdec.c index 20dddcb..cb41789 100644 --- a/omx/gstomx_amrwbdec.c +++ b/omx/gstomx_amrwbdec.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxAmrWbDec, gst_omx_amrwbdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -116,10 +114,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_amrwbenc.c b/omx/gstomx_amrwbenc.c index 3d95272..352b93f 100644 --- a/omx/gstomx_amrwbenc.c +++ b/omx/gstomx_amrwbenc.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - enum { ARG_0, @@ -181,10 +179,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_AMRTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_AMRTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAmr, ¶m); @@ -231,10 +226,7 @@ sink_setcaps (GstPad *pad, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_audiosink.c b/omx/gstomx_audiosink.c index 6c912f0..5f63d4c 100644 --- a/omx/gstomx_audiosink.c +++ b/omx/gstomx_audiosink.c @@ -22,8 +22,6 @@ #include "gstomx_audiosink.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxAudioSink, gst_omx_audiosink, GstOmxBaseSink, GST_OMX_BASE_SINK_TYPE); static GstCaps * @@ -109,10 +107,7 @@ setcaps (GstBaseSink *gst_sink, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = self->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c index 70bf617..487e4ee 100644 --- a/omx/gstomx_base_filter.c +++ b/omx/gstomx_base_filter.c @@ -23,7 +23,7 @@ #include "gstomx.h" #include "gstomx_interface.h" -#include <string.h> /* for memset, memcpy */ +#include <string.h> /* for memcpy */ enum { @@ -55,10 +55,7 @@ setup_ports (GstOmxBaseFilter *self) core = self->gomx; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Input port configuration. */ diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c index 5ea7c31..bc7e26b 100644 --- a/omx/gstomx_base_sink.c +++ b/omx/gstomx_base_sink.c @@ -26,7 +26,7 @@ #include "gstomx.h" #include "gstomx_interface.h" -#include <string.h> /* for memset, memcpy */ +#include <string.h> /* for memcpy */ static gboolean share_input_buffer; @@ -43,10 +43,7 @@ setup_ports (GstOmxBaseSink *self) core = self->gomx; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Input port configuration. */ diff --git a/omx/gstomx_base_src.c b/omx/gstomx_base_src.c index 54f9032..ba6ad8e 100644 --- a/omx/gstomx_base_src.c +++ b/omx/gstomx_base_src.c @@ -22,7 +22,7 @@ #include "gstomx_base_src.h" #include "gstomx.h" -#include <string.h> /* for memset, memcpy */ +#include <string.h> /* for memcpy */ GSTOMX_BOILERPLATE (GstOmxBaseSrc, gst_omx_base_src, GstBaseSrc, GST_TYPE_BASE_SRC); @@ -34,10 +34,7 @@ setup_ports (GstOmxBaseSrc *self) core = self->gomx; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Input port configuration. */ diff --git a/omx/gstomx_base_videodec.c b/omx/gstomx_base_videodec.c index 5c6d1e1..56b79d1 100644 --- a/omx/gstomx_base_videodec.c +++ b/omx/gstomx_base_videodec.c @@ -22,8 +22,6 @@ #include "gstomx_base_videodec.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxBaseVideoDec, gst_omx_base_videodec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -110,11 +108,7 @@ settings_changed_cb (GOmxCore *core) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); @@ -197,10 +191,7 @@ sink_setcaps (GstPad *pad, } } - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); { const GValue *codec_data; @@ -243,10 +234,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Input port configuration. */ { diff --git a/omx/gstomx_base_videoenc.c b/omx/gstomx_base_videoenc.c index d243fbd..f469494 100644 --- a/omx/gstomx_base_videoenc.c +++ b/omx/gstomx_base_videoenc.c @@ -22,7 +22,7 @@ #include "gstomx_base_videoenc.h" #include "gstomx.h" -#include <string.h> /* for memset, strcmp */ +#include <string.h> /* for strcmp */ enum { @@ -215,10 +215,8 @@ sink_setcaps (GstPad *pad, { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + + G_OMX_INIT_PARAM (param); /* Input port configuration. */ { @@ -257,10 +255,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Output port configuration. */ { diff --git a/omx/gstomx_g711dec.c b/omx/gstomx_g711dec.c index bc2fb18..623101e 100644 --- a/omx/gstomx_g711dec.c +++ b/omx/gstomx_g711dec.c @@ -23,7 +23,7 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset, strcmp */ +#include <string.h> /* for strcmp */ GSTOMX_BOILERPLATE (GstOmxG711Dec, gst_omx_g711dec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); @@ -137,10 +137,7 @@ sink_setcaps (GstPad *pad, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_g711enc.c b/omx/gstomx_g711enc.c index ba8d297..003058e 100644 --- a/omx/gstomx_g711enc.c +++ b/omx/gstomx_g711enc.c @@ -23,7 +23,7 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset, strcmp */ +#include <string.h> /* for strcmp */ GSTOMX_BOILERPLATE (GstOmxG711Enc, gst_omx_g711enc, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); @@ -147,10 +147,7 @@ sink_setcaps (GstPad *pad, { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_g729enc.c b/omx/gstomx_g729enc.c index 67f9b38..89d58db 100644 --- a/omx/gstomx_g729enc.c +++ b/omx/gstomx_g729enc.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - #define DEFAULT_DTX TRUE enum @@ -225,10 +223,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_AUDIO_PARAM_G729TYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_G729TYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioG729, ¶m); diff --git a/omx/gstomx_h263enc.c b/omx/gstomx_h263enc.c index 2d2a1a0..9caaff7 100644 --- a/omx/gstomx_h263enc.c +++ b/omx/gstomx_h263enc.c @@ -22,8 +22,6 @@ #include "gstomx_h263enc.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxH263Enc, gst_omx_h263enc, GstOmxBaseVideoEnc, GST_OMX_BASE_VIDEOENC_TYPE); static GstCaps * @@ -92,10 +90,7 @@ settings_changed_cb (GOmxCore *core) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base_filter->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); diff --git a/omx/gstomx_h264enc.c b/omx/gstomx_h264enc.c index 7d2c2b6..efc4092 100644 --- a/omx/gstomx_h264enc.c +++ b/omx/gstomx_h264enc.c @@ -22,8 +22,6 @@ #include "gstomx_h264enc.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxH264Enc, gst_omx_h264enc, GstOmxBaseVideoEnc, GST_OMX_BASE_VIDEOENC_TYPE); static GstCaps * @@ -91,10 +89,7 @@ settings_changed_cb (GOmxCore *core) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base_filter->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); diff --git a/omx/gstomx_jpegenc.c b/omx/gstomx_jpegenc.c index 63ff8fe..e34c3fc 100644 --- a/omx/gstomx_jpegenc.c +++ b/omx/gstomx_jpegenc.c @@ -206,10 +206,7 @@ settings_changed_cb (GOmxCore *core) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); @@ -287,10 +284,7 @@ sink_setcaps (GstPad *pad, { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Input port configuration. */ { @@ -322,10 +316,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); /* Output port configuration. */ { @@ -341,10 +332,7 @@ omx_setup (GstOmxBaseFilter *omx_base) { OMX_IMAGE_PARAM_QFACTORTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_IMAGE_PARAM_QFACTORTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nQFactor = self->quality; param.nPortIndex = omx_base->out_port->port_index; diff --git a/omx/gstomx_mp2dec.c b/omx/gstomx_mp2dec.c index 6e78e5f..564e14c 100644 --- a/omx/gstomx_mp2dec.c +++ b/omx/gstomx_mp2dec.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxMp2Dec, gst_omx_mp2dec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -119,10 +117,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_mp3dec.c b/omx/gstomx_mp3dec.c index 3824a9d..a766689 100644 --- a/omx/gstomx_mp3dec.c +++ b/omx/gstomx_mp3dec.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxMp3Dec, gst_omx_mp3dec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -119,10 +117,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_mpeg4enc.c b/omx/gstomx_mpeg4enc.c index f365639..3f97fb0 100644 --- a/omx/gstomx_mpeg4enc.c +++ b/omx/gstomx_mpeg4enc.c @@ -22,8 +22,6 @@ #include "gstomx_mpeg4enc.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxMpeg4Enc, gst_omx_mpeg4enc, GstOmxBaseVideoEnc, GST_OMX_BASE_VIDEOENC_TYPE); static GstCaps * @@ -93,10 +91,7 @@ settings_changed_cb (GOmxCore *core) { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base_filter->out_port->port_index; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); diff --git a/omx/gstomx_util.h b/omx/gstomx_util.h index 404df8a..87a1f3f 100644 --- a/omx/gstomx_util.h +++ b/omx/gstomx_util.h @@ -195,4 +195,13 @@ GType type_as_function ## _get_type (void) \ GSTOMX_BOILERPLATE_FULL (type, type_as_function, parent_type, parent_type_macro, \ __GST_DO_NOTHING) +#include <string.h> /* for memset */ +#define G_OMX_INIT_PARAM(param) G_STMT_START { \ + memset (&(param), 0, sizeof ((param))); \ + (param).nSize = sizeof (param); \ + (param).nVersion.s.nVersionMajor = 1; \ + (param).nVersion.s.nVersionMinor = 1; \ + } G_STMT_END + + #endif /* GSTOMX_UTIL_H */ diff --git a/omx/gstomx_videosink.c b/omx/gstomx_videosink.c index 7c5849b..4cfc300 100644 --- a/omx/gstomx_videosink.c +++ b/omx/gstomx_videosink.c @@ -23,7 +23,7 @@ #include "gstomx_base_sink.h" #include "gstomx.h" -#include <string.h> /* for memset, strcmp */ +#include <string.h> /* for strcmp */ GSTOMX_BOILERPLATE (GstOmxVideoSink, gst_omx_videosink, GstOmxBaseSink, GST_OMX_BASE_SINK_TYPE); @@ -161,10 +161,7 @@ setcaps (GstBaseSink *gst_sink, { OMX_PARAM_PORTDEFINITIONTYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); @@ -200,10 +197,7 @@ setcaps (GstBaseSink *gst_sink, { OMX_CONFIG_ROTATIONTYPE config; - memset (&config, 0, sizeof (config)); - config.nSize = sizeof (OMX_CONFIG_ROTATIONTYPE); - config.nVersion.s.nVersionMajor = 1; - config.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (config); config.nPortIndex = omx_base->in_port->port_index; OMX_GetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, &config); @@ -216,10 +210,7 @@ setcaps (GstBaseSink *gst_sink, { OMX_CONFIG_SCALEFACTORTYPE config; - memset (&config, 0, sizeof (config)); - config.nSize = sizeof (OMX_CONFIG_SCALEFACTORTYPE); - config.nVersion.s.nVersionMajor = 1; - config.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (config); config.nPortIndex = omx_base->in_port->port_index; OMX_GetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, &config); diff --git a/omx/gstomx_volume.c b/omx/gstomx_volume.c index 91e116e..61c7f79 100644 --- a/omx/gstomx_volume.c +++ b/omx/gstomx_volume.c @@ -24,8 +24,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxVolume, gst_omx_volume, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -121,10 +119,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); diff --git a/omx/gstomx_vorbisdec.c b/omx/gstomx_vorbisdec.c index aad896a..fa532df 100644 --- a/omx/gstomx_vorbisdec.c +++ b/omx/gstomx_vorbisdec.c @@ -23,8 +23,6 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -#include <string.h> /* for memset */ - GSTOMX_BOILERPLATE (GstOmxVorbisDec, gst_omx_vorbisdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * @@ -114,10 +112,7 @@ settings_changed_cb (GOmxCore *core) { OMX_AUDIO_PARAM_PCMMODETYPE param; - memset (¶m, 0, sizeof (param)); - param.nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param.nVersion.s.nVersionMajor = 1; - param.nVersion.s.nVersionMinor = 1; + G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); -- 1.6.3.2 |
From: Felipe C. <fel...@no...> - 2010-03-08 16:16:16
|
On Mon, Mar 08, 2010 at 12:14:52AM +0100, Rob Clark wrote: > --- > omx/gstomx_aacdec.c | 7 +------ > omx/gstomx_aacenc.c | 22 ++++------------------ > omx/gstomx_adpcmdec.c | 7 +------ > omx/gstomx_adpcmenc.c | 12 ++---------- > omx/gstomx_amrnbdec.c | 7 +------ > omx/gstomx_amrnbenc.c | 12 ++---------- > omx/gstomx_amrwbdec.c | 7 +------ > omx/gstomx_amrwbenc.c | 12 ++---------- > omx/gstomx_audiosink.c | 7 +------ > omx/gstomx_base_filter.c | 7 ++----- > omx/gstomx_base_sink.c | 7 ++----- > omx/gstomx_base_src.c | 7 ++----- > omx/gstomx_base_videodec.c | 18 +++--------------- > omx/gstomx_base_videoenc.c | 13 ++++--------- > omx/gstomx_g711dec.c | 7 ++----- > omx/gstomx_g711enc.c | 7 ++----- > omx/gstomx_g729enc.c | 7 +------ > omx/gstomx_h263enc.c | 7 +------ > omx/gstomx_h264enc.c | 7 +------ > omx/gstomx_jpegenc.c | 20 ++++---------------- > omx/gstomx_mp2dec.c | 7 +------ > omx/gstomx_mp3dec.c | 7 +------ > omx/gstomx_mpeg4enc.c | 7 +------ > omx/gstomx_util.h | 9 +++++++++ > omx/gstomx_videosink.c | 17 ++++------------- > omx/gstomx_volume.c | 7 +------ > omx/gstomx_vorbisdec.c | 7 +------ > 27 files changed, 57 insertions(+), 204 deletions(-) Looks fine to me, -- Felipe Contreras |
From: Rob C. <ro...@ti...> - 2010-03-07 23:20:12
|
The helper functions consolidate error handling. --- omx/gstomx_aacdec.c | 2 +- omx/gstomx_aacenc.c | 14 ++++---- omx/gstomx_adpcmdec.c | 4 +- omx/gstomx_adpcmenc.c | 6 ++-- omx/gstomx_amrnbdec.c | 2 +- omx/gstomx_amrnbenc.c | 6 ++-- omx/gstomx_amrwbdec.c | 2 +- omx/gstomx_amrwbenc.c | 6 ++-- omx/gstomx_audiosink.c | 4 +- omx/gstomx_base_filter.c | 4 +- omx/gstomx_base_sink.c | 2 +- omx/gstomx_base_src.c | 2 +- omx/gstomx_base_videodec.c | 10 +++--- omx/gstomx_base_videoenc.c | 8 ++-- omx/gstomx_filereadersrc.c | 2 +- omx/gstomx_g711dec.c | 4 +- omx/gstomx_g711enc.c | 4 +- omx/gstomx_g729enc.c | 4 +- omx/gstomx_h263enc.c | 2 +- omx/gstomx_h264enc.c | 2 +- omx/gstomx_jpegenc.c | 12 ++++---- omx/gstomx_mp2dec.c | 2 +- omx/gstomx_mp3dec.c | 2 +- omx/gstomx_mpeg4enc.c | 2 +- omx/gstomx_util.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ omx/gstomx_util.h | 4 ++ omx/gstomx_videosink.c | 12 ++++---- omx/gstomx_volume.c | 2 +- omx/gstomx_vorbisdec.c | 2 +- 29 files changed, 132 insertions(+), 62 deletions(-) diff --git a/omx/gstomx_aacdec.c b/omx/gstomx_aacdec.c index b8f0fb2..782ec2f 100644 --- a/omx/gstomx_aacdec.c +++ b/omx/gstomx_aacdec.c @@ -144,7 +144,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; diff --git a/omx/gstomx_aacenc.c b/omx/gstomx_aacenc.c index 2eb0e96..fdcd7fc 100644 --- a/omx/gstomx_aacenc.c +++ b/omx/gstomx_aacenc.c @@ -304,12 +304,12 @@ sink_setcaps (GstPad *pad, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; param.nChannels = channels; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } { @@ -349,7 +349,7 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Output port configuration. */ { param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioAac, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioAac, ¶m); GST_DEBUG_OBJECT (omx_base, "setting bitrate: %i", self->bitrate); param.nBitRate = self->bitrate; @@ -361,7 +361,7 @@ omx_setup (GstOmxBaseFilter *omx_base) self->output_format); param.eAACStreamFormat = self->output_format; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioAac, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioAac, ¶m); } } @@ -373,7 +373,7 @@ omx_setup (GstOmxBaseFilter *omx_base) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; @@ -385,12 +385,12 @@ omx_setup (GstOmxBaseFilter *omx_base) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAac, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioAac, ¶m); param.nSampleRate = rate; param.nChannels = channels; - OMX_SetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAac, ¶m); + g_omx_core_set_param (omx_base->gomx, OMX_IndexParamAudioAac, ¶m); } #endif diff --git a/omx/gstomx_adpcmdec.c b/omx/gstomx_adpcmdec.c index 63151d9..8826387 100644 --- a/omx/gstomx_adpcmdec.c +++ b/omx/gstomx_adpcmdec.c @@ -126,11 +126,11 @@ sink_setcaps (GstPad *pad, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } /* set caps on the srcpad */ diff --git a/omx/gstomx_adpcmenc.c b/omx/gstomx_adpcmenc.c index fabb4bd..cf97200 100644 --- a/omx/gstomx_adpcmenc.c +++ b/omx/gstomx_adpcmenc.c @@ -117,7 +117,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAdpcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioAdpcm, ¶m); rate = param.nSampleRate; } @@ -178,11 +178,11 @@ sink_setcaps (GstPad *pad, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } /* set caps on the srcpad */ diff --git a/omx/gstomx_amrnbdec.c b/omx/gstomx_amrnbdec.c index 6d0cbaf..600a513 100644 --- a/omx/gstomx_amrnbdec.c +++ b/omx/gstomx_amrnbdec.c @@ -117,7 +117,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; diff --git a/omx/gstomx_amrnbenc.c b/omx/gstomx_amrnbenc.c index 5e1ccff..f6401d5 100644 --- a/omx/gstomx_amrnbenc.c +++ b/omx/gstomx_amrnbenc.c @@ -182,7 +182,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAmr, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioAmr, ¶m); channels = param.nChannels; } @@ -229,12 +229,12 @@ sink_setcaps (GstPad *pad, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; param.nChannels = channels; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } return gst_pad_set_caps (pad, caps); diff --git a/omx/gstomx_amrwbdec.c b/omx/gstomx_amrwbdec.c index cb41789..2e77188 100644 --- a/omx/gstomx_amrwbdec.c +++ b/omx/gstomx_amrwbdec.c @@ -117,7 +117,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; diff --git a/omx/gstomx_amrwbenc.c b/omx/gstomx_amrwbenc.c index 352b93f..a4b93d8 100644 --- a/omx/gstomx_amrwbenc.c +++ b/omx/gstomx_amrwbenc.c @@ -182,7 +182,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioAmr, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioAmr, ¶m); channels = param.nChannels; } @@ -229,12 +229,12 @@ sink_setcaps (GstPad *pad, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); param.nSamplingRate = rate; param.nChannels = channels; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } return gst_pad_set_caps (pad, caps); diff --git a/omx/gstomx_audiosink.c b/omx/gstomx_audiosink.c index 5f63d4c..5a3e753 100644 --- a/omx/gstomx_audiosink.c +++ b/omx/gstomx_audiosink.c @@ -110,7 +110,7 @@ setcaps (GstBaseSink *gst_sink, G_OMX_INIT_PARAM (param); param.nPortIndex = self->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); param.nChannels = channels; param.eNumData = is_signed ? OMX_NumericalDataSigned : OMX_NumericalDataUnsigned; @@ -118,7 +118,7 @@ setcaps (GstBaseSink *gst_sink, param.nBitPerSample = width; param.nSamplingRate = rate; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } } diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c index 487e4ee..16730fa 100644 --- a/omx/gstomx_base_filter.c +++ b/omx/gstomx_base_filter.c @@ -60,14 +60,14 @@ setup_ports (GstOmxBaseFilter *self) /* Input port configuration. */ param.nPortIndex = self->in_port->port_index; - OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (core, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->in_port, ¶m); gst_pad_set_element_private (self->sinkpad, self->in_port); /* Output port configuration. */ param.nPortIndex = self->out_port->port_index; - OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (core, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->out_port, ¶m); gst_pad_set_element_private (self->srcpad, self->out_port); diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c index bc7e26b..f990bba 100644 --- a/omx/gstomx_base_sink.c +++ b/omx/gstomx_base_sink.c @@ -48,7 +48,7 @@ setup_ports (GstOmxBaseSink *self) /* Input port configuration. */ param.nPortIndex = self->in_port->port_index; - OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (core, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->in_port, ¶m); gst_pad_set_element_private (self->sinkpad, self->in_port); } diff --git a/omx/gstomx_base_src.c b/omx/gstomx_base_src.c index ba6ad8e..f651644 100644 --- a/omx/gstomx_base_src.c +++ b/omx/gstomx_base_src.c @@ -39,7 +39,7 @@ setup_ports (GstOmxBaseSrc *self) /* Input port configuration. */ param.nPortIndex = self->out_port->port_index; - OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (core, OMX_IndexParamPortDefinition, ¶m); g_omx_port_setup (self->out_port, ¶m); if (self->setup_ports) diff --git a/omx/gstomx_base_videodec.c b/omx/gstomx_base_videodec.c index 56b79d1..74114ef 100644 --- a/omx/gstomx_base_videodec.c +++ b/omx/gstomx_base_videodec.c @@ -111,7 +111,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; height = param.format.video.nFrameHeight; @@ -209,12 +209,12 @@ sink_setcaps (GstPad *pad, /* Input port configuration. */ { param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamPortDefinition, ¶m); param.format.video.nFrameWidth = width; param.format.video.nFrameHeight = height; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamPortDefinition, ¶m); } return gst_pad_set_caps (pad, caps); @@ -239,11 +239,11 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Input port configuration. */ { param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamPortDefinition, ¶m); param.format.video.eCompressionFormat = self->compression_format; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamPortDefinition, ¶m); } } diff --git a/omx/gstomx_base_videoenc.c b/omx/gstomx_base_videoenc.c index f469494..dbb006d 100644 --- a/omx/gstomx_base_videoenc.c +++ b/omx/gstomx_base_videoenc.c @@ -221,7 +221,7 @@ sink_setcaps (GstPad *pad, /* Input port configuration. */ { param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamPortDefinition, ¶m); param.format.video.nFrameWidth = width; param.format.video.nFrameHeight = height; @@ -234,7 +234,7 @@ sink_setcaps (GstPad *pad, gst_value_get_fraction_denominator (framerate); } - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamPortDefinition, ¶m); } } @@ -260,14 +260,14 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Output port configuration. */ { param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamPortDefinition, ¶m); param.format.video.eCompressionFormat = self->compression_format; if (self->bitrate != 0) param.format.video.nBitrate = self->bitrate; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamPortDefinition, ¶m); } } diff --git a/omx/gstomx_filereadersrc.c b/omx/gstomx_filereadersrc.c index f6c8dd1..298b7c3 100644 --- a/omx/gstomx_filereadersrc.c +++ b/omx/gstomx_filereadersrc.c @@ -110,7 +110,7 @@ setup_ports (GstOmxBaseSrc *base_src) { OMX_INDEXTYPE index; OMX_GetExtensionIndex (gomx->omx_handle, "OMX.ST.index.param.filereader.inputfilename", &index); - OMX_SetParameter (gomx->omx_handle, index, self->file_name); + g_omx_core_set_param (gomx, index, self->file_name); } } diff --git a/omx/gstomx_g711dec.c b/omx/gstomx_g711dec.c index 623101e..cd11e4a 100644 --- a/omx/gstomx_g711dec.c +++ b/omx/gstomx_g711dec.c @@ -140,14 +140,14 @@ sink_setcaps (GstPad *pad, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); if (strcmp (mode, "audio/x-alaw") == 0) param.ePCMMode = OMX_AUDIO_PCMModeALaw; else if (strcmp (mode, "audio/x-mulaw") == 0) param.ePCMMode = OMX_AUDIO_PCMModeMULaw; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } /* set caps on the srcpad */ diff --git a/omx/gstomx_g711enc.c b/omx/gstomx_g711enc.c index 003058e..915301a 100644 --- a/omx/gstomx_g711enc.c +++ b/omx/gstomx_g711enc.c @@ -150,14 +150,14 @@ sink_setcaps (GstPad *pad, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioPcm, ¶m); if (strcmp (mode, "audio/x-alaw") == 0) param.ePCMMode = OMX_AUDIO_PCMModeALaw; else if (strcmp (mode, "audio/x-mulaw") == 0) param.ePCMMode = OMX_AUDIO_PCMModeMULaw; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioPcm, ¶m); } leave: diff --git a/omx/gstomx_g729enc.c b/omx/gstomx_g729enc.c index 89d58db..3a388f1 100644 --- a/omx/gstomx_g729enc.c +++ b/omx/gstomx_g729enc.c @@ -226,11 +226,11 @@ omx_setup (GstOmxBaseFilter *omx_base) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamAudioG729, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamAudioG729, ¶m); param.bDTX = self->dtx; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamAudioG729, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamAudioG729, ¶m); } GST_INFO_OBJECT (omx_base, "end"); diff --git a/omx/gstomx_h263enc.c b/omx/gstomx_h263enc.c index 9caaff7..f7b2999 100644 --- a/omx/gstomx_h263enc.c +++ b/omx/gstomx_h263enc.c @@ -93,7 +93,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base_filter->out_port->port_index; - OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (core, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; height = param.format.video.nFrameHeight; diff --git a/omx/gstomx_h264enc.c b/omx/gstomx_h264enc.c index efc4092..95f3894 100644 --- a/omx/gstomx_h264enc.c +++ b/omx/gstomx_h264enc.c @@ -92,7 +92,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base_filter->out_port->port_index; - OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (core, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; height = param.format.video.nFrameHeight; diff --git a/omx/gstomx_jpegenc.c b/omx/gstomx_jpegenc.c index e34c3fc..9d45ce6 100644 --- a/omx/gstomx_jpegenc.c +++ b/omx/gstomx_jpegenc.c @@ -209,7 +209,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamPortDefinition, ¶m); width = param.format.image.nFrameWidth; height = param.format.image.nFrameHeight; @@ -289,13 +289,13 @@ sink_setcaps (GstPad *pad, /* Input port configuration. */ { param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamPortDefinition, ¶m); param.format.image.nFrameWidth = width; param.format.image.nFrameHeight = height; param.format.image.eColorFormat = color_format; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamPortDefinition, ¶m); } } @@ -321,11 +321,11 @@ omx_setup (GstOmxBaseFilter *omx_base) /* Output port configuration. */ { param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamPortDefinition, ¶m); param.format.image.eCompressionFormat = OMX_IMAGE_CodingJPEG; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamPortDefinition, ¶m); } } @@ -337,7 +337,7 @@ omx_setup (GstOmxBaseFilter *omx_base) param.nQFactor = self->quality; param.nPortIndex = omx_base->out_port->port_index; - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamQFactor, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamQFactor, ¶m); } GST_INFO_OBJECT (omx_base, "end"); diff --git a/omx/gstomx_mp2dec.c b/omx/gstomx_mp2dec.c index 564e14c..7f7c312 100644 --- a/omx/gstomx_mp2dec.c +++ b/omx/gstomx_mp2dec.c @@ -120,7 +120,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; diff --git a/omx/gstomx_mp3dec.c b/omx/gstomx_mp3dec.c index a766689..e7bf6ec 100644 --- a/omx/gstomx_mp3dec.c +++ b/omx/gstomx_mp3dec.c @@ -120,7 +120,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; diff --git a/omx/gstomx_mpeg4enc.c b/omx/gstomx_mpeg4enc.c index 3f97fb0..bc524d0 100644 --- a/omx/gstomx_mpeg4enc.c +++ b/omx/gstomx_mpeg4enc.c @@ -94,7 +94,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base_filter->out_port->port_index; - OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (core, OMX_IndexParamPortDefinition, ¶m); width = param.format.video.nFrameWidth; height = param.format.video.nFrameHeight; diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c index b6633e4..128f06a 100644 --- a/omx/gstomx_util.c +++ b/omx/gstomx_util.c @@ -480,9 +480,75 @@ g_omx_core_get_handle (GOmxCore *core) { if (!core->omx_handle) g_omx_core_init (core); + if (!core->omx_handle) + GST_WARNING_OBJECT (core->object, "could not get handle"); return core->omx_handle; } +void +g_omx_core_get_param (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param) +{ + OMX_HANDLETYPE omx_handle = g_omx_core_get_handle (core); + OMX_ERRORTYPE err; + + if (!omx_handle) + return; + + err = OMX_GetParameter (omx_handle, idx, param); + + if (OMX_ErrorNone != err) + GST_WARNING_OBJECT (core->object, "OMX_GetParameter(%d) failed: %s", + idx, omx_error_to_str (err)); +} + +void +g_omx_core_set_param (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param) +{ + OMX_HANDLETYPE omx_handle = g_omx_core_get_handle (core); + OMX_ERRORTYPE err; + + if (!omx_handle) + return; + + err = OMX_SetParameter (omx_handle, idx, param); + + if (OMX_ErrorNone != err) + GST_WARNING_OBJECT (core->object, "OMX_SetParameter(%d) failed: %s", + idx, omx_error_to_str (err)); +} + +void +g_omx_core_get_config (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param) +{ + OMX_HANDLETYPE omx_handle = g_omx_core_get_handle (core); + OMX_ERRORTYPE err; + + if (!omx_handle) + return; + + err = OMX_GetConfig (omx_handle, idx, param); + + if (OMX_ErrorNone != err) + GST_WARNING_OBJECT (core->object, "OMX_GetConfig(%d) failed: %s", + idx, omx_error_to_str (err)); +} + +void +g_omx_core_set_config (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param) +{ + OMX_HANDLETYPE omx_handle = g_omx_core_get_handle (core); + OMX_ERRORTYPE err; + + if (!omx_handle) + return; + + err = OMX_SetConfig (omx_handle, idx, param); + + if (OMX_ErrorNone != err) + GST_WARNING_OBJECT (core->object, "OMX_SetConfig(%d) failed: %s", + idx, omx_error_to_str (err)); +} + /* * Port diff --git a/omx/gstomx_util.h b/omx/gstomx_util.h index 87a1f3f..c647998 100644 --- a/omx/gstomx_util.h +++ b/omx/gstomx_util.h @@ -131,6 +131,10 @@ void g_omx_core_wait_for_done (GOmxCore *core); void g_omx_core_flush_start (GOmxCore *core); void g_omx_core_flush_stop (GOmxCore *core); OMX_HANDLETYPE g_omx_core_get_handle (GOmxCore *core); +void g_omx_core_get_param (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param); +void g_omx_core_set_param (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param); +void g_omx_core_get_config (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param); +void g_omx_core_set_config (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param); GOmxPort *g_omx_core_get_port (GOmxCore *core, guint index); GOmxPort *g_omx_port_new (GOmxCore *core, guint index); diff --git a/omx/gstomx_videosink.c b/omx/gstomx_videosink.c index 4cfc300..30ae6a5 100644 --- a/omx/gstomx_videosink.c +++ b/omx/gstomx_videosink.c @@ -164,7 +164,7 @@ setcaps (GstBaseSink *gst_sink, G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->in_port->port_index; - OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_get_param (gomx, OMX_IndexParamPortDefinition, ¶m); switch (color_format) { @@ -191,7 +191,7 @@ setcaps (GstBaseSink *gst_sink, gst_value_get_fraction_denominator (framerate); } - OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, ¶m); + g_omx_core_set_param (gomx, OMX_IndexParamPortDefinition, ¶m); } { @@ -200,11 +200,11 @@ setcaps (GstBaseSink *gst_sink, G_OMX_INIT_PARAM (config); config.nPortIndex = omx_base->in_port->port_index; - OMX_GetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, &config); + g_omx_core_get_config (gomx, OMX_IndexConfigCommonScale, &config); config.nRotation = self->rotation; - OMX_SetConfig (gomx->omx_handle, OMX_IndexConfigCommonRotate, &config); + g_omx_core_set_config (gomx, OMX_IndexConfigCommonRotate, &config); } { @@ -213,12 +213,12 @@ setcaps (GstBaseSink *gst_sink, G_OMX_INIT_PARAM (config); config.nPortIndex = omx_base->in_port->port_index; - OMX_GetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, &config); + g_omx_core_get_config (gomx, OMX_IndexConfigCommonScale, &config); config.xWidth = self->x_scale; config.xHeight = self->y_scale; - OMX_SetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, &config); + g_omx_core_set_config (gomx, OMX_IndexConfigCommonScale, &config); } } diff --git a/omx/gstomx_volume.c b/omx/gstomx_volume.c index 61c7f79..a9724c3 100644 --- a/omx/gstomx_volume.c +++ b/omx/gstomx_volume.c @@ -122,7 +122,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; diff --git a/omx/gstomx_vorbisdec.c b/omx/gstomx_vorbisdec.c index fa532df..d405dfa 100644 --- a/omx/gstomx_vorbisdec.c +++ b/omx/gstomx_vorbisdec.c @@ -115,7 +115,7 @@ settings_changed_cb (GOmxCore *core) G_OMX_INIT_PARAM (param); param.nPortIndex = omx_base->out_port->port_index; - OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, ¶m); + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); rate = param.nSamplingRate; channels = param.nChannels; -- 1.6.3.2 |
From: Rob C. <ro...@ti...> - 2010-03-07 23:20:32
|
--- omx/gstomx_base_filter.c | 51 +++++++++++++++++++++++++++++++++++++ omx/gstomx_base_sink.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++ omx/gstomx_base_src.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 177 insertions(+), 0 deletions(-) diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c index 16730fa..02cacaa 100644 --- a/omx/gstomx_base_filter.c +++ b/omx/gstomx_base_filter.c @@ -28,6 +28,8 @@ enum { ARG_USE_TIMESTAMPS = GSTOMX_LAST_COMMON_PROP, + ARG_NUM_INPUT_BUFFERS, + ARG_NUM_OUTPUT_BUFFERS, }; static void init_interfaces (GType type); @@ -199,6 +201,31 @@ set_property (GObject *obj, case ARG_USE_TIMESTAMPS: self->use_timestamps = g_value_get_boolean (value); break; + case ARG_NUM_INPUT_BUFFERS: + case ARG_NUM_OUTPUT_BUFFERS: + { + OMX_PARAM_PORTDEFINITIONTYPE param; + OMX_U32 nBufferCountActual = g_value_get_uint (value); + GOmxPort *port = (prop_id == ARG_NUM_INPUT_BUFFERS) ? + self->in_port : self->out_port; + + G_OMX_INIT_PARAM (param); + + param.nPortIndex = port->port_index; + g_omx_core_get_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + + if (nBufferCountActual < param.nBufferCountMin) + { + GST_ERROR_OBJECT (self, "buffer count %lu is less than minimum %lu", + nBufferCountActual, param.nBufferCountMin); + return; + } + + param.nBufferCountActual = nBufferCountActual; + + g_omx_core_set_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + } + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); break; @@ -222,6 +249,21 @@ get_property (GObject *obj, case ARG_USE_TIMESTAMPS: g_value_set_boolean (value, self->use_timestamps); break; + case ARG_NUM_INPUT_BUFFERS: + case ARG_NUM_OUTPUT_BUFFERS: + { + OMX_PARAM_PORTDEFINITIONTYPE param; + GOmxPort *port = (prop_id == ARG_NUM_INPUT_BUFFERS) ? + self->in_port : self->out_port; + + G_OMX_INIT_PARAM (param); + + param.nPortIndex = port->port_index; + g_omx_core_get_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + + g_value_set_uint (value, param.nBufferCountActual); + } + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); break; @@ -258,6 +300,15 @@ type_class_init (gpointer g_class, g_param_spec_boolean ("use-timestamps", "Use timestamps", "Whether or not to use timestamps", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, ARG_NUM_INPUT_BUFFERS, + g_param_spec_uint ("input-buffers", "Input buffers", + "The number of OMX input buffers", + 1, 10, 4, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, ARG_NUM_OUTPUT_BUFFERS, + g_param_spec_uint ("output-buffers", "Output buffers", + "The number of OMX output buffers", + 1, 10, 4, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } } diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c index f990bba..8deeafb 100644 --- a/omx/gstomx_base_sink.c +++ b/omx/gstomx_base_sink.c @@ -28,6 +28,11 @@ #include <string.h> /* for memcpy */ +enum +{ + ARG_NUM_INPUT_BUFFERS = GSTOMX_LAST_COMMON_PROP, +}; + static gboolean share_input_buffer; static inline gboolean omx_init (GstOmxBaseSink *self); @@ -275,6 +280,46 @@ handle_event (GstBaseSink *gst_base, } static void +set_property (GObject *obj, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GstOmxBaseSink *self; + + self = GST_OMX_BASE_SINK (obj); + + switch (prop_id) + { + case ARG_NUM_INPUT_BUFFERS: + { + OMX_PARAM_PORTDEFINITIONTYPE param; + OMX_U32 nBufferCountActual = g_value_get_uint (value); + + G_OMX_INIT_PARAM (param); + + param.nPortIndex = self->in_port->port_index; + g_omx_core_get_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + + if (nBufferCountActual < param.nBufferCountMin) + { + GST_ERROR_OBJECT (self, "buffer count %lu is less than minimum %lu", + nBufferCountActual, param.nBufferCountMin); + return; + } + + param.nBufferCountActual = nBufferCountActual; + + g_omx_core_set_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); + break; + } +} + +static void get_property (GObject *obj, guint prop_id, GValue *value, @@ -288,6 +333,18 @@ get_property (GObject *obj, { switch (prop_id) { + case ARG_NUM_INPUT_BUFFERS: + { + OMX_PARAM_PORTDEFINITIONTYPE param; + + G_OMX_INIT_PARAM (param); + + param.nPortIndex = self->in_port->port_index; + g_omx_core_get_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + + g_value_set_uint (value, param.nBufferCountActual); + } + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); break; @@ -322,9 +379,15 @@ type_class_init (gpointer g_class, /* Properties stuff */ { + gobject_class->set_property = set_property; gobject_class->get_property = get_property; gstomx_install_property_helper (gobject_class); + + g_object_class_install_property (gobject_class, ARG_NUM_INPUT_BUFFERS, + g_param_spec_uint ("input-buffers", "Input buffers", + "The number of OMX input buffers", + 1, 10, 4, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } } diff --git a/omx/gstomx_base_src.c b/omx/gstomx_base_src.c index f651644..e8edf5a 100644 --- a/omx/gstomx_base_src.c +++ b/omx/gstomx_base_src.c @@ -24,6 +24,11 @@ #include <string.h> /* for memcpy */ +enum +{ + ARG_NUM_OUTPUT_BUFFERS = GSTOMX_LAST_COMMON_PROP, +}; + GSTOMX_BOILERPLATE (GstOmxBaseSrc, gst_omx_base_src, GstBaseSrc, GST_TYPE_BASE_SRC); static void @@ -338,6 +343,46 @@ handle_event (GstBaseSrc *gst_base, } static void +set_property (GObject *obj, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GstOmxBaseSrc *self; + + self = GST_OMX_BASE_SRC (obj); + + switch (prop_id) + { + case ARG_NUM_OUTPUT_BUFFERS: + { + OMX_PARAM_PORTDEFINITIONTYPE param; + OMX_U32 nBufferCountActual = g_value_get_uint (value); + + G_OMX_INIT_PARAM (param); + + param.nPortIndex = self->out_port->port_index; + g_omx_core_get_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + + if (nBufferCountActual < param.nBufferCountMin) + { + GST_ERROR_OBJECT (self, "buffer count %lu is less than minimum %lu", + nBufferCountActual, param.nBufferCountMin); + return; + } + + param.nBufferCountActual = nBufferCountActual; + + g_omx_core_set_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); + break; + } +} + +static void get_property (GObject *obj, guint prop_id, GValue *value, @@ -351,6 +396,18 @@ get_property (GObject *obj, { switch (prop_id) { + case ARG_NUM_OUTPUT_BUFFERS: + { + OMX_PARAM_PORTDEFINITIONTYPE param; + + G_OMX_INIT_PARAM (param); + + param.nPortIndex = self->out_port->port_index; + g_omx_core_get_param (self->gomx, OMX_IndexParamPortDefinition, ¶m); + + g_value_set_uint (value, param.nBufferCountActual); + } + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); break; @@ -382,9 +439,15 @@ type_class_init (gpointer g_class, /* Properties stuff */ { + gobject_class->set_property = set_property; gobject_class->get_property = get_property; gstomx_install_property_helper (gobject_class); + + g_object_class_install_property (gobject_class, ARG_NUM_OUTPUT_BUFFERS, + g_param_spec_uint ("output-buffers", "Output buffers", + "The number of OMX output buffers", + 1, 10, 4, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } } -- 1.6.3.2 |
From: Rob C. <ro...@ti...> - 2010-03-07 23:20:45
|
--- omx/gstomx_base_filter.c | 12 ++++++++++++ omx/gstomx_util.c | 2 ++ 2 files changed, 14 insertions(+), 0 deletions(-) diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c index 02cacaa..7f3e536 100644 --- a/omx/gstomx_base_filter.c +++ b/omx/gstomx_base_filter.c @@ -75,6 +75,7 @@ setup_ports (GstOmxBaseFilter *self) if (g_getenv ("OMX_ALLOCATE_ON")) { + GST_DEBUG_OBJECT (self, "OMX_ALLOCATE_ON"); self->in_port->omx_allocate = TRUE; self->out_port->omx_allocate = TRUE; self->share_input_buffer = FALSE; @@ -82,14 +83,25 @@ setup_ports (GstOmxBaseFilter *self) } else if (g_getenv ("OMX_SHARE_HACK_ON")) { + GST_DEBUG_OBJECT (self, "OMX_SHARE_HACK_ON"); self->share_input_buffer = TRUE; self->share_output_buffer = TRUE; } else if (g_getenv ("OMX_SHARE_HACK_OFF")) { + GST_DEBUG_OBJECT (self, "OMX_SHARE_HACK_OFF"); self->share_input_buffer = FALSE; self->share_output_buffer = FALSE; } + else + { + GST_DEBUG_OBJECT (self, "default sharing and allocation"); + } + + GST_DEBUG_OBJECT (self, "omx_allocate: in: %d, out: %d", + self->in_port->omx_allocate, self->out_port->omx_allocate); + GST_DEBUG_OBJECT (self, "share_buffer: in: %d, out: %d", + self->share_input_buffer, self->share_output_buffer); } static GstStateChangeReturn diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c index 128f06a..565bdda 100644 --- a/omx/gstomx_util.c +++ b/omx/gstomx_util.c @@ -628,6 +628,7 @@ port_allocate_buffers (GOmxPort *port) { if (port->omx_allocate) { + GST_DEBUG_OBJECT (port->core->object, "%d: OMX_AllocateBuffer(), size=%"G_GSIZE_FORMAT, i, size); OMX_AllocateBuffer (port->core->omx_handle, &port->buffers[i], port->port_index, @@ -638,6 +639,7 @@ port_allocate_buffers (GOmxPort *port) { gpointer buffer_data; buffer_data = g_malloc (size); + GST_DEBUG_OBJECT (port->core->object, "%d: OMX_UseBuffer(), size=%"G_GSIZE_FORMAT, i, size); OMX_UseBuffer (port->core->omx_handle, &port->buffers[i], port->port_index, -- 1.6.3.2 |
From: Rob C. <ro...@ti...> - 2010-03-07 23:21:16
|
--- omx/gstomx.c | 14 +++++++++++++- omx/gstomx.h | 1 + omx/gstomx_util.c | 23 +++++++++++++++++++++-- omx/gstomx_util.h | 1 + 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/omx/gstomx.c b/omx/gstomx.c index e35ef3d..e199cce 100644 --- a/omx/gstomx.c +++ b/omx/gstomx.c @@ -233,7 +233,7 @@ plugin_init (GstPlugin *plugin) const gchar *element_name = gst_structure_nth_field_name (element_table, i); GstStructure *element = get_element_entry (element_name); const gchar *type_name, *parent_type_name; - const gchar *component_name, *library_name; + const gchar *component_name, *component_role, *library_name; GType type; gint rank; @@ -242,6 +242,7 @@ plugin_init (GstPlugin *plugin) parent_type_name = gst_structure_get_string (element, "parent-type"); type_name = gst_structure_get_string (element, "type"); component_name = gst_structure_get_string (element, "component-name"); + component_role = gst_structure_get_string (element, "component-role"); library_name = gst_structure_get_string (element, "library-name"); if (!type_name || !component_name || !library_name) @@ -316,6 +317,9 @@ gstomx_get_component_info (void *core, str = gst_structure_get_string (element, "component-name"); rcore->component_name = g_strdup (str); + str = gst_structure_get_string (element, "component-role"); + rcore->component_role = g_strdup (str); + return TRUE; } @@ -328,6 +332,11 @@ gstomx_install_property_helper (GObjectClass *gobject_class) "Name of the OpenMAX IL component to use", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, ARG_COMPONENT_ROLE, + g_param_spec_string ("component-role", "Component role", + "Role of the OpenMAX IL component", + NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, ARG_LIBRARY_NAME, g_param_spec_string ("library-name", "Library name", "Name of the OpenMAX IL implementation library to use", @@ -343,6 +352,9 @@ gstomx_get_property_helper (void *core, guint prop_id, GValue *value) case ARG_COMPONENT_NAME: g_value_set_string (value, gomx->component_name); return TRUE; + case ARG_COMPONENT_ROLE: + g_value_set_string (value, gomx->component_role); + return TRUE; case ARG_LIBRARY_NAME: g_value_set_string (value, gomx->library_name); return TRUE; diff --git a/omx/gstomx.h b/omx/gstomx.h index 7557fd4..da66c81 100644 --- a/omx/gstomx.h +++ b/omx/gstomx.h @@ -34,6 +34,7 @@ enum { GSTOMX_ARG_0, ARG_COMPONENT_NAME, + ARG_COMPONENT_ROLE, ARG_LIBRARY_NAME, GSTOMX_LAST_COMMON_PROP }; diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c index 565bdda..513ab6d 100644 --- a/omx/gstomx_util.c +++ b/omx/gstomx_util.c @@ -310,8 +310,10 @@ g_omx_core_init (GOmxCore *core) if (core->omx_handle) return; - GST_DEBUG_OBJECT (core->object, "loading: %s (%s)", - core->component_name, core->library_name); + GST_DEBUG_OBJECT (core->object, "loading: %s %s (%s)", + core->component_name, + core->component_role ? core->component_role : "", + core->library_name); core->imp = request_imp (core->library_name); @@ -327,7 +329,23 @@ g_omx_core_init (GOmxCore *core) core->omx_handle, core->omx_error); if (!core->omx_error) + { core->omx_state = OMX_StateLoaded; + + if (core->component_role) + { + OMX_PARAM_COMPONENTROLETYPE param; + + GST_DEBUG_OBJECT (core->object, "setting component role: %s", + core->component_role); + + G_OMX_INIT_PARAM (param); + + strcpy((char*)param.cRole, core->component_role); + + g_omx_core_set_param (core, OMX_IndexParamStandardComponentRole, ¶m); + } + } } void @@ -354,6 +372,7 @@ g_omx_core_deinit (GOmxCore *core) g_free (core->library_name); g_free (core->component_name); + g_free (core->component_role); release_imp (core->imp); core->imp = NULL; diff --git a/omx/gstomx_util.h b/omx/gstomx_util.h index c647998..64360b9 100644 --- a/omx/gstomx_util.h +++ b/omx/gstomx_util.h @@ -94,6 +94,7 @@ struct GOmxCore gchar *library_name; gchar *component_name; + gchar *component_role; }; struct GOmxPort -- 1.6.3.2 |
From: Rob C. <ro...@ti...> - 2010-03-07 23:22:16
|
Refactor some common functionality, in particular the settings_changed_cb, into an abstract base class. --- omx/Makefile.am | 1 + omx/gstomx_aacdec.c | 45 +-------------------- omx/gstomx_aacdec.h | 6 +- omx/gstomx_adpcmdec.c | 1 + omx/gstomx_amrnbdec.c | 48 +--------------------- omx/gstomx_amrnbdec.h | 6 +- omx/gstomx_amrwbdec.c | 48 +--------------------- omx/gstomx_amrwbdec.h | 6 +- omx/gstomx_base_audiodec.c | 97 ++++++++++++++++++++++++++++++++++++++++++++ omx/gstomx_base_audiodec.h | 53 ++++++++++++++++++++++++ omx/gstomx_g711dec.c | 1 + omx/gstomx_g729dec.c | 4 +- omx/gstomx_g729dec.h | 6 +- omx/gstomx_ilbcdec.c | 1 + omx/gstomx_mp2dec.c | 55 +------------------------ omx/gstomx_mp2dec.h | 6 +- omx/gstomx_mp3dec.c | 56 +------------------------- omx/gstomx_mp3dec.h | 6 +- omx/gstomx_vorbisdec.c | 45 +-------------------- omx/gstomx_vorbisdec.h | 6 +- 20 files changed, 183 insertions(+), 314 deletions(-) create mode 100644 omx/gstomx_base_audiodec.c create mode 100644 omx/gstomx_base_audiodec.h diff --git a/omx/Makefile.am b/omx/Makefile.am index 80e7d9a..7e9f81f 100644 --- a/omx/Makefile.am +++ b/omx/Makefile.am @@ -6,6 +6,7 @@ libgstomx_la_SOURCES = gstomx.c gstomx.h \ gstomx_base_filter.c gstomx_base_filter.h \ gstomx_base_videodec.c gstomx_base_videodec.h \ gstomx_base_videoenc.c gstomx_base_videoenc.h \ + gstomx_base_audiodec.c gstomx_base_audiodec.h \ gstomx_dummy.c gstomx_dummy.h \ gstomx_volume.c gstomx_volume.h \ gstomx_mpeg4dec.c gstomx_mpeg4dec.h \ diff --git a/omx/gstomx_aacdec.c b/omx/gstomx_aacdec.c index 782ec2f..1916216 100644 --- a/omx/gstomx_aacdec.c +++ b/omx/gstomx_aacdec.c @@ -20,10 +20,9 @@ */ #include "gstomx_aacdec.h" -#include "gstomx_base_filter.h" #include "gstomx.h" -GSTOMX_BOILERPLATE (GstOmxAacDec, gst_omx_aacdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); +GSTOMX_BOILERPLATE (GstOmxAacDec, gst_omx_aacdec, GstOmxBaseAudioDec, GST_OMX_BASE_AUDIODEC_TYPE); static GstCaps * generate_src_template (void) @@ -127,46 +126,6 @@ type_class_init (gpointer g_class, { } -static void -settings_changed_cb (GOmxCore *core) -{ - GstOmxBaseFilter *omx_base; - guint rate; - guint channels; - - omx_base = core->object; - - GST_DEBUG_OBJECT (omx_base, "settings changed"); - - { - OMX_AUDIO_PARAM_PCMMODETYPE param; - - G_OMX_INIT_PARAM (param); - - param.nPortIndex = omx_base->out_port->port_index; - g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); - - rate = param.nSamplingRate; - channels = param.nChannels; - } - - { - GstCaps *new_caps; - - new_caps = gst_caps_new_simple ("audio/x-raw-int", - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "rate", G_TYPE_INT, rate, - "signed", G_TYPE_BOOLEAN, TRUE, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "channels", G_TYPE_INT, channels, - NULL); - - GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); - gst_pad_set_caps (omx_base->srcpad, new_caps); - } -} - static gboolean sink_setcaps (GstPad *pad, GstCaps *caps) @@ -204,7 +163,5 @@ type_instance_init (GTypeInstance *instance, omx_base = GST_OMX_BASE_FILTER (instance); - omx_base->gomx->settings_changed_cb = settings_changed_cb; - gst_pad_set_setcaps_function (omx_base->sinkpad, sink_setcaps); } diff --git a/omx/gstomx_aacdec.h b/omx/gstomx_aacdec.h index b53b030..1b431fd 100644 --- a/omx/gstomx_aacdec.h +++ b/omx/gstomx_aacdec.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS typedef struct GstOmxAacDec GstOmxAacDec; typedef struct GstOmxAacDecClass GstOmxAacDecClass; -#include "gstomx_base_filter.h" +#include "gstomx_base_audiodec.h" struct GstOmxAacDec { - GstOmxBaseFilter omx_base; + GstOmxBaseAudioDec omx_base; }; struct GstOmxAacDecClass { - GstOmxBaseFilterClass parent_class; + GstOmxBaseAudioDecClass parent_class; }; GType gst_omx_aacdec_get_type (void); diff --git a/omx/gstomx_adpcmdec.c b/omx/gstomx_adpcmdec.c index 8826387..f665bf0 100644 --- a/omx/gstomx_adpcmdec.c +++ b/omx/gstomx_adpcmdec.c @@ -23,6 +23,7 @@ #include "gstomx_base_filter.h" #include "gstomx.h" +/* should this class extend GstOmxBaseAudioDec? */ GSTOMX_BOILERPLATE (GstOmxAdpcmDec, gst_omx_adpcmdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * diff --git a/omx/gstomx_amrnbdec.c b/omx/gstomx_amrnbdec.c index 600a513..0362731 100644 --- a/omx/gstomx_amrnbdec.c +++ b/omx/gstomx_amrnbdec.c @@ -20,10 +20,9 @@ */ #include "gstomx_amrnbdec.h" -#include "gstomx_base_filter.h" #include "gstomx.h" -GSTOMX_BOILERPLATE (GstOmxAmrNbDec, gst_omx_amrnbdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); +GSTOMX_BOILERPLATE (GstOmxAmrNbDec, gst_omx_amrnbdec, GstOmxBaseAudioDec, GST_OMX_BASE_AUDIODEC_TYPE); static GstCaps * generate_src_template (void) @@ -101,52 +100,7 @@ type_class_init (gpointer g_class, } static void -settings_changed_cb (GOmxCore *core) -{ - GstOmxBaseFilter *omx_base; - guint rate; - guint channels; - - omx_base = core->object; - - GST_DEBUG_OBJECT (omx_base, "settings changed"); - - { - OMX_AUDIO_PARAM_PCMMODETYPE param; - - G_OMX_INIT_PARAM (param); - - param.nPortIndex = omx_base->out_port->port_index; - g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); - - rate = param.nSamplingRate; - channels = param.nChannels; - } - - { - GstCaps *new_caps; - - new_caps = gst_caps_new_simple ("audio/x-raw-int", - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "rate", G_TYPE_INT, rate, - "signed", G_TYPE_BOOLEAN, TRUE, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "channels", G_TYPE_INT, channels, - NULL); - - GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); - gst_pad_set_caps (omx_base->srcpad, new_caps); - } -} - -static void type_instance_init (GTypeInstance *instance, gpointer g_class) { - GstOmxBaseFilter *omx_base; - - omx_base = GST_OMX_BASE_FILTER (instance); - - omx_base->gomx->settings_changed_cb = settings_changed_cb; } diff --git a/omx/gstomx_amrnbdec.h b/omx/gstomx_amrnbdec.h index 3ec66c2..781e4ed 100644 --- a/omx/gstomx_amrnbdec.h +++ b/omx/gstomx_amrnbdec.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS typedef struct GstOmxAmrNbDec GstOmxAmrNbDec; typedef struct GstOmxAmrNbDecClass GstOmxAmrNbDecClass; -#include "gstomx_base_filter.h" +#include "gstomx_base_audiodec.h" struct GstOmxAmrNbDec { - GstOmxBaseFilter omx_base; + GstOmxBaseAudioDec omx_base; }; struct GstOmxAmrNbDecClass { - GstOmxBaseFilterClass parent_class; + GstOmxBaseAudioDecClass parent_class; }; GType gst_omx_amrnbdec_get_type (void); diff --git a/omx/gstomx_amrwbdec.c b/omx/gstomx_amrwbdec.c index 2e77188..581b3da 100644 --- a/omx/gstomx_amrwbdec.c +++ b/omx/gstomx_amrwbdec.c @@ -20,10 +20,9 @@ */ #include "gstomx_amrwbdec.h" -#include "gstomx_base_filter.h" #include "gstomx.h" -GSTOMX_BOILERPLATE (GstOmxAmrWbDec, gst_omx_amrwbdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); +GSTOMX_BOILERPLATE (GstOmxAmrWbDec, gst_omx_amrwbdec, GstOmxBaseAudioDec, GST_OMX_BASE_AUDIODEC_TYPE); static GstCaps * generate_src_template (void) @@ -101,52 +100,7 @@ type_class_init (gpointer g_class, } static void -settings_changed_cb (GOmxCore *core) -{ - GstOmxBaseFilter *omx_base; - guint rate; - guint channels; - - omx_base = core->object; - - GST_DEBUG_OBJECT (omx_base, "settings changed"); - - { - OMX_AUDIO_PARAM_PCMMODETYPE param; - - G_OMX_INIT_PARAM (param); - - param.nPortIndex = omx_base->out_port->port_index; - g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); - - rate = param.nSamplingRate; - channels = param.nChannels; - } - - { - GstCaps *new_caps; - - new_caps = gst_caps_new_simple ("audio/x-raw-int", - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "rate", G_TYPE_INT, rate, - "signed", G_TYPE_BOOLEAN, TRUE, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "channels", G_TYPE_INT, channels, - NULL); - - GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); - gst_pad_set_caps (omx_base->srcpad, new_caps); - } -} - -static void type_instance_init (GTypeInstance *instance, gpointer g_class) { - GstOmxBaseFilter *omx_base; - - omx_base = GST_OMX_BASE_FILTER (instance); - - omx_base->gomx->settings_changed_cb = settings_changed_cb; } diff --git a/omx/gstomx_amrwbdec.h b/omx/gstomx_amrwbdec.h index ae0a2cf..61870b8 100644 --- a/omx/gstomx_amrwbdec.h +++ b/omx/gstomx_amrwbdec.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS typedef struct GstOmxAmrWbDec GstOmxAmrWbDec; typedef struct GstOmxAmrWbDecClass GstOmxAmrWbDecClass; -#include "gstomx_base_filter.h" +#include "gstomx_base_audiodec.h" struct GstOmxAmrWbDec { - GstOmxBaseFilter omx_base; + GstOmxBaseAudioDec omx_base; }; struct GstOmxAmrWbDecClass { - GstOmxBaseFilterClass parent_class; + GstOmxBaseAudioDecClass parent_class; }; GType gst_omx_amrwbdec_get_type (void); diff --git a/omx/gstomx_base_audiodec.c b/omx/gstomx_base_audiodec.c new file mode 100644 index 0000000..45037a6 --- /dev/null +++ b/omx/gstomx_base_audiodec.c @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ + * + * Description: Base audio decoder element + * Created on: Aug 2, 2009 + * Author: Rob Clark <ro...@ti...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "gstomx_base_audiodec.h" +#include "gstomx.h" + +GSTOMX_BOILERPLATE (GstOmxBaseAudioDec, gst_omx_base_audiodec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); + +static void +type_base_init (gpointer g_class) +{ +} + +static void +type_class_init (gpointer g_class, + gpointer class_data) +{ +} + +static void +settings_changed_cb (GOmxCore *core) +{ + GstOmxBaseFilter *omx_base; + guint rate; + guint channels; + + omx_base = core->object; + + GST_DEBUG_OBJECT (omx_base, "settings changed"); + + { + OMX_AUDIO_PARAM_PCMMODETYPE param; + + G_OMX_INIT_PARAM (param); + + param.nPortIndex = omx_base->out_port->port_index; + g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); + + rate = param.nSamplingRate; + channels = param.nChannels; + if (rate == 0) + { + /** @todo: this shouldn't happen. */ + GST_WARNING_OBJECT (omx_base, "Bad samplerate"); + rate = 44100; + } + } + + { + GstCaps *new_caps; + + new_caps = gst_caps_new_simple ("audio/x-raw-int", + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "rate", G_TYPE_INT, rate, + "signed", G_TYPE_BOOLEAN, TRUE, + "endianness", G_TYPE_INT, G_BYTE_ORDER, + "channels", G_TYPE_INT, channels, + NULL); + + GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); + gst_pad_set_caps (omx_base->srcpad, new_caps); + } +} + +static void +type_instance_init (GTypeInstance *instance, + gpointer g_class) +{ + GstOmxBaseFilter *omx_base; + + omx_base = GST_OMX_BASE_FILTER (instance); + + GST_DEBUG_OBJECT (omx_base, "start"); + + omx_base->gomx->settings_changed_cb = settings_changed_cb; +} diff --git a/omx/gstomx_base_audiodec.h b/omx/gstomx_base_audiodec.h new file mode 100644 index 0000000..83472e6 --- /dev/null +++ b/omx/gstomx_base_audiodec.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ + * + * Description: Base audio decoder element + * Created on: Aug 2, 2009 + * Author: Rob Clark <ro...@ti...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef GSTOMX_BASE_AUDIODEC_H +#define GSTOMX_BASE_AUDIODEC_H + +#include <gst/gst.h> + +G_BEGIN_DECLS + +#define GST_OMX_BASE_AUDIODEC(obj) (GstOmxBaseAudioDec *) (obj) +#define GST_OMX_BASE_AUDIODEC_TYPE (gst_omx_base_audiodec_get_type ()) + +typedef struct GstOmxBaseAudioDec GstOmxBaseAudioDec; +typedef struct GstOmxBaseAudioDecClass GstOmxBaseAudioDecClass; + +#include "gstomx_base_filter.h" + +struct GstOmxBaseAudioDec +{ + GstOmxBaseFilter omx_base; +}; + +struct GstOmxBaseAudioDecClass +{ + GstOmxBaseFilterClass parent_class; +}; + +GType gst_omx_base_audiodec_get_type (void); + +G_END_DECLS + +#endif /* GSTOMX_BASE_AUDIODEC_H */ diff --git a/omx/gstomx_g711dec.c b/omx/gstomx_g711dec.c index cd11e4a..c6c7db0 100644 --- a/omx/gstomx_g711dec.c +++ b/omx/gstomx_g711dec.c @@ -25,6 +25,7 @@ #include <string.h> /* for strcmp */ +/* should this class extend GstOmxBaseAudioDec? */ GSTOMX_BOILERPLATE (GstOmxG711Dec, gst_omx_g711dec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * diff --git a/omx/gstomx_g729dec.c b/omx/gstomx_g729dec.c index 666d5ab..a558011 100644 --- a/omx/gstomx_g729dec.c +++ b/omx/gstomx_g729dec.c @@ -20,10 +20,9 @@ */ #include "gstomx_g729dec.h" -#include "gstomx_base_filter.h" #include "gstomx.h" -GSTOMX_BOILERPLATE (GstOmxG729Dec, gst_omx_g729dec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); +GSTOMX_BOILERPLATE (GstOmxG729Dec, gst_omx_g729dec, GstOmxBaseAudioDec, GST_OMX_BASE_AUDIODEC_TYPE); static GstCaps * generate_src_template (void) @@ -105,6 +104,7 @@ type_class_init (gpointer g_class, { } +/* should we be overriding the settings_changed_cb from parent class like this?? */ static void settings_changed_cb (GOmxCore *core) { diff --git a/omx/gstomx_g729dec.h b/omx/gstomx_g729dec.h index abe5504..49e525f 100644 --- a/omx/gstomx_g729dec.h +++ b/omx/gstomx_g729dec.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS typedef struct GstOmxG729Dec GstOmxG729Dec; typedef struct GstOmxG729DecClass GstOmxG729DecClass; -#include "gstomx_base_filter.h" +#include "gstomx_base_audiodec.h" struct GstOmxG729Dec { - GstOmxBaseFilter omx_base; + GstOmxBaseAudioDec omx_base; }; struct GstOmxG729DecClass { - GstOmxBaseFilterClass parent_class; + GstOmxBaseAudioDecClass parent_class; }; GType gst_omx_g729dec_get_type (void); diff --git a/omx/gstomx_ilbcdec.c b/omx/gstomx_ilbcdec.c index 9d03f01..ff899ac 100644 --- a/omx/gstomx_ilbcdec.c +++ b/omx/gstomx_ilbcdec.c @@ -23,6 +23,7 @@ #include "gstomx_base_filter.h" #include "gstomx.h" +/* should this class extend GstOmxBaseAudioDec? */ GSTOMX_BOILERPLATE (GstOmxIlbcDec, gst_omx_ilbcdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); static GstCaps * diff --git a/omx/gstomx_mp2dec.c b/omx/gstomx_mp2dec.c index 7f7c312..319ef8e 100644 --- a/omx/gstomx_mp2dec.c +++ b/omx/gstomx_mp2dec.c @@ -23,7 +23,7 @@ #include "gstomx_base_filter.h" #include "gstomx.h" -GSTOMX_BOILERPLATE (GstOmxMp2Dec, gst_omx_mp2dec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); +GSTOMX_BOILERPLATE (GstOmxMp2Dec, gst_omx_mp2dec, GstOmxBaseAudioDec, GST_OMX_BASE_AUDIODEC_TYPE); static GstCaps * generate_src_template (void) @@ -104,60 +104,7 @@ type_class_init (gpointer g_class, } static void -settings_changed_cb (GOmxCore *core) -{ - GstOmxBaseFilter *omx_base; - guint rate; - guint channels; - - omx_base = core->object; - - GST_DEBUG_OBJECT (omx_base, "settings changed"); - - { - OMX_AUDIO_PARAM_PCMMODETYPE param; - - G_OMX_INIT_PARAM (param); - - param.nPortIndex = omx_base->out_port->port_index; - g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); - - rate = param.nSamplingRate; - channels = param.nChannels; - if (rate == 0) - { - /** @todo: this shouldn't happen. */ - GST_WARNING_OBJECT (omx_base, "Bad samplerate"); - rate = 44100; - } - } - - { - GstCaps *new_caps; - - new_caps = gst_caps_new_simple ("audio/x-raw-int", - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "rate", G_TYPE_INT, rate, - "signed", G_TYPE_BOOLEAN, TRUE, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "channels", G_TYPE_INT, channels, - NULL); - - GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); - gst_pad_set_caps (omx_base->srcpad, new_caps); - } -} - -static void type_instance_init (GTypeInstance *instance, gpointer g_class) { - GstOmxBaseFilter *omx_base; - - omx_base = GST_OMX_BASE_FILTER (instance); - - GST_DEBUG_OBJECT (omx_base, "start"); - - omx_base->gomx->settings_changed_cb = settings_changed_cb; } diff --git a/omx/gstomx_mp2dec.h b/omx/gstomx_mp2dec.h index 877d3c5..c6c517e 100644 --- a/omx/gstomx_mp2dec.h +++ b/omx/gstomx_mp2dec.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS typedef struct GstOmxMp2Dec GstOmxMp2Dec; typedef struct GstOmxMp2DecClass GstOmxMp2DecClass; -#include "gstomx_base_filter.h" +#include "gstomx_base_audiodec.h" struct GstOmxMp2Dec { - GstOmxBaseFilter omx_base; + GstOmxBaseAudioDec omx_base; }; struct GstOmxMp2DecClass { - GstOmxBaseFilterClass parent_class; + GstOmxBaseAudioDecClass parent_class; }; GType gst_omx_mp2dec_get_type (void); diff --git a/omx/gstomx_mp3dec.c b/omx/gstomx_mp3dec.c index e7bf6ec..8a1f465 100644 --- a/omx/gstomx_mp3dec.c +++ b/omx/gstomx_mp3dec.c @@ -20,10 +20,9 @@ */ #include "gstomx_mp3dec.h" -#include "gstomx_base_filter.h" #include "gstomx.h" -GSTOMX_BOILERPLATE (GstOmxMp3Dec, gst_omx_mp3dec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); +GSTOMX_BOILERPLATE (GstOmxMp3Dec, gst_omx_mp3dec, GstOmxBaseAudioDec, GST_OMX_BASE_AUDIODEC_TYPE); static GstCaps * generate_src_template (void) @@ -104,60 +103,7 @@ type_class_init (gpointer g_class, } static void -settings_changed_cb (GOmxCore *core) -{ - GstOmxBaseFilter *omx_base; - guint rate; - guint channels; - - omx_base = core->object; - - GST_DEBUG_OBJECT (omx_base, "settings changed"); - - { - OMX_AUDIO_PARAM_PCMMODETYPE param; - - G_OMX_INIT_PARAM (param); - - param.nPortIndex = omx_base->out_port->port_index; - g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); - - rate = param.nSamplingRate; - channels = param.nChannels; - if (rate == 0) - { - /** @todo: this shouldn't happen. */ - GST_WARNING_OBJECT (omx_base, "Bad samplerate"); - rate = 44100; - } - } - - { - GstCaps *new_caps; - - new_caps = gst_caps_new_simple ("audio/x-raw-int", - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "rate", G_TYPE_INT, rate, - "signed", G_TYPE_BOOLEAN, TRUE, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "channels", G_TYPE_INT, channels, - NULL); - - GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); - gst_pad_set_caps (omx_base->srcpad, new_caps); - } -} - -static void type_instance_init (GTypeInstance *instance, gpointer g_class) { - GstOmxBaseFilter *omx_base; - - omx_base = GST_OMX_BASE_FILTER (instance); - - GST_DEBUG_OBJECT (omx_base, "start"); - - omx_base->gomx->settings_changed_cb = settings_changed_cb; } diff --git a/omx/gstomx_mp3dec.h b/omx/gstomx_mp3dec.h index f353ee5..c0a7d78 100644 --- a/omx/gstomx_mp3dec.h +++ b/omx/gstomx_mp3dec.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS typedef struct GstOmxMp3Dec GstOmxMp3Dec; typedef struct GstOmxMp3DecClass GstOmxMp3DecClass; -#include "gstomx_base_filter.h" +#include "gstomx_base_audiodec.h" struct GstOmxMp3Dec { - GstOmxBaseFilter omx_base; + GstOmxBaseAudioDec omx_base; }; struct GstOmxMp3DecClass { - GstOmxBaseFilterClass parent_class; + GstOmxBaseAudioDecClass parent_class; }; GType gst_omx_mp3dec_get_type (void); diff --git a/omx/gstomx_vorbisdec.c b/omx/gstomx_vorbisdec.c index d405dfa..afd53fd 100644 --- a/omx/gstomx_vorbisdec.c +++ b/omx/gstomx_vorbisdec.c @@ -20,10 +20,9 @@ */ #include "gstomx_vorbisdec.h" -#include "gstomx_base_filter.h" #include "gstomx.h" -GSTOMX_BOILERPLATE (GstOmxVorbisDec, gst_omx_vorbisdec, GstOmxBaseFilter, GST_OMX_BASE_FILTER_TYPE); +GSTOMX_BOILERPLATE (GstOmxVorbisDec, gst_omx_vorbisdec, GstOmxBaseAudioDec, GST_OMX_BASE_AUDIODEC_TYPE); static GstCaps * generate_src_template (void) @@ -99,46 +98,6 @@ type_class_init (gpointer g_class, } static void -settings_changed_cb (GOmxCore *core) -{ - GstOmxBaseFilter *omx_base; - guint rate; - guint channels; - - omx_base = core->object; - - GST_DEBUG_OBJECT (omx_base, "settings changed"); - - { - OMX_AUDIO_PARAM_PCMMODETYPE param; - - G_OMX_INIT_PARAM (param); - - param.nPortIndex = omx_base->out_port->port_index; - g_omx_core_get_param (omx_base->gomx, OMX_IndexParamAudioPcm, ¶m); - - rate = param.nSamplingRate; - channels = param.nChannels; - } - - { - GstCaps *new_caps; - - new_caps = gst_caps_new_simple ("audio/x-raw-int", - "rate", G_TYPE_INT, rate, - "signed", G_TYPE_BOOLEAN, TRUE, - "channels", G_TYPE_INT, channels, - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - NULL); - - GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); - gst_pad_set_caps (omx_base->srcpad, new_caps); - } -} - -static void type_instance_init (GTypeInstance *instance, gpointer g_class) { @@ -149,6 +108,4 @@ type_instance_init (GTypeInstance *instance, GST_DEBUG_OBJECT (omx_base, "start"); omx_base->use_timestamps = FALSE; - - omx_base->gomx->settings_changed_cb = settings_changed_cb; } diff --git a/omx/gstomx_vorbisdec.h b/omx/gstomx_vorbisdec.h index 05ce070..c7737a3 100644 --- a/omx/gstomx_vorbisdec.h +++ b/omx/gstomx_vorbisdec.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS typedef struct GstOmxVorbisDec GstOmxVorbisDec; typedef struct GstOmxVorbisDecClass GstOmxVorbisDecClass; -#include "gstomx_base_filter.h" +#include "gstomx_base_audiodec.h" struct GstOmxVorbisDec { - GstOmxBaseFilter omx_base; + GstOmxBaseAudioDec omx_base; }; struct GstOmxVorbisDecClass { - GstOmxBaseFilterClass parent_class; + GstOmxBaseAudioDecClass parent_class; }; GType gst_omx_vorbisdec_get_type (void); -- 1.6.3.2 |
From: Felipe C. <fel...@no...> - 2010-03-08 15:57:47
|
On Mon, Mar 08, 2010 at 12:14:48AM +0100, Rob Clark wrote: > The port objects are constructed up front (so they are valid at any point in the element's lifecycle), and bound to a port_index at construction time. > > This will be useful later to enable properties that directly set port params. It's not clear to me what this patch is doing, and why. > --- > omx/gstomx_base_filter.c | 13 +++++------ > omx/gstomx_base_sink.c | 10 +++----- > omx/gstomx_base_src.c | 10 +++----- > omx/gstomx_util.c | 47 +++++++++++++++++++-------------------------- > omx/gstomx_util.h | 4 +- > 5 files changed, 36 insertions(+), 48 deletions(-) > > diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c > index 44841c3..ddb480f 100644 > --- a/omx/gstomx_base_filter.c > +++ b/omx/gstomx_base_filter.c > @@ -64,14 +64,14 @@ setup_ports (GstOmxBaseFilter *self) > > param.nPortIndex = 0; > OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); > - self->in_port = g_omx_core_setup_port (core, ¶m); > + g_omx_port_setup (self->in_port, ¶m); > gst_pad_set_element_private (self->sinkpad, self->in_port); > > /* Output port configuration. */ > > param.nPortIndex = 1; > OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); > - self->out_port = g_omx_core_setup_port (core, ¶m); > + g_omx_port_setup (self->out_port, ¶m); > gst_pad_set_element_private (self->srcpad, self->out_port); > > if (g_getenv ("OMX_ALLOCATE_ON")) > @@ -877,11 +877,10 @@ type_instance_init (GTypeInstance *instance, > self->use_timestamps = TRUE; > > /* GOmx */ > - { > - GOmxCore *gomx; > - self->gomx = gomx = g_omx_core_new (self); > - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); > - } > + self->gomx = g_omx_core_new (self); > + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); > + self->in_port = g_omx_core_get_port (self->gomx, 0); > + self->out_port = g_omx_core_get_port (self->gomx, 1); This code reorganization was not advertised, and it makes the actual change more difficult to see. > > self->ready_lock = g_mutex_new (); > > diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c > index 6838f08..1c7888c 100644 > --- a/omx/gstomx_base_sink.c > +++ b/omx/gstomx_base_sink.c > @@ -52,7 +52,7 @@ setup_ports (GstOmxBaseSink *self) > > param.nPortIndex = 0; > OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); > - self->in_port = g_omx_core_setup_port (core, ¶m); > + g_omx_port_setup (self->in_port, ¶m); > gst_pad_set_element_private (self->sinkpad, self->in_port); > } > > @@ -417,11 +417,9 @@ type_instance_init (GTypeInstance *instance, > GST_LOG_OBJECT (self, "begin"); > > /* GOmx */ > - { > - GOmxCore *gomx; > - self->gomx = gomx = g_omx_core_new (self); > - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); > - } > + self->gomx = g_omx_core_new (self); > + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); > + self->in_port = g_omx_core_get_port (self->gomx, 0); Unneeded reorganization. > > { > GstPad *sinkpad; > diff --git a/omx/gstomx_base_src.c b/omx/gstomx_base_src.c > index dd2be9e..a19c08f 100644 > --- a/omx/gstomx_base_src.c > +++ b/omx/gstomx_base_src.c > @@ -43,7 +43,7 @@ setup_ports (GstOmxBaseSrc *self) > > param.nPortIndex = 0; > OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); > - self->out_port = g_omx_core_setup_port (core, ¶m); > + g_omx_port_setup (self->out_port, ¶m); > > if (self->setup_ports) > { > @@ -402,11 +402,9 @@ type_instance_init (GTypeInstance *instance, > GST_LOG_OBJECT (self, "begin"); > > /* GOmx */ > - { > - GOmxCore *gomx; > - self->gomx = gomx = g_omx_core_new (self); > - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); > - } > + self->gomx = g_omx_core_new (self); > + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); > + self->out_port = g_omx_core_get_port (self->gomx, 1); Unneeded reorganization. > > GST_LOG_OBJECT (self, "end"); > } > diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c > index b2a96c8..d8cc7f0 100644 > --- a/omx/gstomx_util.c > +++ b/omx/gstomx_util.c > @@ -76,9 +76,7 @@ omx_state_to_str (OMX_STATETYPE omx_state); > static inline const char * > omx_error_to_str (OMX_ERRORTYPE omx_error); > > -static inline GOmxPort * > -g_omx_core_get_port (GOmxCore *core, > - guint index); > +static inline GOmxPort * get_port (GOmxCore *core, guint index); > > static inline void > port_free_buffers (GOmxPort *port); > @@ -133,7 +131,7 @@ core_for_each_port (GOmxCore *core, > { > GOmxPort *port; > > - port = g_omx_core_get_port (core, index); > + port = get_port (core, index); g_omx_core_get_port() != get_port() So this theoretically is changing the behavior, and that wasn't mentioned in the commit message. I think moving from g_omx_core_get_port() to get_port() is a good idea, but perhaps should be a separate patch. > > if (port) > func (port); > @@ -396,37 +394,30 @@ g_omx_core_unload (GOmxCore *core) > g_ptr_array_clear (core->ports); > } > > -GOmxPort * > -g_omx_core_setup_port (GOmxCore *core, > - OMX_PARAM_PORTDEFINITIONTYPE *omx_port) > +static inline GOmxPort * > +get_port (GOmxCore *core, guint index) > { > - GOmxPort *port; > - guint index; > - > - index = omx_port->nPortIndex; > - port = g_omx_core_get_port (core, index); > - > - if (!port) > + if (G_LIKELY (index < core->ports->len)) > { > - port = g_omx_port_new (core); > - g_ptr_array_insert (core->ports, index, port); > + return g_ptr_array_index (core->ports, index); > } > > - g_omx_port_setup (port, omx_port); > - > - return port; > + return NULL; > } > > -static inline GOmxPort * > +GOmxPort * > g_omx_core_get_port (GOmxCore *core, > guint index) > { > - if (G_LIKELY (index < core->ports->len)) > + GOmxPort *port = get_port (core, index); > + > + if (!port) > { > - return g_ptr_array_index (core->ports, index); > + port = g_omx_port_new (core, index); > + g_ptr_array_insert (core->ports, index, port); You are changing the semantics of the function; now it's not getting a port; it's creating a port. It's more like g_omx_core_new_port(). -- Felipe Contreras |
From: Rob C. <ro...@ti...> - 2010-03-08 16:32:04
|
On Mar 8, 2010, at 9:57 AM, Felipe Contreras wrote: > On Mon, Mar 08, 2010 at 12:14:48AM +0100, Rob Clark wrote: >> The port objects are constructed up front (so they are valid at any point in the element's lifecycle), and bound to a port_index at construction time. >> >> This will be useful later to enable properties that directly set port params. > > It's not clear to me what this patch is doing, and why. Basically it is creating port in element constructor, instead of later at setup_ports() time.. The internal function within gstomx_util.c used to access ports (g_omx_core_get_port()) is renamed to get_port() because it is not public API. A new g_omx_core_get_port() which constructs the port if it has not already been constructed is created. (So maybe more correctly it would be g_omx_core_get_port_or_construct_new_port_if_it_does_not_exist() ;-)) But since this is only used from type_instance_init() fxns, it could be replaced by g_omx_core_new() which does not check if the port already exists yet or not and is simply a constructor function. BR, -R > >> --- >> omx/gstomx_base_filter.c | 13 +++++------ >> omx/gstomx_base_sink.c | 10 +++----- >> omx/gstomx_base_src.c | 10 +++----- >> omx/gstomx_util.c | 47 +++++++++++++++++++-------------------------- >> omx/gstomx_util.h | 4 +- >> 5 files changed, 36 insertions(+), 48 deletions(-) >> >> diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c >> index 44841c3..ddb480f 100644 >> --- a/omx/gstomx_base_filter.c >> +++ b/omx/gstomx_base_filter.c >> @@ -64,14 +64,14 @@ setup_ports (GstOmxBaseFilter *self) >> >> param.nPortIndex = 0; >> OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); >> - self->in_port = g_omx_core_setup_port (core, ¶m); >> + g_omx_port_setup (self->in_port, ¶m); >> gst_pad_set_element_private (self->sinkpad, self->in_port); >> >> /* Output port configuration. */ >> >> param.nPortIndex = 1; >> OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); >> - self->out_port = g_omx_core_setup_port (core, ¶m); >> + g_omx_port_setup (self->out_port, ¶m); >> gst_pad_set_element_private (self->srcpad, self->out_port); >> >> if (g_getenv ("OMX_ALLOCATE_ON")) >> @@ -877,11 +877,10 @@ type_instance_init (GTypeInstance *instance, >> self->use_timestamps = TRUE; >> >> /* GOmx */ >> - { >> - GOmxCore *gomx; >> - self->gomx = gomx = g_omx_core_new (self); >> - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); >> - } >> + self->gomx = g_omx_core_new (self); >> + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); >> + self->in_port = g_omx_core_get_port (self->gomx, 0); >> + self->out_port = g_omx_core_get_port (self->gomx, 1); > > This code reorganization was not advertised, and it makes the actual > change more difficult to see. > >> >> self->ready_lock = g_mutex_new (); >> >> diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c >> index 6838f08..1c7888c 100644 >> --- a/omx/gstomx_base_sink.c >> +++ b/omx/gstomx_base_sink.c >> @@ -52,7 +52,7 @@ setup_ports (GstOmxBaseSink *self) >> >> param.nPortIndex = 0; >> OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); >> - self->in_port = g_omx_core_setup_port (core, ¶m); >> + g_omx_port_setup (self->in_port, ¶m); >> gst_pad_set_element_private (self->sinkpad, self->in_port); >> } >> >> @@ -417,11 +417,9 @@ type_instance_init (GTypeInstance *instance, >> GST_LOG_OBJECT (self, "begin"); >> >> /* GOmx */ >> - { >> - GOmxCore *gomx; >> - self->gomx = gomx = g_omx_core_new (self); >> - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); >> - } >> + self->gomx = g_omx_core_new (self); >> + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); >> + self->in_port = g_omx_core_get_port (self->gomx, 0); > > Unneeded reorganization. > >> >> { >> GstPad *sinkpad; >> diff --git a/omx/gstomx_base_src.c b/omx/gstomx_base_src.c >> index dd2be9e..a19c08f 100644 >> --- a/omx/gstomx_base_src.c >> +++ b/omx/gstomx_base_src.c >> @@ -43,7 +43,7 @@ setup_ports (GstOmxBaseSrc *self) >> >> param.nPortIndex = 0; >> OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, ¶m); >> - self->out_port = g_omx_core_setup_port (core, ¶m); >> + g_omx_port_setup (self->out_port, ¶m); >> >> if (self->setup_ports) >> { >> @@ -402,11 +402,9 @@ type_instance_init (GTypeInstance *instance, >> GST_LOG_OBJECT (self, "begin"); >> >> /* GOmx */ >> - { >> - GOmxCore *gomx; >> - self->gomx = gomx = g_omx_core_new (self); >> - gstomx_get_component_info (gomx, G_TYPE_FROM_CLASS (g_class)); >> - } >> + self->gomx = g_omx_core_new (self); >> + gstomx_get_component_info (self->gomx, G_TYPE_FROM_CLASS (g_class)); >> + self->out_port = g_omx_core_get_port (self->gomx, 1); > > Unneeded reorganization. > >> >> GST_LOG_OBJECT (self, "end"); >> } >> diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c >> index b2a96c8..d8cc7f0 100644 >> --- a/omx/gstomx_util.c >> +++ b/omx/gstomx_util.c >> @@ -76,9 +76,7 @@ omx_state_to_str (OMX_STATETYPE omx_state); >> static inline const char * >> omx_error_to_str (OMX_ERRORTYPE omx_error); >> >> -static inline GOmxPort * >> -g_omx_core_get_port (GOmxCore *core, >> - guint index); >> +static inline GOmxPort * get_port (GOmxCore *core, guint index); >> >> static inline void >> port_free_buffers (GOmxPort *port); >> @@ -133,7 +131,7 @@ core_for_each_port (GOmxCore *core, >> { >> GOmxPort *port; >> >> - port = g_omx_core_get_port (core, index); >> + port = get_port (core, index); > > g_omx_core_get_port() != get_port() > > So this theoretically is changing the behavior, and that wasn't > mentioned in the commit message. > > I think moving from g_omx_core_get_port() to get_port() is a good idea, > but perhaps should be a separate patch. > >> >> if (port) >> func (port); >> @@ -396,37 +394,30 @@ g_omx_core_unload (GOmxCore *core) >> g_ptr_array_clear (core->ports); >> } >> >> -GOmxPort * >> -g_omx_core_setup_port (GOmxCore *core, >> - OMX_PARAM_PORTDEFINITIONTYPE *omx_port) >> +static inline GOmxPort * >> +get_port (GOmxCore *core, guint index) >> { >> - GOmxPort *port; >> - guint index; >> - >> - index = omx_port->nPortIndex; >> - port = g_omx_core_get_port (core, index); >> - >> - if (!port) >> + if (G_LIKELY (index < core->ports->len)) >> { >> - port = g_omx_port_new (core); >> - g_ptr_array_insert (core->ports, index, port); >> + return g_ptr_array_index (core->ports, index); >> } >> >> - g_omx_port_setup (port, omx_port); >> - >> - return port; >> + return NULL; >> } >> >> -static inline GOmxPort * >> +GOmxPort * >> g_omx_core_get_port (GOmxCore *core, >> guint index) >> { >> - if (G_LIKELY (index < core->ports->len)) >> + GOmxPort *port = get_port (core, index); >> + >> + if (!port) >> { >> - return g_ptr_array_index (core->ports, index); >> + port = g_omx_port_new (core, index); >> + g_ptr_array_insert (core->ports, index, port); > > You are changing the semantics of the function; now it's not getting a > port; it's creating a port. It's more like g_omx_core_new_port(). > > -- > Felipe Contreras |
From: Felipe C. <fel...@no...> - 2010-03-08 16:09:56
|
On Mon, Mar 08, 2010 at 12:14:50AM +0100, Rob Clark wrote: > A method for GOmxCore object which can be called at any time to access > OMX component handle. If the OMX component is not yet instantiated, > this will trigger OMX_GetHandle(). This makes it safe to use in > places like get/set_property methods which could be called before the > OMX component would otherwise be instantiated. > --- NAK! I like self-documenting code, and a g_omx_core_get_handle() that also initializes stuff is not really a 'get'; if anything it's g_omx_core_get_and_initialize_if_not_initialized_handle(), and nedless to say, that doesn't look nice. I think I already said this before; if the core needs to be initialized before; it should be initialized before, manually, and visibly. I think that was the point of the config stuff; so that we can initialize the core sooner. Cheers. -- Felipe Contreras |
From: Felipe C. <felipe.contreras@Nokia.com> - 2010-03-08 17:05:23
|
On Mon, Mar 08, 2010 at 12:14:53AM +0100, Rob Clark wrote: > The helper functions consolidate error handling. > --- > +void > +g_omx_core_get_param (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param) Wouldn't it make sense to return the error? > +{ > + OMX_HANDLETYPE omx_handle = g_omx_core_get_handle (core); > + OMX_ERRORTYPE err; > + > + if (!omx_handle) > + return; I think this check should be done much sooner. > + err = OMX_GetParameter (omx_handle, idx, param); > + > + if (OMX_ErrorNone != err) The other way around: err != OMX_ErrorNone > + GST_WARNING_OBJECT (core->object, "OMX_GetParameter(%d) failed: %s", > + idx, omx_error_to_str (err)); > +} -- Felipe Contreras |
From: Rob C. <ro...@ti...> - 2010-03-08 17:30:45
|
On Mar 8, 2010, at 11:04 AM, Felipe Contreras wrote: > On Mon, Mar 08, 2010 at 12:14:53AM +0100, Rob Clark wrote: >> The helper functions consolidate error handling. >> --- > >> +void >> +g_omx_core_get_param (GOmxCore *core, OMX_INDEXTYPE idx, OMX_PTR param) > > Wouldn't it make sense to return the error? I thought about that.. but at the moment there were no places that were handling errors from {Get,Set}{Parameter,Config}. So I thought the least intrusive change was simply to do a GST_WARNING trace. It would be a simple change later to also return the error if there was some places where we wanted to handle the error. > >> +{ >> + OMX_HANDLETYPE omx_handle = g_omx_core_get_handle (core); >> + OMX_ERRORTYPE err; >> + >> + if (!omx_handle) >> + return; > > I think this check should be done much sooner. ??? I guess I don't understand this point. The check is the first thing after the g_omx_core_get_handle() call, so I don't see how it could be any sooner? There is already an error trace in g_omx_core_get_handle(), so in this case we just need to make the function return before we call a null pointer. The use case here is if you do a gst-inspect on an element which doesn't have a corresponding OMX component.. it is ok that the element does not work properly, but it isn't ok that gst-inspect segfaults. This becomes relevant in the next patch where input/output-buffers properties are added. BR, -R > >> + err = OMX_GetParameter (omx_handle, idx, param); >> + >> + if (OMX_ErrorNone != err) > > The other way around: err != OMX_ErrorNone > >> + GST_WARNING_OBJECT (core->object, "OMX_GetParameter(%d) failed: %s", >> + idx, omx_error_to_str (err)); >> +} > > -- > Felipe Contreras |
From: Rob C. <ro...@ti...> - 2010-03-09 04:16:02
|
On Mar 8, 2010, at 10:09 AM, Felipe Contreras wrote: > On Mon, Mar 08, 2010 at 12:14:50AM +0100, Rob Clark wrote: >> A method for GOmxCore object which can be called at any time to access >> OMX component handle. If the OMX component is not yet instantiated, >> this will trigger OMX_GetHandle(). This makes it safe to use in >> places like get/set_property methods which could be called before the >> OMX component would otherwise be instantiated. >> --- > > NAK! I like self-documenting code, and a g_omx_core_get_handle() that > also initializes stuff is not really a 'get'; if anything it's > g_omx_core_get_and_initialize_if_not_initialized_handle(), and nedless > to say, that doesn't look nice. > > I think I already said this before; if the core needs to be initialized > before; it should be initialized before, manually, and visibly. I think > that was the point of the config stuff; so that we can initialize the > core sooner. hmm, I didn't think a lazy initializer getter function was such a strange design pattern. but, that said, we could do GetHandle() when GOmxCore is constructed, and FreeHandle() when it is free'd.. but I have some worries that this would make things more prone to problems if the application (or playbin, etc) doesn't release the reference to the element. BR, -R |
From: Felipe C. <fel...@gm...> - 2010-03-23 21:55:04
|
On Tue, Mar 9, 2010 at 6:15 AM, Rob Clark <ro...@ti...> wrote: > On Mar 8, 2010, at 10:09 AM, Felipe Contreras wrote: >> I think I already said this before; if the core needs to be initialized >> before; it should be initialized before, manually, and visibly. I think >> that was the point of the config stuff; so that we can initialize the >> core sooner. > > hmm, I didn't think a lazy initializer getter function was such a strange design pattern. It's not about familiarity, it's about "goodness"... you can argue that it's an anti-pattern :) > but, that said, we could do GetHandle() when GOmxCore is constructed, and FreeHandle() when it is free'd.. but I have some worries that this would make things more prone to problems if the application (or playbin, etc) doesn't release the reference to the element. I think discussed this offline after this mail was sent and the consensus was that if this is indeed an issue it should be handled either in the driver release() function, or on the library destructor function. After all a process can be killed any time. -- Felipe Contreras |