#include #include #include #include #include #include "csi_dsp_api.h" #include "csi_dsp_task_defs.h" #include "csi_dsp_post_process_defs.h" #include "CppUTest/TestHarness.h" #include "CppUTest/CommandLineTestRunner.h" struct buf_param{ int with; int height; int stride; int plane_num; }; TEST_GROUP(DspPostProcessTestBasic) { void setup() { instance = csi_dsp_create_instance(0); if(!instance) { FAIL_TEST("create fail\n"); } task= csi_dsp_create_task(instance,CSI_DSP_TASK_SW_TO_SW); if(!task) { FAIL_TEST("task create fail\n"); } } void teardown() { csi_dsp_destroy_task(task); csi_dsp_delete_instance(instance); } void *instance; void *task; int oneRequsetHelper(int with,int height,int stride,int plane_num) { int i=0; int j=0; int ret =0 ; struct timeval time_enqueue; struct timeval time_dequeue; csi_dsp_algo_load_req_t alog_config={ .algo_id=0, }; if(csi_dsp_task_load_algo(task,&alog_config)) { FAIL_TEST("algo kernel load fail\n"); } struct csi_sw_task_req* req=NULL; req =csi_dsp_task_create_request(task); if(req==NULL) { FAIL_TEST("req create fail\n"); } struct csi_dsp_buffer buf1; buf1.buf_id = 0; buf1.dir = CSI_DSP_BUFFER_IN; buf1.type = CSI_DSP_BUF_ALLOC_DRV; buf1.plane_count = plane_num; buf1.width =with; buf1.height =height; for(i=0;istatus != CSI_DSP_SW_REQ_DONE) { FAIL_TEST("req dequeue fail\n"); } gettimeofday(&time_dequeue, 0); printf("req:%d,start:%d,%d,end:%d,%d\n",req->request_id,time_enqueue.tv_sec,time_enqueue.tv_usec,time_dequeue.tv_sec,time_dequeue.tv_usec); // MEMCMP_EQUAL((void*)buf1.planes[0].buf_vir,(void *)buf2.planes[0].buf_vir,buf1.planes[0].size); for(i=0;i0;loop--) { req = csi_dsp_request_dequeue(task); if(req==NULL && req->status != CSI_DSP_SW_REQ_DONE) { FAIL_TEST("req dequeue fail\n"); } // MEMCMP_EQUAL((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); int ret = memcmp((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); CHECK_EQUAL_ZERO(ret); csi_dsp_task_release_request(req); } } TEST(DspPostProcessTestBasic,MultiProcessReqEnqueueConcentration) { struct csi_sw_task_req* req_list[6]; int loop=0; struct csi_sw_task_req* req=NULL; int req_num = sizeof(req_list)/sizeof(struct csi_sw_task_req*); csi_dsp_algo_load_req_t alog_config={ .algo_id=0, }; if(csi_dsp_task_load_algo(task,&alog_config)) { FAIL_TEST("algo kernel load fail\n"); } for(loop =0 ;loop < req_num;loop++) { req =csi_dsp_task_create_request(task); if(req==NULL) { FAIL_TEST("req create fail\n"); } req_list[loop]=req; struct csi_dsp_buffer buf1; buf1.buf_id = 0; buf1.dir = CSI_DSP_BUFFER_IN; buf1.type = CSI_DSP_BUF_ALLOC_DRV; buf1.plane_count = 1; buf1.width =640; buf1.height =480; buf1.planes[0].stride= 640; buf1.planes[0].size= 640*480; if(csi_dsp_request_add_buffer(req,&buf1)) { csi_dsp_task_release_request(req); FAIL_TEST("Add buffer:%d\n"); } int i=0; for(i=0;i0;loop--) { req = csi_dsp_request_dequeue(task); if(req==NULL && req->status != CSI_DSP_SW_REQ_DONE) { FAIL_TEST("req dequeue fail\n"); } // MEMCMP_EQUAL((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); int ret = memcmp((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); CHECK_EQUAL_ZERO(ret); csi_dsp_task_release_request(req); } } TEST(DspPostProcessTestBasic,MultiProcessReqEnqueueConcentration_1) { struct csi_sw_task_req* req_list[6]; int loop=0; struct csi_sw_task_req* req=NULL; int req_num = sizeof(req_list)/sizeof(struct csi_sw_task_req*); csi_dsp_algo_load_req_t alog_config={ .algo_id=0, }; if(csi_dsp_task_load_algo(task,&alog_config)) { FAIL_TEST("algo kernel load fail\n"); } for(loop =0 ;loop < req_num;loop++) { req =csi_dsp_task_create_request(task); if(req==NULL) { FAIL_TEST("req create fail\n"); } req_list[loop]=req; struct csi_dsp_buffer buf1; buf1.buf_id = 0; buf1.dir = CSI_DSP_BUFFER_IN; buf1.type = CSI_DSP_BUF_ALLOC_DRV; buf1.plane_count = 1; buf1.width =640; buf1.height =480; buf1.planes[0].stride= 640; buf1.planes[0].size= 640*480; if(csi_dsp_request_add_buffer(req,&buf1)) { csi_dsp_task_release_request(req); FAIL_TEST("Add buffer:%d\n"); } int i=0; for(i=0;i0;loop--) { req = csi_dsp_request_dequeue(task); if(req==NULL && req->status != CSI_DSP_SW_REQ_DONE) { FAIL_TEST("req dequeue fail\n"); } } for(loop =0 ;loop < req_num;loop++) { req = req_list[loop]; // MEMCMP_EQUAL((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); int ret = memcmp((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); CHECK_EQUAL_ZERO(ret); csi_dsp_task_release_request(req); } } TEST(DspPostProcessTestBasic,MultiProcessReqEnqueueConcentration_profile_640) { struct csi_sw_task_req* req_list[6]; struct timeval cur_time_enqueue[6]; struct timeval cur_time_dequeue[6]; int loop=0; struct csi_sw_task_req* req=NULL; int req_num = sizeof(req_list)/sizeof(struct csi_sw_task_req*); csi_dsp_algo_load_req_t alog_config={ .algo_id=0, }; if(csi_dsp_task_load_algo(task,&alog_config)) { FAIL_TEST("algo kernel load fail\n"); } for(loop =0 ;loop < req_num;loop++) { req =csi_dsp_task_create_request(task); if(req==NULL) { FAIL_TEST("req create fail\n"); } req_list[loop]=req; struct csi_dsp_buffer buf1; buf1.buf_id = 0; buf1.dir = CSI_DSP_BUFFER_IN; buf1.type = CSI_DSP_BUF_ALLOC_DRV; buf1.plane_count = 1; buf1.width =640; buf1.height =480; buf1.planes[0].stride= 640; buf1.planes[0].size= 640*480; if(csi_dsp_request_add_buffer(req,&buf1)) { csi_dsp_task_release_request(req); FAIL_TEST("Add buffer:%d\n"); } int i=0; for(i=0;i0;loop--) { req = csi_dsp_request_dequeue(task); if(req==NULL && req->status != CSI_DSP_SW_REQ_DONE) { FAIL_TEST("req dequeue fail\n"); } gettimeofday(&cur_time_dequeue[loop], 0); } for(loop =0 ;loop < req_num;loop++) { printf("req:%d,start:%d,%d,end:%d,%d\n",req_list[loop]->request_id,cur_time_enqueue[loop].tv_sec,cur_time_enqueue[loop].tv_usec, cur_time_dequeue[loop].tv_sec,cur_time_dequeue[loop].tv_usec); } for(loop =0 ;loop < req_num;loop++) { req = req_list[loop]; // MEMCMP_EQUAL((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); int ret = memcmp((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); CHECK_EQUAL_ZERO(ret); csi_dsp_task_release_request(req); } } TEST(DspPostProcessTestBasic,MultiProcessReqEnqueueConcentration_profile_1920) { struct csi_sw_task_req* req_list[6]; struct timeval cur_time_enqueue[6]; struct timeval cur_time_dequeue[6]; int loop=0; struct csi_sw_task_req* req=NULL; int req_num = sizeof(req_list)/sizeof(struct csi_sw_task_req*); csi_dsp_algo_load_req_t alog_config={ .algo_id=0, }; if(csi_dsp_task_load_algo(task,&alog_config)) { FAIL_TEST("algo kernel load fail\n"); } for(loop =0 ;loop < req_num;loop++) { req =csi_dsp_task_create_request(task); if(req==NULL) { FAIL_TEST("req create fail\n"); } req_list[loop]=req; struct csi_dsp_buffer buf1; buf1.buf_id = 0; buf1.dir = CSI_DSP_BUFFER_IN; buf1.type = CSI_DSP_BUF_ALLOC_DRV; buf1.plane_count = 1; buf1.width =1920; buf1.height =1080; buf1.planes[0].stride= 1920; buf1.planes[0].size= 1920*1080; if(csi_dsp_request_add_buffer(req,&buf1)) { csi_dsp_task_release_request(req); FAIL_TEST("Add buffer:%d\n"); } int i=0; for(i=0;i0;loop--) { req = csi_dsp_request_dequeue(task); if(req==NULL && req->status != CSI_DSP_SW_REQ_DONE) { FAIL_TEST("req dequeue fail\n"); } gettimeofday(&cur_time_dequeue[loop], 0); } uint32_t counter; for(loop =0 ;loop < req_num;loop++) { printf("req:%d,start:%d,%d,end:%d,%d\n",req_list[loop]->request_id,cur_time_enqueue[loop].tv_sec,cur_time_enqueue[loop].tv_usec, cur_time_dequeue[loop].tv_sec,cur_time_dequeue[loop].tv_usec); } for(loop =0 ;loop < req_num;loop++) { req = req_list[loop]; // MEMCMP_EQUAL((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); int ret = memcmp((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); CHECK_EQUAL_ZERO(ret); csi_dsp_task_release_request(req); } } TEST(DspPostProcessTestBasic,MultiProcessReqEnqueueConcentration_profile_4096) { struct csi_sw_task_req* req_list[6]; struct timeval cur_time_enqueue[6]; struct timeval cur_time_dequeue[6]; int loop=0; struct csi_sw_task_req* req=NULL; int req_num = sizeof(req_list)/sizeof(struct csi_sw_task_req*); csi_dsp_algo_load_req_t alog_config={ .algo_id=0, }; if(csi_dsp_task_load_algo(task,&alog_config)) { FAIL_TEST("algo kernel load fail\n"); } for(loop =0 ;loop < req_num;loop++) { req =csi_dsp_task_create_request(task); if(req==NULL) { FAIL_TEST("req create fail\n"); } req_list[loop]=req; struct csi_dsp_buffer buf1; buf1.buf_id = 0; buf1.dir = CSI_DSP_BUFFER_IN; buf1.type = CSI_DSP_BUF_ALLOC_DRV; buf1.plane_count = 1; buf1.width =4096; buf1.height =2160; buf1.planes[0].stride= 4096; buf1.planes[0].size= 4096*2160; if(csi_dsp_request_add_buffer(req,&buf1)) { csi_dsp_task_release_request(req); FAIL_TEST("Add buffer:%d\n"); } int i=0; for(i=0;i0;loop--) { req = csi_dsp_request_dequeue(task); if(req==NULL && req->status != CSI_DSP_SW_REQ_DONE) { FAIL_TEST("req dequeue fail\n"); } gettimeofday(&cur_time_dequeue[loop], 0); } uint32_t counter; for(loop =0 ;loop < req_num;loop++) { printf("req:%d,start:%d,%d,end:%d,%d\n",req_list[loop]->request_id,cur_time_enqueue[loop].tv_sec,cur_time_enqueue[loop].tv_usec, cur_time_dequeue[loop].tv_sec,cur_time_dequeue[loop].tv_usec); } for(loop =0 ;loop < req_num;loop++) { req = req_list[loop]; // MEMCMP_EQUAL((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); int ret = memcmp((void*)req->buffers[0].planes[0].buf_vir,(void *)req->buffers[1].planes[0].buf_vir,req->buffers[0].planes[0].size); CHECK_EQUAL_ZERO(ret); csi_dsp_task_release_request(req); } } int main( int argc, char **argv ) { return RUN_ALL_TESTS(argc, argv); } // int main(int argc, char *argv[]) // { // printf("Dsp Post Process Test Start !\n"); // void *instance = csi_dsp_create_instance(0); // if(!instance) // { // printf("create fail\n"); // return -1; // } // void *task= csi_dsp_create_task(instance,CSI_DSP_TASK_SW_TO_SW); // if(!task) // { // printf("task create fail\n"); // return -1; // } // struct csi_dsp_algo_config_par alog_config={ // .algo_id=0, // }; // if(csi_dsp_task_config_algo(task,&alog_config)) // { // printf("algo kernel config fail\n"); // return -1; // } // struct csi_sw_task_req* req=NULL; // req =csi_dsp_task_create_request(task); // if(req==NULL) // { // printf("req create fail\n"); // return -1; // } // struct csi_dsp_buffer buf1 = // { // .buf_id = 0, // .dir = CSI_DSP_BUFFER_IN, // .type = CSI_DSP_BUF_ALLOC_DRV, // .plane_count = 1, // .width =640, // .height =480, // .planes[0].stride= 640, // .planes[0].size= 604*480, // }; // if(csi_dsp_request_add_buffer(req,&buf1)) // { // printf("%s,add buffer:%d\n",__FUNCTION__,buf1.buf_id); // csi_dsp_task_release_request(req); // return -1; // } // int i=0; // for(i=0;istatus != CSI_DSP_SW_REQ_DONE) // { // printf("%s,req dequeue fail:%d\n",__FUNCTION__); // return -1; // } // if(memcmp((void*)buf1.planes[0].buf_vir,(void *)buf2.planes[0].buf_vir,buf1.planes[0].size)) // { // printf("%s,cmp fail\n",__FUNCTION__); // csi_dsp_task_release_request(req); // csi_dsp_destroy_task(task); // csi_dsp_delete_instance(instance); // return -1; // } // csi_dsp_task_release_request(req); // csi_dsp_destroy_task(task); // csi_dsp_delete_instance(instance); // printf("%s,Test Pass!\n",__FUNCTION__); // return 0; // }