mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-06 03:27:01 +03:00
some sound ...
This commit is contained in:
84
output_bt.c
84
output_bt.c
@@ -45,8 +45,13 @@ static int bytes_per_frame;
|
||||
static int _bt_write_frames(frames_t out_frames, bool silence, s32_t gainL, s32_t gainR,
|
||||
s32_t cross_gain_in, s32_t cross_gain_out, s32_t **cross_ptr);
|
||||
|
||||
void set_volume(unsigned left, unsigned right) {}
|
||||
|
||||
void set_volume(unsigned left, unsigned right) {
|
||||
LOG_DEBUG("setting internal gain left: %u right: %u", left, right);
|
||||
LOCK;
|
||||
output.gainL = left;
|
||||
output.gainR = right;
|
||||
UNLOCK;
|
||||
}
|
||||
|
||||
/* event for handler "bt_av_hdl_stack_up */
|
||||
enum {
|
||||
@@ -198,7 +203,6 @@ void output_init_dac(log_level level, unsigned output_buf_size, char *params, un
|
||||
* Bluetooth audio source init Start
|
||||
*/
|
||||
|
||||
|
||||
output_init_common(level, "-", output_buf_size, rates, idle);
|
||||
|
||||
//#if LINUX || OSX || FREEBSD || POSIX
|
||||
@@ -224,11 +228,9 @@ void output_close_dac(void) {
|
||||
|
||||
free(buf);
|
||||
|
||||
|
||||
|
||||
output_close_common();
|
||||
}
|
||||
static u8_t *optr;
|
||||
|
||||
static int _bt_write_frames(frames_t out_frames, bool silence, s32_t gainL, s32_t gainR,
|
||||
s32_t cross_gain_in, s32_t cross_gain_out, s32_t **cross_ptr) {
|
||||
|
||||
@@ -492,17 +494,26 @@ static void bt_app_a2d_cb(esp_a2d_cb_event_t event, esp_a2d_cb_param_t *param)
|
||||
|
||||
static int32_t bt_app_a2d_data_cb(uint8_t *data, int32_t len)
|
||||
{
|
||||
|
||||
int32_t ret = 0;
|
||||
frames_t frames=0;
|
||||
frames_t frames_wanted = 0;
|
||||
|
||||
frames_t frames;
|
||||
int i;
|
||||
s16_t *optr = (s16_t*) data;
|
||||
s32_t *iptr = (s32_t*) buf;
|
||||
|
||||
if (len < 0 || data == NULL) {
|
||||
return 0;
|
||||
}
|
||||
optr = (u8_t *)data;
|
||||
|
||||
|
||||
LOCK;
|
||||
|
||||
/* TODO
|
||||
Normally, we would want BT to not call us back unless we have not in BUFFERING state.
|
||||
That requires BT to not start until we are > OUTPUT_BUFFER
|
||||
// come back later, we are buffering (or stopped, need to handle that case ...) but we don't want silence
|
||||
if (output.state <= OUTPUT_BUFFER) {
|
||||
UNLOCK;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
switch (output.format) {
|
||||
case S32_LE:
|
||||
@@ -516,36 +527,23 @@ static int32_t bt_app_a2d_data_cb(uint8_t *data, int32_t len)
|
||||
break;
|
||||
}
|
||||
|
||||
UNLOCK;
|
||||
|
||||
frames_wanted = len / bytes_per_frame;
|
||||
ret = len;
|
||||
|
||||
LOCK;
|
||||
|
||||
|
||||
output.device_frames = 0;
|
||||
output.updated = gettime_ms();
|
||||
output.frames_played_dmp = output.frames_played;
|
||||
|
||||
do {
|
||||
frames = _output_frames(frames_wanted);
|
||||
frames_wanted -= frames;
|
||||
} while (frames_wanted > 0 && frames != 0);
|
||||
|
||||
if (frames_wanted > 0) {
|
||||
LOG_DEBUG("pad with silence");
|
||||
memset(optr, 0, frames_wanted * bytes_per_frame);
|
||||
}
|
||||
|
||||
if (output.state == OUTPUT_OFF) {
|
||||
LOG_INFO("output off");
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
UNLOCK;
|
||||
|
||||
return ret;
|
||||
// TODO update with proper bytes_per_frame handling
|
||||
frames = len / 4;
|
||||
output.device_frames = 0;
|
||||
output.updated = gettime_ms();
|
||||
output.frames_played_dmp = output.frames_played;
|
||||
frames = _output_frames(frames);
|
||||
|
||||
UNLOCK;
|
||||
|
||||
for (i = 0; i < frames*2; i++) {
|
||||
*optr++ = *iptr++ >> 16;
|
||||
*optr++ = *iptr++ >> 16;
|
||||
}
|
||||
|
||||
buffill = 0;
|
||||
|
||||
return frames * 4;
|
||||
}
|
||||
|
||||
static void a2d_app_heart_beat(void *arg)
|
||||
|
||||
Reference in New Issue
Block a user