c ffmpeg 学习

1.  int8_t    <==>     char       u_int8_t  ==  unsigned char

     int16_t    ==  short

     int32_t  ==int

2. #define  X(x)   x,x,x,x,x,x,x,x      //表示8个x  主要用于数组赋值

#include 
#include 
#include 

#define X8(x)  x,x,x,x,x,x,x,x           //X8(x) 表示8个x
#define X64(x)  x,x,x,x,x,x,x,x,\
                  x,x,x,x,x,x,x,x,\
                  x,x,x,x,x,x,x,x,\
                 x,x,x,x,x,x,x,x,\
                 x,x,x,x,x,x,x,x,\
                x,x,x,x,x,x,x,x,\
                x,x,x,x,x,x,x,x,\
                x,x,x,x,x,x,x,x      //X64(x)  表示64个x

int main(void){
	
	int32_t a[] = {
	X8(13036),  // tg * (2<<16) + 0.5
	X8(27146),  // tg * (2<<16) + 0.5
	X8(-21746)  // tg * (2<<16) + 0.5
	};
	
	printf("%d\n",a[0]);
	int  b[64]={X64(1)};
	printf("%d\n",b[63]);

	return 0;
}

     与memset(b,1 ,64) 等效

3. fwrite  fread

  fwrite(参数1,参数2,参数3,文件号)  参数2:相同单位内的字节数

                                                          参数3:表示有多少个相同单位

  利用参数2,3能方便写入和读取二维数组元素

 

4。DECLARE_ALIGEND( n,  类型,名字)   内存对齐,我理解这个内存对齐是ffmpeg为了兼容不同操作系统用的,对于linux X86 来说,直接按n的大小选数据类型就可以了,比如是8,就是char,16 就选short。下面的例子就是

short     fdct_tg_all_16[24]={....}

 //concatenated table, for forward DCT transformation

 DECLARE_ALIGNED(16, static const int16_t, fdct_tg_all_16)[24] = {

             X8(13036), // tg * (2<<16) + 0.5

             X8(27146), // tg * (2<<16) + 0.5

             X8(-21746) // tg * (2<<16) + 0.5

 };

 

5. 开根号  sqrt()

   比如1/2 开根号,必须写成: sqrt(1.0/2)     1必须写成1.0

 

 

 

 

 

 

你可能感兴趣的:(c语言,ffmpeg,学习)