123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #ifdef _XOS
- #define IDMA_APP_USE_XOS // will use inlined disable/enable int
- #endif
- #ifdef _XTOS
- #define IDMA_APP_USE_XTOS // will use inlined disable/enable int
- #endif
- //#include "CppUTest/CommandLineTestRunner.h"
- #include "CppUTest/TestHarness.h"
- #include "dmaif.h"
- #ifdef DSP_TEST
- #define IDMA_DEBUG 1
- // IDMA_BUFFER_DEFINE(task_write, 1, IDMA_64B_DESC);
- #define TCM_SIZE (32 * 1024)
- #define HOR_RES 4096
- #define VER_RES 3072
- #define SIZE_PER_PEX_BIT 8
- #define LINE_SIZE ((HOR_RES * SIZE_PER_PEX_BIT + 7) / 8)
- #define N_LINE 16
- static char temp_bufer_tcm0[TCM_SIZE] __attribute__((section(".dram0.data")));
- static char temp_bufer_tcm1[TCM_SIZE] __attribute__((section(".dram1.data")));
- #define MAX_ENTRY 256
- uint32_t post_isp_tick[MAX_ENTRY];
- uint32_t isp_int_tick[MAX_ENTRY];
- int32_t post_isp_cnt;
- int32_t isp_int_cnt;
- int compare(char *dst, char *src, uint32_t size) {
- int i;
- for (i = 0; i < size; i++) {
- if (src[i] != dst[i]) {
- printf("Compare fail,expect:%d,actrul:%d,at:%d\n", src[i], dst[i],
- i);
- return -1;
- }
- }
- return 0;
- }
- #define FRAME_NUM 2
- #define N_BUFFER_NUM 2
- char dst_pic[FRAME_NUM][VER_RES * LINE_SIZE];
- char source_pic[FRAME_NUM][VER_RES * LINE_SIZE];
- TEST_GROUP(TileIdmaTest){
- void setup(){
- int ind1, ind2,ind3;
- const int step=64;
- idma_obj =dmaif_getDMACtrl();
- idma_obj->init();
- for (ind1 = 0; ind1 < FRAME_NUM; ind1++) {
- for (ind2 = 0; ind2 < VER_RES; ind2++) {
- for(ind3 = 0;ind3 < LINE_SIZE; ind3+=step)
- {
- source_pic[ind1][LINE_SIZE * ind2+ind3] = (char)(rand() % 256);
- }
- dst_pic[ind1][LINE_SIZE * ind2] = (char)((rand() + 1) % 256);
- dst_pic[ind1][LINE_SIZE * (ind2 + 1) - 1] = (char)((rand() + 1) % 256);
- }
- }
- }
- int dumy_process(xvTile * out_tile,xvTile * in_tile)
- {
- if(!in_tile || !out_tile)
- {
- return -1;
- }
- uint32_t size_in = XV_TILE_GET_PITCH_IN_BYTES(in_tile)*XV_TILE_GET_HEIGHT(in_tile);
- uint32_t size_out = XV_TILE_GET_PITCH_IN_BYTES(out_tile)*XV_TILE_GET_HEIGHT(out_tile);
- uint32_t size = size_in>size_out?size_out:size_in;
- memcpy((void*)XV_TILE_GET_DATA_PTR(out_tile),(void*)XV_TILE_GET_DATA_PTR(in_tile),size);
- return 0;
- }
- void teardown() {
- idma_obj->uninit();
- idma_obj=NULL;
- }
- TMDMA * idma_obj;
- };
- TEST(TileIdmaTest, TestOneFrameTileBaseProcess_1) {
- uint32_t frame_counter = 0;
- TBOOL ret = TTRUE;
- unsigned int width=640;
- unsigned int height=480;
- unsigned int pitch=640;
- unsigned int pixRes=1;
- unsigned int tile_width =64;
- unsigned int tile_height =16;
- unsigned int tile_pitch=64;
- unsigned int x=0,y=0;
- xvTile *in_tile_obj;
- xvTile *out_tile_obj;
- uint32_t data_size;
- in_tile_obj = idma_obj->setup((uint64_t)&source_pic[0][0],VER_RES * LINE_SIZE,width,height,width,pixRes,1,0,0,
- tile_width*tile_height*pixRes,tile_width,tile_height,tile_width,0,0,0,XV_TILE_U8,DATA_ALIGNED_32);
- out_tile_obj = idma_obj->setup((uint64_t)&dst_pic[0][0],VER_RES * LINE_SIZE,width,height,width,pixRes,1,0,0,
- tile_width*tile_height*pixRes,tile_width,tile_height,tile_width,0,0,0,XV_TILE_U8,DATA_ALIGNED_32);
- do
- {
- ret =idma_obj->load(in_tile_obj, 0,0,0,0,0,0, 1);
- ret &=idma_obj->waitLoadDone(in_tile_obj);
- if(0!=dumy_process(out_tile_obj,in_tile_obj))
- {
- ret = TFALSE;
- break;
- }
- ret &=idma_obj->store(out_tile_obj, 0,0,0,0,0,0, 1);
- ret &=idma_obj->waitStoreDone(out_tile_obj);
- x+=tile_width;
- if(x>=width)
- {
- x=0;
- y+=tile_height;
- if(y>=height)
- {
- y=0;
- }
- }
- // XV_TILE_SET_X_COORD(in_tile_obj,x);
- // XV_TILE_SET_X_COORD(out_tile_obj,x);
- idma_obj->config(in_tile_obj,x,y);
- // XV_TILE_SET_Y_COORD(in_tile_obj,y);
- // XV_TILE_SET_Y_COORD(out_tile_obj,y);
- idma_obj->config(out_tile_obj,x,y);
- }while(!((in_tile_obj->x==0)&&(in_tile_obj->y==0)));
- ret &=idma_obj->release(in_tile_obj);
- ret &=idma_obj->release(out_tile_obj);
- CHECK_TRUE(ret);
- ret = compare((char *)dst_pic, (char *)source_pic, width * height*pixRes);
- CHECK_EQUAL_ZERO(ret);
- }
- TEST(TileIdmaTest, TestOneFrameNoTileBaseProcess_1) {
- int loop;
- unsigned int width=640;
- unsigned int height=480;
- unsigned int pitch=640;
- unsigned int pixRes=1;
- unsigned int tile_width =64;
- unsigned int tile_height =16;
- unsigned int tile_pitch=64;
- int buf_tcm_size = tile_pitch*tile_height*pixRes;
- int frame_size = height*pitch*pixRes;
- // int buf_out_tcm_size = buf_in_tcm_size;
- int fragment_size = frame_size % buf_tcm_size;
- int loop_num = frame_size / buf_tcm_size;
- TBOOL ret = TTRUE;
- int size = buf_tcm_size;
- loop_num = fragment_size ? loop_num + 1 : loop_num;
- uint32_t frame_counter = 0;
- uint32_t start,end;
- uint32_t data_size;
- uint32_t *buf_in_ptr;
- // uint32_t *buf_out_ptr;
- buf_in_ptr = (uint32_t *)idma_obj->allocateTcm(buf_tcm_size,0,32);
- for (loop = 0; loop < loop_num; loop++) {
- uint64_t dst1_wide =
- ((uint64_t)0xffffffff) & ((uint64_t)buf_in_ptr);
- uint64_t src1_wide = (uint64_t)source_pic + size * loop;
- uint64_t dst2_wide = (uint64_t)dst_pic + size * loop;
- if (loop == (loop_num - 1) && fragment_size) {
- size = fragment_size;
- }
- data_size= idma_obj->load(NULL,dst1_wide,src1_wide,size,size,1,size,1);
- ret &= data_size==0?TFALSE:TTRUE;
- data_size= idma_obj->store(NULL,dst2_wide,dst1_wide,size,size,1,size,1);
- ret &= data_size==0?TFALSE:TTRUE;
- ret &= idma_obj->waitDone(NULL,NULL);
- }
- ret &= idma_obj->freeTcm(buf_in_ptr);
- CHECK_TRUE(ret);
- ret = compare((char *)dst_pic, (char *)source_pic, width * height*pixRes);
- CHECK_EQUAL_ZERO(ret);
- }
- #endif
- //int main(int argc, char **argv) { return RUN_ALL_TESTS(argc, argv); }
|