📄 tools_process.c
字号:
/*
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2006-2008 Beijing, pengzhen (pengzhenxp@yahoo.com.cn) //
// //
///////////////////////////////////////////////////////////////////////////////
*/
void write_avi_init( avi_context *lpWriteAvi )
{
memset( lpWriteAvi, 0x00, sizeof(avi_context) ) ;
lpWriteAvi->video_Handler = 0 ;
lpWriteAvi->video_tag = FOURCC_VIDEO ;
lpWriteAvi->rgb_bit_count = 24 ; /*RGB24*/
//lpWriteAvi->rgb_bit_count = 8*m_bmp_stride/m_width ;
lpWriteAvi->key_frame = 1 ;
lpWriteAvi->width = m_width ;
lpWriteAvi->height = m_height ;
lpWriteAvi->frame_rate = 25;
}
void get_convert_yuv_function( int colorspace )
{
switch(colorspace )
{
case MPV_CSP_RGB32 :
m_write_avi.rgb_bit_count = 32 ;
m_bmp_stride = m_width*4 ;
m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_RGB32 ) ;
printf( "\nconvert Yuv420 to RGB32 \n" ) ;
break ;
case MPV_CSP_RGB24 :
m_write_avi.rgb_bit_count = 24 ;
m_bmp_stride = m_width*3 ;
m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_RGB24 ) ;
printf( "\nconvert Yuv420 to RGB24 \n" ) ;
break ;
case MPV_CSP_RGB565 :
m_write_avi.rgb_bit_count = 16 ; /* BI_BITFIELDS */
m_bmp_stride = m_width*2 ;
m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_RGB565 ) ;
printf( "\nconvert Yuv420 to RGB565 \n" ) ;
break ;
case MPV_CSP_RGB555 :
m_write_avi.rgb_bit_count = 15 ; /* BI_BITFIELDS */
//m_write_avi.rgb_bit_count = 16 ; /* */
m_bmp_stride = m_width*2 ;
m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_RGB555 ) ;
printf( "\nconvert Yuv420 to RGB555 \n" ) ;
break ;
}
}
void tools_process( char* lpYuv420P_Y ,
char* lpYuv420P_U ,
char* lpYuv420P_V ,
char* lpBMP ,
int iYuv420P_Length, int iBmp_Length )
{
unsigned int dwTotalCycles = 0 ;
unsigned int dwStartCycles = 0 ;
int fv_flag = ( m_fp_in_v != NULL ) ;
lpBMP += 8 ; /* for write avi head */
while( fv_flag )
{
/* read file */
fv_flag = (int)(fread( lpYuv420P_Y, 1, iYuv420P_Length, m_fp_in_v )) == iYuv420P_Length ;
if( !fv_flag ) continue ;
/* read cycles */
dwStartCycles = hmpv_read_fcnt() ;
if( m_dvp_pack_yuv420 )
{
m_dvp_pack_yuv420( lpYuv420P_Y, m_width,
lpYuv420P_U,
lpYuv420P_V, (m_width>>1),
lpBMP, m_width, -m_height, m_bmp_stride );
}
/* write cycles */
dwTotalCycles += hmpv_read_fcnt() - dwStartCycles ;
/* write file */
write_avi_packet( &m_write_avi, m_write_avi.video_tag, lpBMP-8 , iBmp_Length ) ;
m_write_avi.frame_number ++ ; /* next */
#ifdef __OUT_RAW__
fwrite( lpBMP , 1, iBmp_Length, m_file_out_raw_v ) ;
#endif /*__OUT_RAW__*/
printf("dvp tansform frames %d \r", m_write_avi.frame_number );
}
/* report */
tools_report ( dwTotalCycles, m_write_avi.frame_number ) ;
}
static void tools_main(int argc,char **argv)
{
int iLength ;
int iYuv420P_Length ;
int iBmp_Length ;
char* lpYuv420P ;
char* lpBMP ;
char* lpYuv420P_Y ;
char* lpYuv420P_U ;
char* lpYuv420P_V ;
/* write avi init */
write_avi_init( &m_write_avi ) ;
/* parameter */
get_parameter( argc, argv ) ;
/* get convert_yuv function */
get_convert_yuv_function( m_colorspace ) ;
iBmp_Length = (m_bmp_stride*m_height) ;
iLength = (m_width*m_height) ;
iYuv420P_Length = (iLength*3)/2 ;
//iBmp_Length = (iLength*4) ;
lpYuv420P = (char*)M_ALLOC( iYuv420P_Length + 32 ) ;
lpBMP = (char*)M_ALLOC( iBmp_Length + 32 ) ;
lpYuv420P_Y = lpYuv420P ;
lpYuv420P_U = lpYuv420P + (iLength) ;
lpYuv420P_V = lpYuv420P + (iLength) + (iLength/4) ;
/* file open */
m_fp_in_v = fopen(m_in_file_name,"rb");
if( ! m_fp_in_v ) { printf("can't open file : %s \n", m_in_file_name ); return ; }
#ifdef __OUT_RAW__
m_file_out_raw_v = fopen(m_out_raw_file_name,"wb");
//if( ! m_file_out_raw_v ) printf("can't open file : %s \n", m_file_out_raw_v );
#endif /*__OUT_RAW__*/
/* write avi head */
write_avi_header( &m_write_avi , m_out_file_name ) ;
/* tools process */
tools_process( lpYuv420P_Y, lpYuv420P_U, lpYuv420P_V, lpBMP, iYuv420P_Length, iBmp_Length ) ;
/* write avi trailer */
write_avi_trailer( &m_write_avi , m_out_file_name ) ;
M_FREE( lpYuv420P );
M_FREE( lpBMP );
/* file close */
if(m_fp_in_v) fclose(m_fp_in_v);
#ifdef __OUT_RAW__
if(m_file_out_raw_v) fclose(m_file_out_raw_v);
#endif /*__OUT_RAW__*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -