Apply 32 to MIN WIDTH and HEIGHT at YCbCr format 23/303123/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 29 Nov 2023 08:06:40 +0000 (17:06 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Wed, 20 Dec 2023 06:29:25 +0000 (15:29 +0900)
Change-Id: Ia0af4672d68b7afe4131768e62f70d35ffd7d5ca

src/tbm_backend_vc4.c

index 4938377..1dffbeb 100644 (file)
@@ -61,6 +61,9 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #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)
 
@@ -613,16 +616,16 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
        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;
@@ -640,8 +643,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -650,8 +653,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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;
                }
@@ -662,8 +665,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -672,8 +675,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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;
                }
@@ -699,8 +702,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -709,8 +712,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -719,8 +722,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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;
                }
@@ -733,8 +736,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -743,8 +746,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -753,8 +756,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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;
                }
@@ -765,8 +768,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -775,8 +778,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -785,8 +788,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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;
                }
@@ -797,8 +800,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -807,8 +810,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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)
@@ -817,8 +820,8 @@ tbm_vc4_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr,
                /*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;
                }