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

📄 riff.c

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

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

#include "RIFF.h"

#define RIFF_SIZE( filelen )  ( (filelen) - 8 )

#define RIFF_FORMAT_CHUNK_SIZE ( sizeof( ST_RIFF_FORMAT_CHUNK ) -8 )

#define RIFF_DATA_CHUNK_OFF ( sizeof(ST_RIFF_HDR)+         \
                              sizeof(ST_RIFF_WAV_ID)+      \
						      sizeof(ST_RIFF_FORMAT_CHUNK) ) 

#define RIFF_DATA_CHUNK_SIZE(a,  filelen ) { (a) = (filelen) -       \
                                             RIFF_DATA_CHUNK_OFF  -  \
										     sizeof(ST_RIFF_DATA_CHUNK) ; }
  
//#define RIFF_COPY_ID( a , b ) { memcpy( (a), (b), sizeof(b) ) ; }

#define RIFF_WRITE_FILE(a) { fwrite( &(a), 1, sizeof(a), fp ) ; \
					         m_iWaveFileHeadSize += sizeof(a) ;  }

/* write wave file header */  

void write_riff_head( FILE *fp , unsigned long dFileSize )

{

	ST_RIFF_HDR     lpRiff_Header  ={ "RIFF" , 0 };
	ST_RIFF_WAV_ID  lpRIFF_WAVE_ID ={ "WAVE" };
	ST_RIFF_FORMAT_CHUNK lpFormatChunk ={ "fmt " , 0 } ;
	ST_RIFF_DATA_CHUNK   lpDataChunk   ={ "data" , 0 };

   if( dFileSize == 0 ) 
   {
	   m_iWaveFileSize = m_iWaveFileHeadSize =0; /* first write head */
   }
   if( ! fp ) return  ; 

   // seek file 
   fseek(fp, 0, SEEK_SET ); 

   // riff
   //RIFF_COPY_ID( lpRiff_Header.m_id , RIFF_ID ) ;
   lpRiff_Header.m_size = RIFF_SIZE( dFileSize )  ;
   // write 
   RIFF_WRITE_FILE( lpRiff_Header ) ; 
  
   // wave 
   //RIFF_COPY_ID( lpRIFF_WAVE_ID.m_id , RIFF_WAVE_ID ) ; 
   //write
   RIFF_WRITE_FILE( lpRIFF_WAVE_ID ) ; 
 
   // format chunk 
   //RIFF_COPY_ID( lpFormatChunk.m_id , RIFF_FORMAT_ID ) ;
   lpFormatChunk.m_size = RIFF_FORMAT_CHUNK_SIZE ;

   lpFormatChunk.m_wbitspersample= 16 ;
   lpFormatChunk.m_wformattag    = 1 ; // no compression PCM 
   //lpFormatChunk.m_wchannels     = 2 ; // stero // mono   
   lpFormatChunk.m_wchannels     = RIFF_CHANNELS ; 
   lpFormatChunk.m_dwsamplespersec =RIFF_SAMPLE_RATE ; // 44100 
   lpFormatChunk.m_dwavgbytespersec=lpFormatChunk.m_wchannels*
	                                lpFormatChunk.m_dwsamplespersec*
	                                lpFormatChunk.m_wbitspersample/8 ;    
   
   lpFormatChunk.m_wblockalign   =  lpFormatChunk.m_wchannels*
	                                lpFormatChunk.m_wbitspersample/8 ;
   // write 
   RIFF_WRITE_FILE( lpFormatChunk ) ; 

   // data chunk
   //RIFF_COPY_ID( lpDataChunk.m_id , RIFF_DATA_ID ) ;
   RIFF_DATA_CHUNK_SIZE( lpDataChunk.m_size, dFileSize ) ;
   // write 
   RIFF_WRITE_FILE( lpDataChunk ) ;

   if( dFileSize == 0 ) 
   {
	   m_iWaveFileSize = m_iWaveFileHeadSize ; /* first write head */
   }

}


⌨️ 快捷键说明

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