?? tskvideoinput0_old.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 + -