@ -25,7 +25,7 @@ void transform_destroy(Transform* s) {
void transform_queue ( Transform * s ,
void transform_queue ( Transform * s ,
cl_command_queue q ,
cl_command_queue q ,
cl_mem in_yuv , int in_width , int in_height ,
cl_mem in_yuv , int in_width , int in_height , int in_stride , int in_uv_offset ,
cl_mem out_y , cl_mem out_u , cl_mem out_v ,
cl_mem out_y , cl_mem out_u , cl_mem out_v ,
int out_width , int out_height ,
int out_width , int out_height ,
const mat3 & projection ) {
const mat3 & projection ) {
@ -44,28 +44,30 @@ void transform_queue(Transform* s,
const int in_y_width = in_width ;
const int in_y_width = in_width ;
const int in_y_height = in_height ;
const int in_y_height = in_height ;
const int in_y_px_stride = 1 ;
const int in_uv_width = in_width / 2 ;
const int in_uv_width = in_width / 2 ;
const int in_uv_height = in_height / 2 ;
const int in_uv_height = in_height / 2 ;
const int in_y_offset = 0 ;
const int in_uv_px_stride = 2 ;
const int in_u_offset = in_y_offset + in_y_width * in_y_heigh t ;
const int in_u_offset = in_uv_offse t ;
const int in_v_offset = in_u_offset + in_uv_width * in_uv_height ;
const int in_v_offset = in_uv _offset + 1 ;
const int out_y_width = out_width ;
const int out_y_width = out_width ;
const int out_y_height = out_height ;
const int out_y_height = out_height ;
const int out_uv_width = out_width / 2 ;
const int out_uv_width = out_width / 2 ;
const int out_uv_height = out_height / 2 ;
const int out_uv_height = out_height / 2 ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 0 , sizeof ( cl_mem ) , & in_yuv ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 0 , sizeof ( cl_mem ) , & in_yuv ) ) ; // src
CL_CHECK ( clSetKernelArg ( s - > krnl , 1 , sizeof ( cl_int ) , & in_y_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 1 , sizeof ( cl_int ) , & in_stride ) ) ; // src_row_stride
CL_CHECK ( clSetKernelArg ( s - > krnl , 2 , sizeof ( cl_int ) , & in_y_offset ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 2 , sizeof ( cl_int ) , & in_y_px_stride ) ) ; // src_px_stride
CL_CHECK ( clSetKernelArg ( s - > krnl , 3 , sizeof ( cl_int ) , & in_y_height ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 3 , sizeof ( cl_int ) , & zero ) ) ; // src_offset
CL_CHECK ( clSetKernelArg ( s - > krnl , 4 , sizeof ( cl_int ) , & in_y_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 4 , sizeof ( cl_int ) , & in_y_height ) ) ; // src_rows
CL_CHECK ( clSetKernelArg ( s - > krnl , 5 , sizeof ( cl_mem ) , & out_y ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 5 , sizeof ( cl_int ) , & in_y_width ) ) ; // src_cols
CL_CHECK ( clSetKernelArg ( s - > krnl , 6 , sizeof ( cl_int ) , & out_y_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 6 , sizeof ( cl_mem ) , & out_y ) ) ; // dst
CL_CHECK ( clSetKernelArg ( s - > krnl , 7 , sizeof ( cl_int ) , & zero ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 7 , sizeof ( cl_int ) , & out_y_width ) ) ; // dst_row_stride
CL_CHECK ( clSetKernelArg ( s - > krnl , 8 , sizeof ( cl_int ) , & out_y_height ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 8 , sizeof ( cl_int ) , & zero ) ) ; // dst_offset
CL_CHECK ( clSetKernelArg ( s - > krnl , 9 , sizeof ( cl_int ) , & out_y_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 9 , sizeof ( cl_int ) , & out_y_height ) ) ; // dst_rows
CL_CHECK ( clSetKernelArg ( s - > krnl , 10 , sizeof ( cl_mem ) , & s - > m_y_cl ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 10 , sizeof ( cl_int ) , & out_y_width ) ) ; // dst_cols
CL_CHECK ( clSetKernelArg ( s - > krnl , 11 , sizeof ( cl_mem ) , & s - > m_y_cl ) ) ; // M
const size_t work_size_y [ 2 ] = { ( size_t ) out_y_width , ( size_t ) out_y_height } ;
const size_t work_size_y [ 2 ] = { ( size_t ) out_y_width , ( size_t ) out_y_height } ;
@ -74,21 +76,21 @@ void transform_queue(Transform* s,
const size_t work_size_uv [ 2 ] = { ( size_t ) out_uv_width , ( size_t ) out_uv_height } ;
const size_t work_size_uv [ 2 ] = { ( size_t ) out_uv_width , ( size_t ) out_uv_height } ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 1 , sizeof ( cl_int ) , & in_uv_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 2 , sizeof ( cl_int ) , & in_uv_px_stride ) ) ; // src_px_stride
CL_CHECK ( clSetKernelArg ( s - > krnl , 2 , sizeof ( cl_int ) , & in_u_offset ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 3 , sizeof ( cl_int ) , & in_u_offset ) ) ; // src_offset
CL_CHECK ( clSetKernelArg ( s - > krnl , 3 , sizeof ( cl_int ) , & in_uv_height ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 4 , sizeof ( cl_int ) , & in_uv_height ) ) ; // src_rows
CL_CHECK ( clSetKernelArg ( s - > krnl , 4 , sizeof ( cl_int ) , & in_uv_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 5 , sizeof ( cl_int ) , & in_uv_width ) ) ; // src_cols
CL_CHECK ( clSetKernelArg ( s - > krnl , 5 , sizeof ( cl_mem ) , & out_u ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 6 , sizeof ( cl_mem ) , & out_u ) ) ; // dst
CL_CHECK ( clSetKernelArg ( s - > krnl , 6 , sizeof ( cl_int ) , & out_uv_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 7 , sizeof ( cl_int ) , & out_uv_width ) ) ; // dst_row_stride
CL_CHECK ( clSetKernelArg ( s - > krnl , 7 , sizeof ( cl_int ) , & zero ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 8 , sizeof ( cl_int ) , & zero ) ) ; // dst_offset
CL_CHECK ( clSetKernelArg ( s - > krnl , 8 , sizeof ( cl_int ) , & out_uv_height ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 9 , sizeof ( cl_int ) , & out_uv_height ) ) ; // dst_rows
CL_CHECK ( clSetKernelArg ( s - > krnl , 9 , sizeof ( cl_int ) , & out_uv_width ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 10 , sizeof ( cl_int ) , & out_uv_width ) ) ; // dst_cols
CL_CHECK ( clSetKernelArg ( s - > krnl , 10 , sizeof ( cl_mem ) , & s - > m_uv_cl ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 11 , sizeof ( cl_mem ) , & s - > m_uv_cl ) ) ; // M
CL_CHECK ( clEnqueueNDRangeKernel ( q , s - > krnl , 2 , NULL ,
CL_CHECK ( clEnqueueNDRangeKernel ( q , s - > krnl , 2 , NULL ,
( const size_t * ) & work_size_uv , NULL , 0 , 0 , NULL ) ) ;
( const size_t * ) & work_size_uv , NULL , 0 , 0 , NULL ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 2 , sizeof ( cl_int ) , & in_v_offset ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 3 , sizeof ( cl_int ) , & in_v_offset ) ) ; // src_ofset
CL_CHECK ( clSetKernelArg ( s - > krnl , 5 , sizeof ( cl_mem ) , & out_v ) ) ;
CL_CHECK ( clSetKernelArg ( s - > krnl , 6 , sizeof ( cl_mem ) , & out_v ) ) ; // dst
CL_CHECK ( clEnqueueNDRangeKernel ( q , s - > krnl , 2 , NULL ,
CL_CHECK ( clEnqueueNDRangeKernel ( q , s - > krnl , 2 , NULL ,
( const size_t * ) & work_size_uv , NULL , 0 , 0 , NULL ) ) ;
( const size_t * ) & work_size_uv , NULL , 0 , 0 , NULL ) ) ;