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

📄 tskvideoinput0_old.c

📁 ZPAV (H265) DM64XX(TI) demo ZPAV (H265) 是 音视频 压缩解压 协议
💻 C
字号:

/*
///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//   Copyright (C) 2006-2008  Beijing,  pengzhen  (pengzhenxp@yahoo.com.cn)  //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
*/

//#pragma DATA_SECTION(int_mem_temp, ".user_data_int");
//#pragma DATA_ALIGN(int_mem_temp, 128);
//unsigned char int_mem_temp[720];

//typedef unsigned char uint8_t ;
typedef unsigned int  uint32_t ;

static inline void dma_copy_420_c( Yuv420_Queue * dest, FVID_Frame * src, int width, int height )
{
	char * y_in = src->frame.iFrm.y1  ; 
	char * u_in = src->frame.iFrm.cb1 ;
	char * v_in = src->frame.iFrm.cr1 ;

	char * y_out = dest->m_pBuf_y ;  
	char * u_out = dest->m_pBuf_u ;  
	char * v_out = dest->m_pBuf_v ; 

	int width_c  = width>>1 ;   /* Yuv420 */
	int height_c  = height>>1 ; /* Yuv420 */

	int i ;

#if 1
	/* Y */
	DAT_wait( DAT_copy2d( DAT_2D2D, y_in, y_out, width, height, width) ) ;
#else 
	/* Y */
	i = height ;
    while( i-- ) 
    {
		DAT_wait( DAT_copy(y_in, y_out, width) ) ;

		y_in  += width ; y_out += width ; 
    }
#endif /* 1 */

	/* U */
	i = height_c ;
    while( i-- ) 
    {
		DAT_wait( DAT_copy(u_in, u_out, width_c) ) ;

		u_in  += width ; u_out += width_c ; 
    }

	/* V */
	i = height_c ;
    while( i-- ) 
    {
		DAT_wait( DAT_copy(v_in, v_out, width_c) ) ;

		v_in  += width ; v_out += width_c ; 
    }

	//CACHE_clean(CACHE_L2ALL, 0, 0);
}


static inline void scale_420_c( Yuv420_Queue * dest, FVID_Frame * src, int width, int height )
{

	uint32_t * y_in = (uint32_t*)( src->frame.iFrm.y1  ) ; 
	uint32_t * u_in = (uint32_t*)( src->frame.iFrm.cb1 ) ;
	uint32_t * v_in = (uint32_t*)( src->frame.iFrm.cr1 ) ;

	uint32_t * y_out = (uint32_t*)( dest->m_pBuf_y ) ;  
	uint32_t * u_out = (uint32_t*)( dest->m_pBuf_u ) ;  
	uint32_t * v_out = (uint32_t*)( dest->m_pBuf_v ) ; 

	int width_c  = width>>1 ;   /* Yuv420 */
	int height_c  = height>>1 ; /* Yuv420 */

	//int y_off = ( (width<<1) - width ) <<1 ; /* CIF */
	//int c_off = ( (width<<1) - width_c ) <<1 ; /* CIF */

	int i , j ;

	width   >>= 2 ; /* 4 = 2^^2 = sizeof(uint32_t) */
	width_c >>= 2 ; 
	//y_off   >>= 2 ; 
	//c_off   >>= 2 ;

	/* Y */
	i = height ;
    while( i-- ) 
    {
		j = width ;
		while ( j-- )
		{
			*y_out ++ = _packl4( y_in[1], y_in[0] ) ; y_in +=2 ; 
		}
		//y_in  += y_off ; 
    }

	/* U */
	i = height_c ;
    while( i-- ) 
    {
		j = width_c ;
		while ( j-- )
		{
			*u_out ++ = _packl4( u_in[1], u_in[0] ) ; u_in +=2 ; 
		}
		//u_in  += c_off ; 
		u_in  += width ;
    }

	/* V */
	i = height_c ;
    while( i-- ) 
    {
		j = width_c ;
		while ( j-- )
		{
			*v_out ++ = _packl4( v_in[1], v_in[0] ) ; v_in +=2 ; 
		}
		//v_in  += c_off ; 
		v_in  += width ;
    }
}

/**
* scale Yuv422 to Yuv420 
*/

static inline void scale_422_to_420_c( Yuv420_Queue * dest, FVID_Frame * src, int width , int height )
{

	int width0_y = width << 1 ; /* D1 */

	int width0_c = width0_y>>1 ; /* Yuv422 */ 
	int width_c  = width>>1 ;    /* Yuv420 */ 

	char * y_in = src->frame.iFrm.y1  ; 
	char * u_in = src->frame.iFrm.cb1 ;
	char * v_in = src->frame.iFrm.cr1 ;

	char * y_out = dest->m_pBuf_y ;  
	char * u_out = dest->m_pBuf_u ;  
	char * v_out = dest->m_pBuf_v ; 
		
	uint32_t * lpYuv422_Y1 = (uint32_t*)( y_in ) ;                 /* line 0 */ /* even */
	uint32_t * lpYuv422_Y2 = (uint32_t*)( y_in + (width0_y) ) ; /* line 2 */ /* even */
	
	uint32_t * lpYuv422_U1 = (uint32_t*)( u_in ) ;				   /* line 0 */ /* even */
	uint32_t * lpYuv422_U2 = (uint32_t*)( u_in + (width0_c) ) ; /* line 2 */ /* even */

	uint32_t * lpYuv422_V1 = (uint32_t*)( v_in ) ;				    /* line 0 */ /* even */
	uint32_t * lpYuv422_V2 = (uint32_t*)( v_in + (width0_c) ) ; /* line 2 */ /* even */

	uint32_t * lpY1 = (uint32_t*)( y_out ) ;         /* line 0 */ /* even */
	uint32_t * lpY2 = (uint32_t*)( y_out + width ) ; /* line 1 */ /* odd */
	uint32_t * lpU  = (uint32_t*)( u_out ) ;
	uint32_t * lpV  = (uint32_t*)( v_out ) ;

	int y_off = ( (width0_y) - width   ) <<1 ; /* CIF */
	int c_off = ( (width0_c) - width_c ) <<1 ; /* CIF */

	int i, j ;

	width   >>= 2 ; /* 4 = 2^^2 = sizeof(uint32_t) */
	width_c >>= 2 ; 
	y_off   >>= 2 ; 
	c_off   >>= 2 ;

	i = height >> 1 ; /* Yuv420 */
	while ( i -- ) 
	{
		j = width_c ;
		while ( j --) 
		{
			/* Y */
			*lpY1 ++ = _packl4( lpYuv422_Y1[1], lpYuv422_Y1[0] ) ; lpYuv422_Y1 +=2 ; 
			*lpY1 ++ = _packl4( lpYuv422_Y1[1], lpYuv422_Y1[0] ) ; lpYuv422_Y1 +=2 ;
			*lpY2 ++ = _packl4( lpYuv422_Y2[1], lpYuv422_Y2[0] ) ; lpYuv422_Y2 +=2 ; 
			*lpY2 ++ = _packl4( lpYuv422_Y2[1], lpYuv422_Y2[0] ) ; lpYuv422_Y2 +=2 ; 

			/* U */
			*lpU ++ = _avgu4( _packl4( lpYuv422_U1[1], lpYuv422_U1[0] ), 
				              _packl4( lpYuv422_U2[1], lpYuv422_U2[0] ) ) ; 
			
			lpYuv422_U1 +=2 ; lpYuv422_U2 +=2 ;

			/* V */
			*lpV ++ = _avgu4( _packl4( lpYuv422_V1[1], lpYuv422_V1[0] ), 
				              _packl4( lpYuv422_V2[1], lpYuv422_V2[0] ) ) ;
			
			lpYuv422_V1 +=2 ; lpYuv422_V2 +=2 ;
			
		}
		
		lpY1 += width ; /* next line */
		lpY2 += width ;

		lpYuv422_Y1 += y_off ;
		lpYuv422_Y2 += y_off ;

		lpYuv422_U1 += c_off ;
		lpYuv422_U2 += c_off ;

		lpYuv422_V1 += c_off ;
		lpYuv422_V2 += c_off ;
	}
	
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -