rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_mpeg4]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_h263]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_h264]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_vc1]
rank=256
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport
sink-template-caps=video/x-wmv,wmvversion=(int)3,format=(string){WMV3,WVC1},width=(int)[1,MAX],height=(int)[1,MAX]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=1
+out-port-usebuffer=1
hacks=no-disable-outport;no-component-role
sink-template-caps=video/x-raw, format=(string)SN12, width=(int) [1,1920], height=(int) [1,1080], framerate=(fraction)[0/1, MAX]
src-template-caps=video/x-h264, width=(int) [1,1920], height=(int) [1,1080], framerate=(fraction) [0/1, MAX], alignment=(string) au, stream-format = (string){ avc, byte-stream }
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=1
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport
[omxenc_h263]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=1
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_mpeg4]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_h263]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_h264]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport;no-component-reconfigure
[omxdec_vc1]
rank=256
in-port-index=0
out-port-index=1
+in-port-usebuffer=0
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport
sink-template-caps=video/x-wmv,wmvversion=(int)3,format=(string){WMV3,WVC1},width=(int)[1,MAX],height=(int)[1,MAX]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=1
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport
[omxenc_h263]
rank=258
in-port-index=0
out-port-index=1
+in-port-usebuffer=1
+out-port-usebuffer=1
hacks=no-component-role;no-disable-outport
return gst_omx_error_to_string (gst_omx_component_get_last_error (comp));
}
+#ifdef TIZEN_FEATURE_OMX
+OMX_ERRORTYPE
+gst_omx_component_get_extension_index (GstOMXComponent * comp, OMX_STRING name,
+ OMX_INDEXTYPE * index)
+{
+ OMX_ERRORTYPE err;
+
+ g_return_val_if_fail (comp != NULL, OMX_ErrorUndefined);
+
+ GST_DEBUG_OBJECT (comp->parent, "Getting %s parameter index for %s", comp->name, name);
+ err = OMX_GetExtensionIndex (comp->handle, name, index);
+ GST_DEBUG_OBJECT (comp->parent, "Got %s parameter index 0x%08x: %s (0x%08x)", comp->name, *index, gst_omx_error_to_string (err), err);
+
+ return err;
+}
+#endif
+
/* comp->lock must be unlocked while calling this */
OMX_ERRORTYPE
gst_omx_component_get_parameter (GstOMXComponent * comp, OMX_INDEXTYPE index,
if (port->port_def.eDir == OMX_DirInput) {
GST_LOG_OBJECT (comp->parent,"Calling OMX_EmptyThisBuffer. dmabuf_fd : [%d(%p)0x%02x, 0x%02x], nFilledLen : %d\n",
- buf->mm_vbuffer->handle.dmabuf_fd[0], buf, buf->omx_buf->pBuffer[4], buf->omx_buf->pBuffer[10], buf->omx_buf->nFilledLen);
+ buf->mm_vbuffer ? buf->mm_vbuffer->handle.dmabuf_fd[0] : 0, buf, buf->omx_buf->pBuffer[4],
+ buf->omx_buf->pBuffer[10], buf->omx_buf->nFilledLen);
err = OMX_EmptyThisBuffer (comp->handle, buf->omx_buf);
} else {
GST_LOG_OBJECT (comp->parent,"Calling OMX_FillThisBuffer. dmabuf_fd : [%d(%p)]\n",
- buf->mm_vbuffer->handle.dmabuf_fd[0], buf);
+ buf->mm_vbuffer->handle.dmabuf_fd[0], buf);
err = OMX_FillThisBuffer (comp->handle, buf->omx_buf);
}
GST_DEBUG_OBJECT (comp->parent, "Released buffer %p to %s port %u: %s "
{
GstOMXComponent *comp;
OMX_ERRORTYPE err = OMX_ErrorNone;
- gint i;
+ gint i = 0;
const GList *l;
g_assert (!port->buffers || port->buffers->len == 0);
buf->settings_cookie = port->settings_cookie;
#ifdef TIZEN_FEATURE_OMX
+ if (buffers)
buf->mm_vbuffer = (MMVideoBuffer*) l->data;
#endif
#ifdef TIZEN_FEATURE_OMX
/* NOTE: Uses comp->lock and comp->messages_lock */
OMX_ERRORTYPE
-gst_omx_port_tbm_allocate_dec_buffers (GstOMXPort * port, tbm_bufmgr bufMgr, int eCompressionFormat)
+gst_omx_port_tbm_allocate_dec_buffers (GstOMXPort * port, tbm_bufmgr bufmgr, int eCompressionFormat, gboolean use_buffer)
{
guint n = 0;
+ gint num = 0;
+ gint i = 0 , j = 0;
int y_size = 0;
int uv_size = 0;
GList *buffers = NULL;
if (port->buffers)
gst_omx_port_deallocate_buffers(port);
- n = port->port_def.nBufferCountActual;
-
- for (int i = 0; i < n; i++) {
- mm_vbuffer[i] = (MMVideoBuffer*) malloc(sizeof(MMVideoBuffer));
+ if (use_buffer) {
+ n = port->port_def.nBufferCountActual;
- if (port->index == 0) {
- mm_vbuffer[i]->handle.bo[0] = tbm_bo_alloc(bufMgr, port->port_def.nBufferSize, TBM_BO_WC);
+ for (int i = 0; i < n; i++) {
+ mm_vbuffer[i] = (MMVideoBuffer*) malloc(sizeof(MMVideoBuffer));
+ memset (mm_vbuffer[i], 0, sizeof (MMVideoBuffer));
- handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[0], TBM_DEVICE_MM);
- mm_vbuffer[i]->handle.dmabuf_fd[0] = handle_bo.u32;
-
- handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[0], TBM_DEVICE_CPU);
- mm_vbuffer[i]->data[0] = handle_bo.ptr;
- mm_vbuffer[i]->size[0] = port->port_def.nBufferSize;
- mm_vbuffer[i]->type = MM_VIDEO_BUFFER_TYPE_TBM_BO;
+ if (port->index == 0) {
+ mm_vbuffer[i]->handle.bo[0] = tbm_bo_alloc (bufmgr, port->port_def.nBufferSize, TBM_BO_WC);
+ mm_vbuffer[i]->size[0] = port->port_def.nBufferSize;
+ mm_vbuffer[i]->plane_num = 1;
+ } else {
+ y_size = gst_omx_calculate_y_size (eCompressionFormat,
+ port->port_def.format.video.nStride, port->port_def.format.video.nSliceHeight);
- GST_INFO_OBJECT (comp->parent,
- "Allocating %d buffer bo[0]:%p fd[0]:%d size[0]:%d for %s port %u",
- i, mm_vbuffer[i]->handle.bo[0], mm_vbuffer[i]->handle.dmabuf_fd[0],
- mm_vbuffer[i]->size[0], comp->name, (guint) port->index);
- } else { /* output port */
- y_size = gst_omx_calculate_y_size(eCompressionFormat,
- port->port_def.format.video.nStride, port->port_def.format.video.nSliceHeight);
-
- mm_vbuffer[i]->handle.bo[0] = tbm_bo_alloc(bufMgr, y_size, TBM_BO_WC);
- handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[0], TBM_DEVICE_MM);
- mm_vbuffer[i]->handle.dmabuf_fd[0] = handle_bo.u32;
- handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[0], TBM_DEVICE_CPU);
- mm_vbuffer[i]->data[0] = handle_bo.ptr;
+ mm_vbuffer[i]->handle.bo[0] = tbm_bo_alloc (bufmgr, y_size, TBM_BO_WC);
mm_vbuffer[i]->size[0] = y_size;
-
- uv_size = gst_omx_calculate_uv_size(eCompressionFormat,
- port->port_def.format.video.nStride, port->port_def.format.video.nSliceHeight >> 1);
- mm_vbuffer[i]->handle.bo[1] = tbm_bo_alloc(bufMgr, uv_size, TBM_BO_WC);
-
- handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[1], TBM_DEVICE_MM);
- mm_vbuffer[i]->handle.dmabuf_fd[1] = handle_bo.u32;
-
- handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[1], TBM_DEVICE_CPU);
- mm_vbuffer[i]->data[1] = handle_bo.ptr;
+ mm_vbuffer[i]->width[0] = port->port_def.format.video.nFrameWidth;
+ mm_vbuffer[i]->height[0] = port->port_def.format.video.nFrameHeight;
+ mm_vbuffer[i]->stride_width[0] = port->port_def.format.video.nStride;
+ mm_vbuffer[i]->stride_height[0] = port->port_def.format.video.nSliceHeight;
+
+ uv_size = gst_omx_calculate_uv_size (eCompressionFormat,
+ port->port_def.format.video.nStride, port->port_def.format.video.nSliceHeight >> 1);
+ mm_vbuffer[i]->handle.bo[1] = tbm_bo_alloc (bufmgr, uv_size, TBM_BO_WC);
mm_vbuffer[i]->size[1] = uv_size;
- mm_vbuffer[i]->type = MM_VIDEO_BUFFER_TYPE_TBM_BO;
+ mm_vbuffer[i]->width[1] = port->port_def.format.video.nFrameWidth;
+ mm_vbuffer[i]->height[1] = port->port_def.format.video.nFrameHeight>>1;
+ mm_vbuffer[i]->stride_width[1] = port->port_def.format.video.nStride;
+ mm_vbuffer[i]->stride_height[1] = port->port_def.format.video.nSliceHeight>>1;
mm_vbuffer[i]->plane_num = 2;
+ mm_vbuffer[i]->type = MM_VIDEO_BUFFER_TYPE_TBM_BO;
+ }
- GST_INFO_OBJECT (comp->parent,
- "Allocating %d buffer bo[0]:%p bo[1]:%p fd[0]:%d fd[1]:%d size[0]:%d size[1]:%d for %s port %u", i,
- mm_vbuffer[i]->handle.bo[0], mm_vbuffer[i]->handle.bo[1], mm_vbuffer[i]->handle.dmabuf_fd[0], mm_vbuffer[i]->handle.dmabuf_fd[1],
- mm_vbuffer[i]->size[0], mm_vbuffer[i]->size[1], comp->name, (guint) port->index);
+ for (j = 0; j < port->index+1; j++) {
+ handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[j], TBM_DEVICE_MM);
+ mm_vbuffer[i]->handle.dmabuf_fd[j] = handle_bo.u32;
+ handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[j], TBM_DEVICE_CPU);
+ mm_vbuffer[i]->data[j] = handle_bo.ptr;
}
- buffers = g_list_append(buffers,(gpointer)mm_vbuffer[i]);
+
+ GST_INFO_OBJECT (comp->parent,
+ "Allocating %d buffer bo[0]:%p bo[1]:%p fd[0]:%d fd[1]:%d size[0]:%d size[1]:%d for %s port %u", i,
+ mm_vbuffer[i]->handle.bo[0], mm_vbuffer[i]->handle.bo[1], mm_vbuffer[i]->handle.dmabuf_fd[0], mm_vbuffer[i]->handle.dmabuf_fd[1],
+ mm_vbuffer[i]->size[0], mm_vbuffer[i]->size[1], comp->name, (guint) port->index);
+
+ buffers = g_list_append(buffers, (gpointer)mm_vbuffer[i]);
+ }
}
- n = g_list_length ((GList *) buffers);
- err = gst_omx_port_allocate_buffers_unlocked (port, buffers, NULL, n);
+ num = use_buffer ? g_list_length ((GList *) buffers) : -1;
+ err = gst_omx_port_allocate_buffers_unlocked (port, buffers, NULL, num);
+
g_mutex_unlock (&port->comp->lock);
return err;
/* NOTE: Uses comp->lock and comp->messages_lock */
OMX_ERRORTYPE
-gst_omx_port_tbm_allocate_enc_buffers (GstOMXPort * port, tbm_bufmgr bufMgr, int eCompressionFormat)
+gst_omx_port_tbm_allocate_enc_buffers (GstOMXPort * port, tbm_bufmgr bufmgr, int eCompressionFormat)
{
int y_size = 0;
int uv_size = 0;
mm_vbuffer[i] = (MMVideoBuffer*)malloc(sizeof(MMVideoBuffer));
if (port->index == 1) {
- mm_vbuffer[i]->handle.bo[0] = tbm_bo_alloc(bufMgr, port->port_def.nBufferSize, TBM_BO_WC);
+ mm_vbuffer[i]->handle.bo[0] = tbm_bo_alloc(bufmgr, port->port_def.nBufferSize, TBM_BO_WC);
handle_bo = tbm_bo_get_handle(mm_vbuffer[i]->handle.bo[0], TBM_DEVICE_MM);
mm_vbuffer[i]->handle.dmabuf_fd[0] = handle_bo.u32;
{
GstOMXComponent *comp;
OMX_ERRORTYPE err = OMX_ErrorNone;
- gint i, n;
+ gint i = 0, n = 0;
g_return_val_if_fail (!port->tunneled, OMX_ErrorBadParameter);
tbm_bo_unref(buf->mm_vbuffer->handle.bo[0]);
if(port->index == 1) /* output port */
tbm_bo_unref(buf->mm_vbuffer->handle.bo[1]);
- free(buf->mm_vbuffer);
+ g_free(buf->mm_vbuffer);
buf->mm_vbuffer = NULL;
}
#endif
GError *err;
gchar *core_name, *component_name, *component_role;
gint in_port_index, out_port_index;
+ gint in_port_usebuffer, out_port_usebuffer;
gchar *template_caps;
GstPadTemplate *templ;
GstCaps *caps;
}
class_data->out_port_index = out_port_index;
+#ifdef TIZEN_FEATURE_OMX
+ err = NULL;
+ in_port_usebuffer =
+ g_key_file_get_integer (config, element_name, "in-port-usebuffer", &err);
+ if (err != NULL) {
+ GST_DEBUG ("No 'in-port-usebuffer' set for element '%s', auto-detecting: %s",
+ element_name, err->message);
+ in_port_usebuffer = 0;
+ g_error_free (err);
+ }
+ class_data->in_port_usebuffer = in_port_usebuffer;
+
+ err = NULL;
+ out_port_usebuffer =
+ g_key_file_get_integer (config, element_name, "out-port-usebuffer", &err);
+ if (err != NULL) {
+ GST_DEBUG ("No 'out-port-usebuffer' set for element '%s', auto-detecting: %s",
+ element_name, err->message);
+ out_port_usebuffer = 1;
+ g_error_free (err);
+ }
+ class_data->out_port_usebuffer = out_port_usebuffer;
+#endif
+
/* Add pad templates */
err = NULL;
if (class_data->type != GST_OMX_COMPONENT_TYPE_SOURCE) {
gboolean enabled_pending; /* TRUE after OMX_Command{En,Dis}able */
gboolean disabled_pending; /* was done until it took effect */
gboolean eos; /* TRUE after a buffer with EOS flag was received */
+#ifdef TIZEN_FEATURE_OMX
+ gboolean use_buffer;
+#endif
/* Increased whenever the settings of these port change.
* If settings_cookie != configured_settings_cookie
const gchar *default_sink_template_caps;
guint32 in_port_index, out_port_index;
+#ifdef TIZEN_FEATURE_OMX
+ guint32 in_port_usebuffer, out_port_usebuffer;
+#endif
guint64 hacks;
OMX_ERRORTYPE gst_omx_port_allocate_buffers (GstOMXPort *port);
#ifdef TIZEN_FEATURE_OMX
-OMX_ERRORTYPE gst_omx_port_tbm_allocate_dec_buffers (GstOMXPort * port, tbm_bufmgr bufMgr, int eCompressionFormat);
+OMX_ERRORTYPE gst_omx_port_tbm_allocate_dec_buffers (GstOMXPort * port, tbm_bufmgr bufMgr, int eCompressionFormat, gboolean use_buffer);
OMX_ERRORTYPE gst_omx_port_tbm_allocate_enc_buffers (GstOMXPort * port, tbm_bufmgr bufMgr, int eCompressionFormat);
#endif
OMX_ERRORTYPE gst_omx_port_use_buffers (GstOMXPort *port, const GList *buffers);
*buffer = buf;
+ pool->num_buffers++;
+ GST_DEBUG_OBJECT (pool, "alloc buffers : %d %d", pool->num_buffers, pool->current_buffer_index);
pool->current_buffer_index++;
return GST_FLOW_OK;
GST_BUFFER_POOL_CLASS (gst_omx_buffer_pool_parent_class)->free_buffer (bpool,
buffer);
+ GST_DEBUG_OBJECT (pool, "free buffers : %d %d", pool->num_buffers, pool->current_buffer_index);
+ pool->num_buffers--;
}
static GstFlowReturn
buf = g_ptr_array_index (pool->buffers, pool->current_buffer_index);
g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR);
*buffer = buf;
+ pool->num_buffers--;
+ GST_DEBUG_OBJECT (pool, "acquire buffers : %d %d", pool->num_buffers, pool->current_buffer_index);
ret = GST_FLOW_OK;
/* If it's our own memory we have to set the sizes */
gst_omx_buffer_data_quark);
if (pool->port->port_def.eDir == OMX_DirOutput && !omx_buf->used) {
/* Release back to the port, can be filled again */
+ pool->num_buffers++;
+ GST_DEBUG_OBJECT (pool, "release buffers : %d %d", pool->num_buffers, pool->current_buffer_index);
err = gst_omx_port_release_buffer (pool->port, omx_buf);
if (err != OMX_ErrorNone) {
GST_ELEMENT_ERROR (pool->element, LIBRARY, SETTINGS, (NULL),
* wrapped
*/
gint current_buffer_index;
+#ifdef TIZEN_FEATURE_OMX
+ gint num_buffers;
+#endif
};
struct _GstOMXBufferPoolClass
format = GST_VIDEO_FORMAT_I420;
break;
case OMX_COLOR_FormatYUV420SemiPlanar:
+#ifdef TIZEN_FEATURE_OMX
+ format = GST_VIDEO_FORMAT_SN12;
+#else
format = GST_VIDEO_FORMAT_NV12;
+#endif
break;
case OMX_COLOR_FormatYUV422SemiPlanar:
format = GST_VIDEO_FORMAT_NV16;
g_cond_init (&self->drain_cond);
#ifdef TIZEN_FEATURE_OMX
- self->hTBMBufMgr = NULL;
+ self->bufmgr = NULL;
self->drm_fd = -1;
#endif
}
GstOMXVideoDec *self = GST_OMX_VIDEO_DEC (decoder);
GstOMXVideoDecClass *klass = GST_OMX_VIDEO_DEC_GET_CLASS (self);
gint in_port_index, out_port_index;
+ gint in_port_usebuffer, out_port_usebuffer;
GST_DEBUG_OBJECT (self, "Opening decoder");
return FALSE;
#ifdef TIZEN_FEATURE_OMX
-
- self->hTBMBufMgr = tbm_bufmgr_init(self->drm_fd);
- if(self->hTBMBufMgr == NULL){
+ self->bufmgr = tbm_bufmgr_init(self->drm_fd);
+ if(self->bufmgr == NULL) {
GST_ERROR_OBJECT (self, "TBM initialization failed.");
return FALSE;
- }
+ }
+
+ self->dec_in_port->use_buffer = klass->cdata.in_port_usebuffer;
+ self->dec_out_port->use_buffer = klass->cdata.out_port_usebuffer;
#endif
GST_DEBUG_OBJECT (self, "Opened decoder");
#ifdef TIZEN_FEATURE_OMX
/* uninitialize tbm buffer manager */
- if(self->hTBMBufMgr != NULL){
- tbm_bufmgr_deinit(self->hTBMBufMgr);
- self->hTBMBufMgr = NULL;
+ if(self->bufmgr != NULL){
+ tbm_bufmgr_deinit(self->bufmgr);
+ self->bufmgr = NULL;
}
if(self->drm_fd != -1) {
break;
}
- if (ret == GST_STATE_CHANGE_FAILURE)
- return ret;
-
ret =
GST_ELEMENT_CLASS (gst_omx_video_dec_parent_class)->change_state
(element, transition);
mm_vbuffer->type = MM_VIDEO_BUFFER_TYPE_TBM_BO;
if (mm_vbuffer->type == MM_VIDEO_BUFFER_TYPE_TBM_BO) {
- GST_LOG_OBJECT (self, "dec output buf: fd[0]:%d fd[1]:%d fd[2]:%d w[0]:%d h[0]:%d buf_share_method:%d",
- mm_vbuffer->handle.dmabuf_fd[0], mm_vbuffer->handle.dmabuf_fd[1], mm_vbuffer->handle.dmabuf_fd[2],
+ GST_LOG_OBJECT (self, "dec output buf: bo[0] :%p, bo[1] : %p, fd[0]:%d fd[1]:%d fd[2]:%d w[0]:%d h[0]:%d buf_share_method:%d",
+ mm_vbuffer->handle.bo[0], mm_vbuffer->handle.bo[1], mm_vbuffer->handle.dmabuf_fd[0], mm_vbuffer->handle.dmabuf_fd[1], mm_vbuffer->handle.dmabuf_fd[2],
mm_vbuffer->width[0], mm_vbuffer->height[0], mm_vbuffer->type);
} else if (mm_vbuffer->type == MM_VIDEO_BUFFER_TYPE_PHYSICAL_ADDRESS) {
GST_LOG_OBJECT (self, "dec output uses hw addr");
was_enabled = FALSE;
}
#ifdef TIZEN_FEATURE_OMX
- err = gst_omx_port_tbm_allocate_dec_buffers(port, self->hTBMBufMgr,
- self->dec_in_port->port_def.format.video.eCompressionFormat);
+ err = gst_omx_port_tbm_allocate_dec_buffers (port, self->bufmgr,
+ self->dec_in_port->port_def.format.video.eCompressionFormat, port->use_buffer);
#else
err = gst_omx_port_allocate_buffers (port);
#endif
}
}
#ifdef TIZEN_FEATURE_OMX
- err = gst_omx_port_tbm_allocate_dec_buffers(port, self->hTBMBufMgr,
- self->dec_in_port->port_def.format.video.eCompressionFormat);
+ err = gst_omx_port_tbm_allocate_dec_buffers (port, self->bufmgr,
+ self->dec_in_port->port_def.format.video.eCompressionFormat, port->use_buffer);
#else
err = gst_omx_port_allocate_buffers (port);
#endif
} else if (buf->omx_buf->nFilledLen > 0 || buf->eglimage) {
if (self->out_port_pool) {
gint i, n;
- GstBuffer *outbuf;
+ GstBuffer *outbuf = NULL;
GstBufferPoolAcquireParams params = { 0, };
n = port->buffers->len;
}
#ifdef TIZEN_FEATURE_OMX
- for(i=0; i<gst_caps_get_size(intersection); i++)
+ for(i = 0; i < gst_caps_get_size (intersection); i++)
{
s = gst_caps_get_structure (intersection, i);
- format_tmp = gst_structure_get_string (s, "format");
+ if (format_tmp = gst_structure_get_string (s, "format")) {
- if(!strncmp(format_tmp, "S", 1)) {
+ if (!strncmp (format_tmp, "S", 1)) {
format_str = format_tmp;
GST_DEBUG_OBJECT (self, "SEC format found");
break;
+ }
}
}
- if(!format_str) {
+ if (!format_str) {
intersection = gst_caps_truncate (intersection);
intersection = gst_caps_fixate (intersection);
gemBuffers.enable = OMX_TRUE;
gemBuffers.nPortIndex = 1;
+ OMX_INDEXTYPE index = OMX_IndexComponentStartUnused;
+
+ err = OMX_GetExtensionIndex(self->dec->handle, "OMX.SEC.index.enablePlatformSpecificBuffers", &index);
+ if (err != OMX_ErrorNone || index == OMX_IndexComponentStartUnused) {
+ GST_INFO_OBJECT (self, "can not get index for OMX_GetExtensionIndex enablePlatformSpecificBuffers");
+ }
+
+ err = gst_omx_component_set_parameter(self->dec, index, &gemBuffers);
+
+#if 0
err =
gst_omx_component_set_parameter (self->dec,
OMX_IndexParamEnablePlatformSpecificBuffers,&gemBuffers);
gst_omx_error_to_string (err), err);
}
#endif
+#endif
gst_caps_unref (intersection);
return (err == OMX_ErrorNone);
}
if (gst_omx_port_set_enabled (self->dec_in_port, TRUE) != OMX_ErrorNone)
return FALSE;
#ifdef TIZEN_FEATURE_OMX
- if(gst_omx_port_tbm_allocate_dec_buffers(self->dec_in_port, self->hTBMBufMgr, 0) != OMX_ErrorNone)
+ if (gst_omx_port_tbm_allocate_dec_buffers (self->dec_in_port,
+ self->bufmgr, 0, self->dec_in_port->use_buffer) != OMX_ErrorNone)
return FALSE;
#else
if (gst_omx_port_allocate_buffers (self->dec_in_port) != OMX_ErrorNone)
/* Need to allocate buffers to reach Idle state */
#ifdef TIZEN_FEATURE_OMX
- if(gst_omx_port_tbm_allocate_dec_buffers(self->dec_in_port, self->hTBMBufMgr, 0) != OMX_ErrorNone)
+ if (gst_omx_port_tbm_allocate_dec_buffers (self->dec_in_port,
+ self->bufmgr, 0, self->dec_in_port->use_buffer) != OMX_ErrorNone)
return FALSE;
- if(gst_omx_port_tbm_allocate_dec_buffers(self->dec_out_port, self->hTBMBufMgr,
- self->dec_in_port->port_def.format.video.eCompressionFormat) != OMX_ErrorNone)
+ if (gst_omx_port_tbm_allocate_dec_buffers (self->dec_out_port,
+ self->bufmgr, self->dec_in_port->port_def.format.video.eCompressionFormat,
+ self->dec_out_port->use_buffer) != OMX_ErrorNone)
return FALSE;
#else
if (gst_omx_port_allocate_buffers (self->dec_in_port) != OMX_ErrorNone)
/* Need to allocate buffers to reach Idle state */
#ifdef TIZEN_FEATURE_OMX
- if(gst_omx_port_tbm_allocate_dec_buffers(self->dec_in_port, self->hTBMBufMgr, 0) != OMX_ErrorNone)
+ if (gst_omx_port_tbm_allocate_dec_buffers (self->dec_in_port,
+ self->bufmgr, 0, self->dec_in_port->use_buffer) != OMX_ErrorNone)
return FALSE;
- if(gst_omx_port_tbm_allocate_dec_buffers(self->dec_out_port, self->hTBMBufMgr,
- self->dec_in_port->port_def.format.video.eCompressionFormat) != OMX_ErrorNone)
+ if (gst_omx_port_tbm_allocate_dec_buffers (self->dec_out_port,
+ self->bufmgr, self->dec_in_port->port_def.format.video.eCompressionFormat,
+ self->dec_out_port->use_buffer) != OMX_ErrorNone)
return FALSE;
#else
if (gst_omx_port_allocate_buffers (self->dec_in_port) != OMX_ErrorNone)
goto reconfigure_error;
}
#ifdef TIZEN_FEATURE_OMX
- err = gst_omx_port_tbm_allocate_dec_buffers(port, self->hTBMBufMgr,
- self->dec_in_port->port_def.format.video.eCompressionFormat);
+ err = gst_omx_port_tbm_allocate_dec_buffers (port, self->bufmgr, 0, port->use_buffer);
#else
err = gst_omx_port_allocate_buffers (port);
#endif
buf->omx_buf->nFilledLen = gst_buffer_get_size (codec_data);;
#ifdef TIZEN_FEATURE_OMX
- gst_buffer_extract (codec_data, 0,
- buf->mm_vbuffer->data[0] + buf->omx_buf->nOffset,
- buf->omx_buf->nFilledLen);
-#else
- gst_buffer_extract (codec_data, 0,
- buf->omx_buf->pBuffer + buf->omx_buf->nOffset,
- buf->omx_buf->nFilledLen);
+ if (port->use_buffer) {
+ gst_buffer_extract (codec_data, 0,
+ buf->mm_vbuffer->data[0] + buf->omx_buf->nOffset,
+ buf->omx_buf->nFilledLen);
+ } else {
+ gst_buffer_extract (codec_data, 0,
+ buf->omx_buf->pBuffer + buf->omx_buf->nOffset,
+ buf->omx_buf->nFilledLen);
+ }
#endif
if (GST_CLOCK_TIME_IS_VALID (timestamp))
GST_DEBUG_OBJECT (self, "nFilledLen %d, %p", buf->omx_buf->nFilledLen, buf->omx_buf->pBuffer);
#ifdef TIZEN_FEATURE_OMX
- gst_buffer_extract (frame->input_buffer, offset,
+ if (port->use_buffer) {
+ gst_buffer_extract (frame->input_buffer, offset,
buf->mm_vbuffer->data[0] + buf->omx_buf->nOffset,
buf->omx_buf->nFilledLen);
-#else
- gst_buffer_extract (frame->input_buffer, offset,
- buf->omx_buf->pBuffer + buf->omx_buf->nOffset,
- buf->omx_buf->nFilledLen);
+ } else {
+ gst_buffer_extract (frame->input_buffer, offset,
+ buf->omx_buf->pBuffer + buf->omx_buf->nOffset,
+ buf->omx_buf->nFilledLen);
+ }
#endif
if (timestamp != GST_CLOCK_TIME_NONE) {
buf->omx_buf->nTimeStamp =
GstFlowReturn downstream_flow_ret;
#ifdef TIZEN_FEATURE_OMX
gint drm_fd;
- tbm_bufmgr hTBMBufMgr;
+ tbm_bufmgr bufmgr;
#endif
#ifdef USE_OMX_TARGET_RPI
GstOMXComponent *egl_render;