sbc_struct结构详解
sbc_struct结构的定义:
// sbc.h
struct sbc_struct {
unsigned long flags;
uint8_t frequency;
uint8_t blocks;
uint8_t subbands;
uint8_t mode;
uint8_t allocation;
uint8_t bitpool;
uint8_t endian;
void *priv;
void *priv_alloc_base;
};
typedef struct sbc_struct sbc_t;
-
flags
unsigned long
类型。在调用sbc_init(&sbc, 0L);
和sbc_init_msbc(&sbc, 0);
的时候作为第二个参数传入,并在函数中,继续传递给sbc_set_defaults
函数,在sbc_set_defaults
中赋值给sbc->flags
。待补充:作用
/* sbcenc.c */ // !msbc sbc_init(&sbc, 0L); // msbc sbc_init_msbc(&sbc, 0); /* sbc.c */ // sbc_init()与sbc_init_msbc()均调用此方法 sbc_set_defaults(sbc, flags); // sbc_set_defaults() static void sbc_set_defaults(sbc_t *sbc, unsigned long flags) { ··· sbc->flags = flags; ··· }
-
frequency
uint8_t
类型,用来表示采样率,取值有16k,32k,44.1k,48k。/* sbc.h */ /* sampling frequency */ #define SBC_FREQ_16000 0x00 #define SBC_FREQ_32000 0x01 #define SBC_FREQ_44100 0x02 #define SBC_FREQ_48000 0x03
在
sbc_init()
中默认值为44.1k,在sbc_init_msbc()
中默认值为16k。/* sbc.c */ // sbc static void sbc_set_defaults(sbc_t *sbc, unsigned long flags) { ··· sbc->frequency = SBC_FREQ_44100; ··· } // msbc ··· sbc_set_defaults(sbc, flags); // 先调用了sbc_set_defaults sbc->frequency = SBC_FREQ_16000;// 随后修改默认值为16k ···
在
encode()
中,sbc编码可以根据文件采样率对frequency
赋值,msbc只能使用16k。/* sbcenc.c */ // msbc必须为16k static void encode(char *filename, int subbands, int bitpool, int joint, int dualchannel, int snr, int blocks