[Gstreamer-openmax] [PATCH 2/3] Simplify g_omx_port_setup()

Rob Clark rob at ti.com
Wed Mar 17 15:50:30 PDT 2010


Do OMX_GetParameter(PortDefinition) inside g_omx_port_setup(), rather than
duplicating same code in each caller.
---
 omx/gstomx_base_filter.c |   20 ++------------------
 omx/gstomx_base_sink.c   |   15 +--------------
 omx/gstomx_base_src.c    |   15 +--------------
 omx/gstomx_util.c        |   19 +++++++++++++------
 omx/gstomx_util.h        |    2 +-
 5 files changed, 18 insertions(+), 53 deletions(-)

diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c
index edbb11e..e12fcd2 100644
--- a/omx/gstomx_base_filter.c
+++ b/omx/gstomx_base_filter.c
@@ -53,28 +53,12 @@ log_buffer (GstOmxBaseFilter *self,
 static void
 setup_ports (GstOmxBaseFilter *self)
 {
-    GOmxCore *core;
-    OMX_PARAM_PORTDEFINITIONTYPE param;
-
-    core = self->gomx;
-
-    memset (&param, 0, sizeof (param));
-    param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
-    param.nVersion.s.nVersionMajor = 1;
-    param.nVersion.s.nVersionMinor = 1;
-
     /* Input port configuration. */
-
-    param.nPortIndex = 0;
-    OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, &param);
-    g_omx_port_setup (self->in_port, &param);
+    g_omx_port_setup (self->in_port);
     gst_pad_set_element_private (self->sinkpad, self->in_port);
 
     /* Output port configuration. */
-
-    param.nPortIndex = 1;
-    OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, &param);
-    g_omx_port_setup (self->out_port, &param);
+    g_omx_port_setup (self->out_port);
     gst_pad_set_element_private (self->srcpad, self->out_port);
 
     /* @todo: read from config file: */
diff --git a/omx/gstomx_base_sink.c b/omx/gstomx_base_sink.c
index f946874..b6a8955 100644
--- a/omx/gstomx_base_sink.c
+++ b/omx/gstomx_base_sink.c
@@ -45,21 +45,8 @@ GSTOMX_BOILERPLATE_FULL (GstOmxBaseSink, gst_omx_base_sink, GstBaseSink, GST_TYP
 static void
 setup_ports (GstOmxBaseSink *self)
 {
-    GOmxCore *core;
-    OMX_PARAM_PORTDEFINITIONTYPE param;
-
-    core = self->gomx;
-
-    memset (&param, 0, sizeof (param));
-    param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
-    param.nVersion.s.nVersionMajor = 1;
-    param.nVersion.s.nVersionMinor = 1;
-
     /* Input port configuration. */
-
-    param.nPortIndex = 0;
-    OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, &param);
-    g_omx_port_setup (self->in_port, &param);
+    g_omx_port_setup (self->in_port);
     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 0741aab..fea7631 100644
--- a/omx/gstomx_base_src.c
+++ b/omx/gstomx_base_src.c
@@ -36,21 +36,8 @@ GSTOMX_BOILERPLATE (GstOmxBaseSrc, gst_omx_base_src, GstBaseSrc, GST_TYPE_BASE_S
 static void
 setup_ports (GstOmxBaseSrc *self)
 {
-    GOmxCore *core;
-    OMX_PARAM_PORTDEFINITIONTYPE param;
-
-    core = self->gomx;
-
-    memset (&param, 0, sizeof (param));
-    param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
-    param.nVersion.s.nVersionMajor = 1;
-    param.nVersion.s.nVersionMinor = 1;
-
     /* Input port configuration. */
-
-    param.nPortIndex = 0;
-    OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, &param);
-    g_omx_port_setup (self->out_port, &param);
+    g_omx_port_setup (self->out_port);
 
     if (self->setup_ports)
     {
diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c
index e1060da..b1c869a 100644
--- a/omx/gstomx_util.c
+++ b/omx/gstomx_util.c
@@ -22,6 +22,7 @@
 
 #include "gstomx_util.h"
 #include <dlfcn.h>
+#include <string.h> /* for memset */
 
 #include "gstomx.h"
 
@@ -486,14 +487,20 @@ g_omx_port_free (GOmxPort *port)
 }
 
 void
-g_omx_port_setup (GOmxPort *port,
-                  OMX_PARAM_PORTDEFINITIONTYPE *omx_port)
+g_omx_port_setup (GOmxPort *port)
 {
     GOmxPortType type = -1;
+    OMX_PARAM_PORTDEFINITIONTYPE param;
 
-    g_assert (port->port_index == omx_port->nPortIndex);
+    memset (&param, 0, sizeof (param));
+    param.nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
+    param.nVersion.s.nVersionMajor = 1;
+    param.nVersion.s.nVersionMinor = 1;
 
-    switch (omx_port->eDir)
+    param.nPortIndex = port->port_index;
+    OMX_GetParameter (port->core->omx_handle, OMX_IndexParamPortDefinition, &param);
+
+    switch (param.eDir)
     {
         case OMX_DirInput:
             type = GOMX_PORT_INPUT;
@@ -507,8 +514,8 @@ g_omx_port_setup (GOmxPort *port,
 
     port->type = type;
     /** @todo should it be nBufferCountMin? */
-    port->num_buffers = omx_port->nBufferCountActual;
-    port->buffer_size = omx_port->nBufferSize;
+    port->num_buffers = param.nBufferCountActual;
+    port->buffer_size = param.nBufferSize;
 
     g_free (port->buffers);
     port->buffers = g_new0 (OMX_BUFFERHEADERTYPE *, port->num_buffers);
diff --git a/omx/gstomx_util.h b/omx/gstomx_util.h
index f763618..456f9a8 100644
--- a/omx/gstomx_util.h
+++ b/omx/gstomx_util.h
@@ -134,7 +134,7 @@ GOmxPort *g_omx_core_new_port (GOmxCore *core, guint index);
 
 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_setup (GOmxPort *port);
 void g_omx_port_push_buffer (GOmxPort *port, OMX_BUFFERHEADERTYPE *omx_buffer);
 OMX_BUFFERHEADERTYPE *g_omx_port_request_buffer (GOmxPort *port);
 void g_omx_port_release_buffer (GOmxPort *port, OMX_BUFFERHEADERTYPE *omx_buffer);
-- 
1.6.3.2





More information about the Gstreamer-openmax mailing list