Skip to content

File syn_sbc.h

File List > audio > syn_sbc.h

Go to the documentation of this file

#ifndef SYN_SBC_H
#define SYN_SBC_H

#include "../common/syn_defs.h"

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

#define SYN_SBC_SYNCWORD 0x9CU

typedef enum {
    SYN_SBC_MODE_MONO = 0,
    SYN_SBC_MODE_DUAL_CHANNEL = 1,
    SYN_SBC_MODE_STEREO = 2,
    SYN_SBC_MODE_JOINT_STEREO = 3
} SYN_SBC_ChannelMode;

typedef enum { SYN_SBC_ALLOC_LOUDNESS = 0, SYN_SBC_ALLOC_SNR = 1 } SYN_SBC_AllocMethod;

typedef struct {
    uint8_t sample_rate_enum;  
    uint16_t sample_rate_hz;   
    SYN_SBC_ChannelMode mode;  
    uint8_t channels;          
    uint8_t blocks;            
    uint8_t subbands;          
    SYN_SBC_AllocMethod alloc; 
    uint8_t bitpool;           
    uint8_t join;              
    uint16_t frame_len;        
} SYN_SBC_FrameInfo;

typedef struct {
    SYN_SBC_FrameInfo info;         
    int32_t V[2][160];              
    int32_t scale_factors[2][8];    
    int32_t audio_sample[16][2][8]; 
} SYN_SBC_Decoder;

void syn_sbc_decoder_init(SYN_SBC_Decoder *dec);

SYN_Status syn_sbc_parse_header(const uint8_t *data, size_t len, SYN_SBC_FrameInfo *info);

SYN_Status syn_sbc_decode_frame(SYN_SBC_Decoder *dec, const uint8_t *in, size_t in_len,
                                int16_t *pcm_out, size_t pcm_cap, size_t *out_samples);

#ifdef __cplusplus
}
#endif

#endif /* SYN_SBC_H */