#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN_WIDTH (32)
+#define MIN_HEIGHT (32)
+
#define TBM_SURFACE_ALIGNMENT_PLANE (16)
#define TBM_SURFACE_ALIGNMENT_PITCH_RGB (16)
case HAL_TBM_FORMAT_VYUY:
bpp = 16;
_offset = 0;
- _pitch = SIZE_ALIGN((width * bpp) >> 3, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN((MAX(width, MIN_WIDTH) * bpp) >> 3, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
break;
case HAL_TBM_FORMAT_AYUV:
bpp = 32;
_offset = 0;
- _pitch = SIZE_ALIGN((width * bpp) >> 3, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN((MAX(width, MIN_WIDTH) * bpp) >> 3, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
break;
/*if (plane_idx == 0)*/
{
_offset = 0;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 0)
/*else if (plane_idx == 1)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height / 2, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT) / 2, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
}
/*if(plane_idx == 0)*/
{
_offset = 0;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 0)
/*else if( plane_idx ==1 )*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
}
/*if(plane_idx == 0)*/
{
_offset = 0;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 0)
/*else if(plane_idx == 1)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width / 4, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 4);
- _align_height = SIZE_ALIGN(height / 4, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH) / 4, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 4);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT) / 4, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 1)
/*else if (plane_idx == 2)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width / 4, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 4);
- _align_height = SIZE_ALIGN(height / 4, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH) / 4, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 4);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT) / 4, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
}
/*if(plane_idx == 0)*/
{
_offset = 0;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 0)
/*else if(plane_idx == 1)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
- _align_height = SIZE_ALIGN(height / 2, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV / 2);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH) / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT) / 2, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV / 2);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 1)
/*else if (plane_idx == 2)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
- _align_height = SIZE_ALIGN(height / 2, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV / 2);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH) / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT) / 2, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV / 2);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
}
/*if(plane_idx == 0)*/
{
_offset = 0;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 0)
/*else if(plane_idx == 1)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH) / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 1)
/*else if (plane_idx == 2)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH) / 2, TBM_SURFACE_ALIGNMENT_PITCH_YUV / 2);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
}
/*if(plane_idx == 0)*/
{
_offset = 0;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 0)
/*else if(plane_idx == 1)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
if (plane_idx == 1)
/*else if (plane_idx == 2)*/
{
_offset += _size;
- _pitch = SIZE_ALIGN(width, TBM_SURFACE_ALIGNMENT_PITCH_YUV);
- _align_height = SIZE_ALIGN(height, TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
+ _pitch = SIZE_ALIGN(MAX(width, MIN_WIDTH), TBM_SURFACE_ALIGNMENT_PITCH_YUV);
+ _align_height = SIZE_ALIGN(MAX(height, MIN_HEIGHT), TBM_SURFACE_ALIGNMENT_HEIGHT_YUV);
_size = SIZE_ALIGN(_pitch * _align_height, TBM_SURFACE_ALIGNMENT_PLANE);
_bo_idx = 0;
}