guint n = 0;
gint num = 0;
gint i = 0 , j = 0;
- int y_size = 0;
- int uv_size = 0;
+ gint nRight = 0;
+ gint nBottom = 0;
+ gint planes[MAX_BUFFER_PLANE];
GList *buffers = NULL;
MMVideoBuffer *mm_vbuffer[MAX_INPUT_BUFFER];
tbm_bo_handle handle_bo;
GstOMXComponent *comp;
OMX_ERRORTYPE err = OMX_ErrorNone;
+ OMX_CONFIG_RECTTYPE rect;
g_return_val_if_fail (port != NULL, OMX_ErrorUndefined);
comp = port->comp;
+ GST_OMX_INIT_STRUCT (&rect);
+ rect.nPortIndex = port->index;
+
+ err =
+ gst_omx_component_get_config (comp, OMX_IndexConfigCommonOutputCrop,
+ &rect);
+ if (err != OMX_ErrorNone) {
+ rect.nLeft = 0;
+ rect.nTop = 0;
+ rect.nWidth = port->port_def.format.video.nFrameWidth;
+ rect.nHeight = port->port_def.format.video.nFrameHeight;
+ }
+ nRight = port->port_def.format.video.nFrameWidth - rect.nLeft - rect.nWidth;
+ nBottom = port->port_def.format.video.nFrameHeight - rect.nTop - rect.nHeight;
+
+ GST_INFO_OBJECT (comp->parent, "crop info: nLeft %d, nRight %d, nTop %d, nBottom %d",
+ rect.nLeft, nRight, rect.nTop, nBottom);
+
g_mutex_lock (&port->comp->lock);
/* deallocate previous allocated buffers... */
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);
+ planes[0] = 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);
- mm_vbuffer[i]->size[0] = y_size;
- 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]->handle.bo[0] = tbm_bo_alloc (bufmgr, planes[0], TBM_BO_WC);
+ mm_vbuffer[i]->size[0] = planes[0];
+ mm_vbuffer[i]->width[0] = rect.nWidth;
+ mm_vbuffer[i]->height[0] = rect.nHeight;
mm_vbuffer[i]->stride_width[0] = ALIGN (port->port_def.format.video.nFrameWidth, 16);
mm_vbuffer[i]->stride_height[0] = ALIGN (port->port_def.format.video.nSliceHeight, 16);
- 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]->width[1] = port->port_def.format.video.nFrameWidth;
- mm_vbuffer[i]->height[1] = port->port_def.format.video.nFrameHeight>>1;
+ planes[1] = 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, planes[1], TBM_BO_WC);
+ mm_vbuffer[i]->size[1] = planes[1];
+ mm_vbuffer[i]->width[1] = rect.nWidth;
+ mm_vbuffer[i]->height[1] = rect.nHeight>>1;
mm_vbuffer[i]->stride_width[1] = ALIGN (port->port_def.format.video.nFrameWidth, 16);
mm_vbuffer[i]->stride_height[1] = ALIGN (port->port_def.format.video.nSliceHeight>>1, 16);
mm_vbuffer[i]->plane_num = 2;