📄 convert.c
字号:
// pSrcV = buffer[2];
#endif
*/
qdma_countY = EDMA_MK_CNT(width>>2,0);
qdma_idxY = EDMA_MK_IDX(0, 0);
qdma_optY = EDMA_MK_OPT(EDMA_OPT_FS_NO,
EDMA_OPT_LINK_NO,
EDMA_OPT_TCC_OF(CHANNEL12),
EDMA_OPT_TCINT_YES,
EDMA_OPT_DUM_INC,
EDMA_OPT_2DD_NO,
EDMA_OPT_SUM_INC,
EDMA_OPT_2DS_NO,
EDMA_OPT_ESIZE_32BIT,
EDMA_OPT_PRI_LOW) | TCCM(CHANNEL12);
qdma_countU = EDMA_MK_CNT(ch_width>>2,0);
qdma_idxU = EDMA_MK_IDX(0, 0);
qdma_optU = EDMA_MK_OPT(EDMA_OPT_FS_NO,
EDMA_OPT_LINK_NO,
EDMA_OPT_TCC_OF(CHANNEL13),
EDMA_OPT_TCINT_YES,
EDMA_OPT_DUM_INC,
EDMA_OPT_2DD_NO,
EDMA_OPT_SUM_INC,
EDMA_OPT_2DS_NO,
EDMA_OPT_ESIZE_32BIT,
EDMA_OPT_PRI_LOW) | TCCM(CHANNEL13);
qdma_countV = EDMA_MK_CNT(ch_width>>2,0);
qdma_idxV = EDMA_MK_IDX(0, 0);
qdma_optV = EDMA_MK_OPT(EDMA_OPT_FS_NO,
EDMA_OPT_LINK_NO,
EDMA_OPT_TCC_OF(CHANNEL14),
EDMA_OPT_TCINT_YES,
EDMA_OPT_DUM_INC,
EDMA_OPT_2DD_NO,
EDMA_OPT_SUM_INC,
EDMA_OPT_2DS_NO,
EDMA_OPT_ESIZE_32BIT,
EDMA_OPT_PRI_LOW) | TCCM(CHANNEL14);
for( rowindex = 0; rowindex < ch_height;rowindex++)
{
QDMA_START(qdma_optY, pSrcY, qdma_countY, pDestY, qdma_idxY);
// pSrcY += width;
pSrcY += pitch;
pDestY += width;
QDMA_START(qdma_optY, pSrcY, qdma_countY, pDestY, qdma_idxY);
// pSrcY += width;
pSrcY += pitch;
pDestY += width;
QDMA_START(qdma_optU, pSrcU, qdma_countU, pDestU, qdma_idxU);
QDMA_START(qdma_optV, pSrcV, qdma_countV, pDestV, qdma_idxV);
// pSrcU += 2*ch_width;
// pSrcV += 2*ch_width;
pSrcU += (pitch+15)&~15;//368;
pSrcV += (pitch+15)&~15;//368;
pDestU += ch_width;
pDestV += ch_width;
QDMA_WAIT_HIGH(CHANNEL13);
QDMA_WAIT_HIGH(CHANNEL14);
}
QDMA_WAIT_HIGH(CHANNEL12);
#endif
return ;
}
#ifndef OPF_WIDTH
#define OPF_WIDTH 720
#endif
extern char dis_mem_temp[OPF_WIDTH];
//extern int errint[16][16];
/*int errint[16][16]={
-1,1,-1,0,0,1,-1,0,0,0,-1,-1,0,1,0,-1,
-1,0,-1,0,1,1,0,0,0,0,-1,1,0,0,1,1,
-1,-1,0,1,0,0,0,1,1,-1,1,1,0,0,1,1,
0,0,0,0,-1,1,0,0,0,0,0,1,0,0,0,-1,
-1,-1,0,1,1,0,0,0,0,0,1,0,-1,0,-1,0,
-1,1,0,-1,0,-1,-1,1,-1,0,0,0,0,-1,0,0,
0,-1,0,0,1,0,0,0,-1,-1, 1,-1, -1,0,-1,1,
0,0,0,1,0,-1,1,-1,0,-1,0,1,0,1,1,0,
-1,0,-1,0,-1,-1,-1,0,0,-1,-1, 0,0,1,0,-1,
1,1,0,1,-1,-1, 1,1,0,0,-1,0,0,-1,1,-1,
-1,0,0,0,0,0,-1,-1,1, 0,1,0,0,1,-1,1,
0,-1,-1,0,0,1,-1,0,0,-1,0,-1,1,0,0,0,
0, 0,1,-1,0,0,0,0,1, 0,0,0 ,0,0,-1,-1,
-1,0,0,0,1,1,0, 1,1,0,-1,0,0,1,0,0,
-1,1,-1,0,1,0,0,0,1,0,0, 0, 0 ,1,0,0,
1,-1,0,0,1,0,0,-1,-1,1,-1,0,0,-1,0,1
};*/
#ifdef DISP_D1
void yuv420to422( char *frameIn[], char *frm_out[], int width, int height)
{
char *pSrcY = frameIn[0];
char *pSrcU = frameIn[1];
char *pSrcV = frameIn[2];
char *pDestY = frm_out[0];
char *pDestU = frm_out[1];
char *pDestV = frm_out[2];
unsigned int i,j,ii,indexf;
//720*576
int kk;
// memset(dis_mem_temp,0x00,OPF_WIDTH);
for( i = 0; i < height; i++)
{
kk=i*width;
for( j = 0;j < width; j+=4)//352
{
dis_mem_temp[j*2] =*(pSrcY + kk+j +704*4);
dis_mem_temp[j*2+1]=*(pSrcY + kk+j +704*4);
dis_mem_temp[j*2+2]=*(pSrcY + kk+j+1 +704*4);
dis_mem_temp[j*2+3]=*(pSrcY + kk+j+1 +704*4);
dis_mem_temp[j*2+4]=*(pSrcY + kk+j+2 +704*4);
dis_mem_temp[j*2+5]=*(pSrcY + kk+j+2 +704*4);
dis_mem_temp[j*2+6]=*(pSrcY + kk+j+3 +704*4);
dis_mem_temp[j*2+7]=*(pSrcY + kk+j+3 +704*4);
}
/* for( j = 0;j < 2*width; j+=16)//704 //wq
{
for(ii=0;ii<16;ii++)
{
indexf = dis_mem_temp[16*j]&0x0f;
dis_mem_temp[16*j+ii] += 3*errint[indexf][ii];
}
}*/
memcpy(pDestY + (2*i) * OPF_WIDTH,dis_mem_temp,OPF_WIDTH);
memcpy(pDestY + (2*i+1) * OPF_WIDTH,dis_mem_temp,OPF_WIDTH);
}
// memset(dis_mem_temp,0x80,OPF_WIDTH);
for( i = 0; i < height/2; i++)
{
kk =(i*width>>1);
for( j = 0;j < width/2; j+=2)
{
dis_mem_temp[j*2] = *(pSrcU + kk+j +352*2);
dis_mem_temp[j*2+1]= *(pSrcU + kk+j +352*2);
dis_mem_temp[j*2+2]= *(pSrcU + kk+j+1 +352*2);
dis_mem_temp[j*2+3]= *(pSrcU + kk+j+1 +352*2);
}
/* for( j = 0;j < width; j+=16)//352 //wq
{
for(ii=0;ii<16;ii++)
{
indexf = dis_mem_temp[16*j]&0x0f;
dis_mem_temp[16*j+ii] += errint[indexf][ii];
}
}*/
memcpy(pDestU + (2*i*OPF_WIDTH),dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestU + (2*i*OPF_WIDTH)+(OPF_WIDTH>>1),dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestU + (2*i+1)*OPF_WIDTH,dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestU + (2*i+1)*OPF_WIDTH+(OPF_WIDTH>>1),dis_mem_temp,(OPF_WIDTH>>1));
}
// memset(dis_mem_temp,0x80,OPF_WIDTH);
for( i = 0; i < height/2; i++)
{
kk=(i * width>>1);
for( j = 0;j < width/2; j+=2)
{
dis_mem_temp[j*2] = *(pSrcV +kk+j +352*2);
dis_mem_temp[j*2+1]= *(pSrcV +kk+j +352*2);
dis_mem_temp[j*2+2]= *(pSrcV +kk+j+1 +352*2);
dis_mem_temp[j*2+3]= *(pSrcV +kk+j+1 +352*2);
}
/* for( j = 0;j < width; j+=16)//352 //wq
{
for(ii=0;ii<16;ii++)
{
indexf = dis_mem_temp[16*j]&0x0f;
dis_mem_temp[16*j+ii] += errint[indexf][ii];
}
}*/
memcpy(pDestV + (2*i*OPF_WIDTH),dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestV + (2*i*OPF_WIDTH)+(OPF_WIDTH>>1),dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestV + (2*i+1)*OPF_WIDTH,dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestV + (2*i+1)*OPF_WIDTH+(OPF_WIDTH>>1),dis_mem_temp,(OPF_WIDTH>>1));
}
return ;
}
#endif
#ifdef DISP_CIF
void yuv420to422( char *frameIn[], char *frm_out[], int width, int height)
{
char *pSrcY = frameIn[0];
char *pSrcU = frameIn[1];
char *pSrcV = frameIn[2];
char *pDestY = frm_out[0];//+720*120;
char *pDestU = frm_out[1];//+360*60;
char *pDestV = frm_out[2];//+360*60;
unsigned int i,j;
//for 352*288//向下移动120行
//中间
int kk;
memset(dis_mem_temp,0x00,OPF_WIDTH);
// printf("%d,%d\n",width,height);
for( i = 0; i < height; i++)
{
memcpy(dis_mem_temp,pSrcY + (i * width),width);
memcpy(pDestY + (i * OPF_WIDTH),dis_mem_temp,OPF_WIDTH);
}
memset(dis_mem_temp,0x80,OPF_WIDTH);
for( i = 0; i < height/2; i++)
{
memcpy(dis_mem_temp,pSrcU + (i * (width >> 1)),(width >> 1));
memcpy(pDestU + (i*OPF_WIDTH),dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestU + (i*OPF_WIDTH)+(OPF_WIDTH>>1),dis_mem_temp,(OPF_WIDTH>>1));
}
memset(dis_mem_temp,0x80,OPF_WIDTH);
for( i = 0; i < height/2; i++)
{
memcpy(dis_mem_temp,pSrcV + (i * (width >> 1)),(width >> 1));
memcpy(pDestV + (i*OPF_WIDTH),dis_mem_temp,(OPF_WIDTH>>1));
memcpy(pDestV + (i*OPF_WIDTH)+(OPF_WIDTH>>1),dis_mem_temp,(OPF_WIDTH>>1));
}
return ;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -