mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-16 08:42:28 +00:00
hfp_codec: add hfp_codec_init_msbc_with_codec for use with new sbc encoder api
This commit is contained in:
parent
fe00a929a0
commit
cf8294b25c
@ -57,6 +57,7 @@
|
||||
#include "btstack_sbc.h"
|
||||
#define FRAME_SIZE_MSBC 57
|
||||
static void hfp_codec_encode_msbc(hfp_codec_t * hfp_codec, int16_t * pcm_samples);
|
||||
static void hfp_codec_encode_msbc_with_codec(hfp_codec_t * hfp_codec, int16_t * pcm_samples);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_HFP_SUPER_WIDE_BAND_SPEECH
|
||||
@ -91,25 +92,37 @@ static void hfp_codec_reset_sco_buffer(hfp_codec_t *hfp_codec) {
|
||||
hfp_codec->write_pos = 0;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_HFP_WIDE_BAND_SPEECH
|
||||
void hfp_codec_init_msbc(hfp_codec_t * hfp_codec, btstack_sbc_encoder_state_t * msbc_encoder_context){
|
||||
#if defined(ENABLE_HFP_WIDE_BAND_SPEECH) || defined(ENABLE_HFP_SUPER_WIDE_BAND_SPEECH)
|
||||
static void hfp_codec_init_helper(hfp_codec_t *hfp_codec, void (*encode)(struct hfp_codec *, int16_t *),
|
||||
uint16_t samples_per_buffer) {
|
||||
memset(hfp_codec, 0, sizeof(hfp_codec_t));
|
||||
hfp_h2_framing_init(&hfp_codec->h2_framing);
|
||||
hfp_codec_reset_sco_buffer(hfp_codec);
|
||||
hfp_codec->samples_per_frame = 120;
|
||||
hfp_codec->encode = &hfp_codec_encode_msbc;
|
||||
hfp_codec->samples_per_frame = samples_per_buffer;
|
||||
hfp_codec->encode = encode;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_HFP_WIDE_BAND_SPEECH
|
||||
// old
|
||||
void hfp_codec_init_msbc(hfp_codec_t * hfp_codec, btstack_sbc_encoder_state_t * msbc_encoder_context){
|
||||
hfp_codec_init_helper(hfp_codec, &hfp_codec_encode_msbc, 120);
|
||||
hfp_codec->msbc_encoder_context = msbc_encoder_context;
|
||||
btstack_sbc_encoder_init(hfp_codec->msbc_encoder_context, SBC_MODE_mSBC, 16, 8, SBC_ALLOCATION_METHOD_LOUDNESS, 16000, 26, SBC_CHANNEL_MODE_MONO);
|
||||
}
|
||||
// new
|
||||
void hfp_codec_init_msbc_with_codec(hfp_codec_t * hfp_codec, const btstack_sbc_encoder_t * sbc_encoder, void * sbc_encoder_context){
|
||||
hfp_codec_init_helper(hfp_codec, &hfp_codec_encode_msbc_with_codec, 120);
|
||||
// init sbc encoder
|
||||
hfp_codec->sbc_encoder_instance = sbc_encoder;
|
||||
hfp_codec->sbc_encoder_context = sbc_encoder_context;
|
||||
hfp_codec->sbc_encoder_instance->configure(hfp_codec->sbc_encoder_context, SBC_MODE_mSBC, 16, 8, SBC_ALLOCATION_METHOD_LOUDNESS, 16000, 26, SBC_CHANNEL_MODE_MONO);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_HFP_SUPER_WIDE_BAND_SPEECH
|
||||
void hfp_codec_init_lc3_swb(hfp_codec_t * hfp_codec, const btstack_lc3_encoder_t * lc3_encoder, void * lc3_encoder_context){
|
||||
memset(hfp_codec, 0, sizeof(hfp_codec_t));
|
||||
hfp_h2_framing_init(&hfp_codec->h2_framing);
|
||||
hfp_codec_reset_sco_buffer(hfp_codec);
|
||||
hfp_codec->samples_per_frame = 240;
|
||||
hfp_codec->encode = &hfp_codec_encode_lc3swb;
|
||||
hfp_codec_init_helper(hfp_codec, &hfp_codec_encode_lc3swb, 240);
|
||||
// init lc3 encoder
|
||||
hfp_codec->lc3_encoder = lc3_encoder;
|
||||
hfp_codec->lc3_encoder_context = lc3_encoder_context;
|
||||
@ -126,6 +139,7 @@ uint16_t hfp_codec_num_audio_samples_per_frame(const hfp_codec_t * hfp_codec){
|
||||
}
|
||||
|
||||
#ifdef ENABLE_HFP_WIDE_BAND_SPEECH
|
||||
// old
|
||||
static void hfp_codec_encode_msbc(hfp_codec_t * hfp_codec, int16_t * pcm_samples){
|
||||
// Encode SBC Frame
|
||||
btstack_sbc_encoder_process_data(pcm_samples);
|
||||
@ -134,6 +148,14 @@ static void hfp_codec_encode_msbc(hfp_codec_t * hfp_codec, int16_t * pcm_samples
|
||||
// Final padding to use SCO_FRAME_SIZE bytes
|
||||
hfp_codec->sco_packet[hfp_codec->write_pos++] = 0;
|
||||
}
|
||||
// new
|
||||
static void hfp_codec_encode_msbc_with_codec(hfp_codec_t * hfp_codec, int16_t * pcm_samples){
|
||||
// Encode SBC Frame
|
||||
hfp_codec->sbc_encoder_instance->encode_signed_16(hfp_codec->sbc_encoder_context, pcm_samples, &hfp_codec->sco_packet[hfp_codec->write_pos]);
|
||||
hfp_codec->write_pos += FRAME_SIZE_MSBC;
|
||||
// Final padding to use SCO_FRAME_SIZE bytes
|
||||
hfp_codec->sco_packet[hfp_codec->write_pos++] = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_HFP_SUPER_WIDE_BAND_SPEECH
|
||||
|
@ -45,10 +45,11 @@
|
||||
|
||||
#include "btstack_config.h"
|
||||
|
||||
#include "hfp.h" // HFP_CODEC_xxx
|
||||
#include "classic/hfp.h" // HFP_CODEC_xxx
|
||||
|
||||
#ifdef ENABLE_HFP_WIDE_BAND_SPEECH
|
||||
#include "btstack_sbc.h"
|
||||
#include "classic/btstack_sbc.h"
|
||||
#include "classic/btstack_sbc_bluedroid.h"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_HFP_SUPER_WIDE_BAND_SPEECH
|
||||
@ -95,7 +96,11 @@ struct hfp_codec {
|
||||
hfp_h2_framing_t h2_framing;
|
||||
void (*encode)(struct hfp_codec * hfp_codec, int16_t * pcm_samples);
|
||||
#ifdef ENABLE_HFP_WIDE_BAND_SPEECH
|
||||
// @deprecated interface
|
||||
btstack_sbc_encoder_state_t * msbc_encoder_context;
|
||||
// codec instance based interface
|
||||
const btstack_sbc_encoder_t * sbc_encoder_instance;
|
||||
void * sbc_encoder_context;
|
||||
#endif
|
||||
#ifdef ENABLE_HFP_SUPER_WIDE_BAND_SPEECH
|
||||
const btstack_lc3_encoder_t * lc3_encoder;
|
||||
@ -114,6 +119,15 @@ typedef struct hfp_codec hfp_codec_t;
|
||||
* @param msbc_encoder_context for msbc encoder
|
||||
* @return status
|
||||
*/
|
||||
void hfp_codec_init_msbc_with_codec(hfp_codec_t * hfp_codec, const btstack_sbc_encoder_t * sbc_encoder, void * sbc_encoder_context);
|
||||
|
||||
/**
|
||||
* @brief Initialize HFP Audio Codec for mSBC
|
||||
* @deprecated Please use hfp_codec_init_msbc_with_codec
|
||||
* @param hfp_codec
|
||||
* @param msbc_encoder_context for msbc encoder
|
||||
* @return status
|
||||
*/
|
||||
void hfp_codec_init_msbc(hfp_codec_t * hfp_codec, btstack_sbc_encoder_state_t * msbc_encoder_context);
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user