[Mesa-dev] [PATCH 1/2] st/omx/enc: allocate input buffer private on demand

2014-04-08 Thread Leo Liu
From: Christian König christian.koe...@amd.com

v2: move allocation to a function as first step
to clean vid_enc_EncodeFrame

Signed-off-by: Christian König christian.koe...@amd.com
Signed-off-by: Leo Liu leo@amd.com
---
 src/gallium/state_trackers/omx/vid_enc.c | 124 +++
 1 file changed, 42 insertions(+), 82 deletions(-)

diff --git a/src/gallium/state_trackers/omx/vid_enc.c 
b/src/gallium/state_trackers/omx/vid_enc.c
index cd4a25b..2874451 100644
--- a/src/gallium/state_trackers/omx/vid_enc.c
+++ b/src/gallium/state_trackers/omx/vid_enc.c
@@ -72,10 +72,6 @@ static OMX_ERRORTYPE vid_enc_GetParameter(OMX_HANDLETYPE 
handle, OMX_INDEXTYPE i
 static OMX_ERRORTYPE vid_enc_SetConfig(OMX_HANDLETYPE handle, OMX_INDEXTYPE 
idx, OMX_PTR config);
 static OMX_ERRORTYPE vid_enc_GetConfig(OMX_HANDLETYPE handle, OMX_INDEXTYPE 
idx, OMX_PTR config);
 static OMX_ERRORTYPE vid_enc_MessageHandler(OMX_COMPONENTTYPE *comp, 
internalRequestMessageType *msg);
-static OMX_ERRORTYPE vid_enc_AllocateInBuffer(omx_base_PortType *port, 
OMX_INOUT OMX_BUFFERHEADERTYPE **buf,
-  OMX_IN OMX_U32 idx, OMX_IN 
OMX_PTR private, OMX_IN OMX_U32 size);
-static OMX_ERRORTYPE vid_enc_UseInBuffer(omx_base_PortType *port, 
OMX_BUFFERHEADERTYPE **buf, OMX_U32 idx,
- OMX_PTR private, OMX_U32 size, OMX_U8 
*mem);
 static OMX_ERRORTYPE vid_enc_FreeInBuffer(omx_base_PortType *port, OMX_U32 
idx, OMX_BUFFERHEADERTYPE *buf);
 static OMX_ERRORTYPE vid_enc_EncodeFrame(omx_base_PortType *port, 
OMX_BUFFERHEADERTYPE *buf);
 static OMX_ERRORTYPE vid_enc_AllocateOutBuffer(omx_base_PortType *comp, 
OMX_INOUT OMX_BUFFERHEADERTYPE **buf,
@@ -222,8 +218,6 @@ static OMX_ERRORTYPE vid_enc_Constructor(OMX_COMPONENTTYPE 
*comp, OMX_STRING nam
port-sPortParam.nBufferCountMin = 4;
 
port-Port_SendBufferFunction = vid_enc_EncodeFrame;
-   port-Port_AllocateBuffer = vid_enc_AllocateInBuffer;
-   port-Port_UseBuffer = vid_enc_UseInBuffer;
port-Port_FreeBuffer = vid_enc_FreeInBuffer;
 
port = (omx_base_video_PortType 
*)priv-ports[OMX_BASE_FILTER_OUTPUTPORT_INDEX];
@@ -566,78 +560,6 @@ static OMX_ERRORTYPE 
vid_enc_MessageHandler(OMX_COMPONENTTYPE* comp, internalReq
return omx_base_component_MessageHandler(comp, msg);
 }
 
-static OMX_ERRORTYPE vid_enc_AllocateInBuffer(omx_base_PortType *port, 
OMX_INOUT OMX_BUFFERHEADERTYPE **buf,
-  OMX_IN OMX_U32 idx, OMX_IN 
OMX_PTR private, OMX_IN OMX_U32 size)
-{
-   OMX_VIDEO_PORTDEFINITIONTYPE *def = port-sPortParam.format.video;
-   OMX_COMPONENTTYPE* comp = port-standCompContainer;
-   vid_enc_PrivateType *priv = comp-pComponentPrivate;
-   struct pipe_video_buffer templat = {};
-   struct input_buf_private *inp;
-   OMX_ERRORTYPE r;
-
-   r = base_port_AllocateBuffer(port, buf, idx, private, size);
-   if (r)
-  return r;
-
-   inp = (*buf)-pInputPortPrivate = CALLOC(1, sizeof(struct 
input_buf_private));
-   if (!inp) {
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   templat.buffer_format = PIPE_FORMAT_NV12;
-   templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
-   templat.width = def-nFrameWidth;
-   templat.height = def-nFrameHeight;
-   templat.interlaced = false;
-
-   inp-buf = priv-s_pipe-create_video_buffer(priv-s_pipe, templat);
-   if (!inp-buf) {
-  FREE(inp);
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   return OMX_ErrorNone;
-}
-
-static OMX_ERRORTYPE vid_enc_UseInBuffer(omx_base_PortType *port, 
OMX_BUFFERHEADERTYPE **buf, OMX_U32 idx,
- OMX_PTR private, OMX_U32 size, OMX_U8 
*mem)
-{
-   OMX_VIDEO_PORTDEFINITIONTYPE *def = port-sPortParam.format.video;
-   OMX_COMPONENTTYPE* comp = port-standCompContainer;
-   vid_enc_PrivateType *priv = comp-pComponentPrivate;
-   struct pipe_video_buffer templat = {};
-   struct input_buf_private *inp;
-   OMX_ERRORTYPE r;
-
-   r = base_port_UseBuffer(port, buf, idx, private, size, mem);
-   if (r)
-  return r;
-
-   inp = (*buf)-pInputPortPrivate = CALLOC(1, sizeof(struct 
input_buf_private));
-   if (!inp) {
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   templat.buffer_format = PIPE_FORMAT_NV12;
-   templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
-   templat.width = def-nFrameWidth;
-   templat.height = def-nFrameHeight;
-   templat.interlaced = false;
-
-   inp-buf = priv-s_pipe-create_video_buffer(priv-s_pipe, templat);
-   if (!inp-buf) {
-  FREE(inp);
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   return OMX_ErrorNone;
-}
-
 static OMX_ERRORTYPE vid_enc_FreeInBuffer(omx_base_PortType *port, OMX_U32 
idx, OMX_BUFFERHEADERTYPE *buf)
 {
struct input_buf_private *inp = buf-pInputPortPrivate;
@@ -685,18 

Re: [Mesa-dev] [PATCH 1/2] st/omx/enc: allocate input buffer private on demand

2014-04-08 Thread Christian König

Am 08.04.2014 16:57, schrieb Leo Liu:

From: Christian König christian.koe...@amd.com

v2: move allocation to a function as first step
 to clean vid_enc_EncodeFrame

Signed-off-by: Christian König christian.koe...@amd.com
Signed-off-by: Leo Liu leo@amd.com


Reviewed and pushed both patches.

Thanks,
Christian.


---
  src/gallium/state_trackers/omx/vid_enc.c | 124 +++
  1 file changed, 42 insertions(+), 82 deletions(-)

diff --git a/src/gallium/state_trackers/omx/vid_enc.c 
b/src/gallium/state_trackers/omx/vid_enc.c
index cd4a25b..2874451 100644
--- a/src/gallium/state_trackers/omx/vid_enc.c
+++ b/src/gallium/state_trackers/omx/vid_enc.c
@@ -72,10 +72,6 @@ static OMX_ERRORTYPE vid_enc_GetParameter(OMX_HANDLETYPE 
handle, OMX_INDEXTYPE i
  static OMX_ERRORTYPE vid_enc_SetConfig(OMX_HANDLETYPE handle, OMX_INDEXTYPE 
idx, OMX_PTR config);
  static OMX_ERRORTYPE vid_enc_GetConfig(OMX_HANDLETYPE handle, OMX_INDEXTYPE 
idx, OMX_PTR config);
  static OMX_ERRORTYPE vid_enc_MessageHandler(OMX_COMPONENTTYPE *comp, 
internalRequestMessageType *msg);
-static OMX_ERRORTYPE vid_enc_AllocateInBuffer(omx_base_PortType *port, 
OMX_INOUT OMX_BUFFERHEADERTYPE **buf,
-  OMX_IN OMX_U32 idx, OMX_IN 
OMX_PTR private, OMX_IN OMX_U32 size);
-static OMX_ERRORTYPE vid_enc_UseInBuffer(omx_base_PortType *port, 
OMX_BUFFERHEADERTYPE **buf, OMX_U32 idx,
- OMX_PTR private, OMX_U32 size, OMX_U8 
*mem);
  static OMX_ERRORTYPE vid_enc_FreeInBuffer(omx_base_PortType *port, OMX_U32 
idx, OMX_BUFFERHEADERTYPE *buf);
  static OMX_ERRORTYPE vid_enc_EncodeFrame(omx_base_PortType *port, 
OMX_BUFFERHEADERTYPE *buf);
  static OMX_ERRORTYPE vid_enc_AllocateOutBuffer(omx_base_PortType *comp, 
OMX_INOUT OMX_BUFFERHEADERTYPE **buf,
@@ -222,8 +218,6 @@ static OMX_ERRORTYPE vid_enc_Constructor(OMX_COMPONENTTYPE 
*comp, OMX_STRING nam
 port-sPortParam.nBufferCountMin = 4;
  
 port-Port_SendBufferFunction = vid_enc_EncodeFrame;

-   port-Port_AllocateBuffer = vid_enc_AllocateInBuffer;
-   port-Port_UseBuffer = vid_enc_UseInBuffer;
 port-Port_FreeBuffer = vid_enc_FreeInBuffer;
  
 port = (omx_base_video_PortType *)priv-ports[OMX_BASE_FILTER_OUTPUTPORT_INDEX];

@@ -566,78 +560,6 @@ static OMX_ERRORTYPE 
vid_enc_MessageHandler(OMX_COMPONENTTYPE* comp, internalReq
 return omx_base_component_MessageHandler(comp, msg);
  }
  
-static OMX_ERRORTYPE vid_enc_AllocateInBuffer(omx_base_PortType *port, OMX_INOUT OMX_BUFFERHEADERTYPE **buf,

-  OMX_IN OMX_U32 idx, OMX_IN 
OMX_PTR private, OMX_IN OMX_U32 size)
-{
-   OMX_VIDEO_PORTDEFINITIONTYPE *def = port-sPortParam.format.video;
-   OMX_COMPONENTTYPE* comp = port-standCompContainer;
-   vid_enc_PrivateType *priv = comp-pComponentPrivate;
-   struct pipe_video_buffer templat = {};
-   struct input_buf_private *inp;
-   OMX_ERRORTYPE r;
-
-   r = base_port_AllocateBuffer(port, buf, idx, private, size);
-   if (r)
-  return r;
-
-   inp = (*buf)-pInputPortPrivate = CALLOC(1, sizeof(struct 
input_buf_private));
-   if (!inp) {
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   templat.buffer_format = PIPE_FORMAT_NV12;
-   templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
-   templat.width = def-nFrameWidth;
-   templat.height = def-nFrameHeight;
-   templat.interlaced = false;
-
-   inp-buf = priv-s_pipe-create_video_buffer(priv-s_pipe, templat);
-   if (!inp-buf) {
-  FREE(inp);
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   return OMX_ErrorNone;
-}
-
-static OMX_ERRORTYPE vid_enc_UseInBuffer(omx_base_PortType *port, 
OMX_BUFFERHEADERTYPE **buf, OMX_U32 idx,
- OMX_PTR private, OMX_U32 size, OMX_U8 
*mem)
-{
-   OMX_VIDEO_PORTDEFINITIONTYPE *def = port-sPortParam.format.video;
-   OMX_COMPONENTTYPE* comp = port-standCompContainer;
-   vid_enc_PrivateType *priv = comp-pComponentPrivate;
-   struct pipe_video_buffer templat = {};
-   struct input_buf_private *inp;
-   OMX_ERRORTYPE r;
-
-   r = base_port_UseBuffer(port, buf, idx, private, size, mem);
-   if (r)
-  return r;
-
-   inp = (*buf)-pInputPortPrivate = CALLOC(1, sizeof(struct 
input_buf_private));
-   if (!inp) {
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   templat.buffer_format = PIPE_FORMAT_NV12;
-   templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
-   templat.width = def-nFrameWidth;
-   templat.height = def-nFrameHeight;
-   templat.interlaced = false;
-
-   inp-buf = priv-s_pipe-create_video_buffer(priv-s_pipe, templat);
-   if (!inp-buf) {
-  FREE(inp);
-  base_port_FreeBuffer(port, idx, *buf);
-  return OMX_ErrorInsufficientResources;
-   }
-
-   return OMX_ErrorNone;
-}
-
  static OMX_ERRORTYPE vid_enc_FreeInBuffer(omx_base_PortType