⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 convert.c

📁 DM642平台上的H.264源码(可实时运行)
💻 C
📖 第 1 页 / 共 2 页
字号:
//	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 + -