mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-01 10:13:29 +00:00
btstack_sbc_decoder_bluedroid: allow to resync in all cases
This commit is contained in:
parent
57f61fbe2c
commit
cca2ddcca3
@ -353,6 +353,35 @@ static void btstack_sbc_decoder_process_msbc_data(btstack_sbc_decoder_state_t *
|
||||
}
|
||||
}
|
||||
|
||||
int h2_syncword = 0;
|
||||
int h2_sync_pos = find_h2_sync(frame_data, decoder_state->bytes_in_frame_buffer, &h2_syncword);
|
||||
// printf("Sync Pos: %d, nr %d\n", h2_sync_pos, h2_syncword);
|
||||
if (h2_sync_pos < 0){
|
||||
// no sync found, discard all but last 2 bytes
|
||||
bytes_processed = decoder_state->bytes_in_frame_buffer - 2;
|
||||
memmove(decoder_state->frame_buffer, decoder_state->frame_buffer + bytes_processed, decoder_state->bytes_in_frame_buffer);
|
||||
decoder_state->bytes_in_frame_buffer -= bytes_processed; // == 2
|
||||
// don't try PLC without at least a single good frame
|
||||
if (decoder_state->first_good_frame_found){
|
||||
decoder_state->msbc_bad_bytes += bytes_processed;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
decoder_state->h2_sequence_nr = h2_syncword;
|
||||
|
||||
// drop data before it
|
||||
bytes_processed = h2_sync_pos - 2;
|
||||
if (bytes_processed > 2){
|
||||
memmove(decoder_state->frame_buffer, decoder_state->frame_buffer + bytes_processed, decoder_state->bytes_in_frame_buffer);
|
||||
decoder_state->bytes_in_frame_buffer -= bytes_processed;
|
||||
// don't try PLC without at least a single good frame
|
||||
if (decoder_state->first_good_frame_found){
|
||||
decoder_state->msbc_bad_bytes += bytes_processed;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
int bad_frame = 0;
|
||||
int zero_seq_found = find_sequence_of_zeros(frame_data, decoder_state->bytes_in_frame_buffer, 20);
|
||||
|
||||
@ -362,14 +391,12 @@ static void btstack_sbc_decoder_process_msbc_data(btstack_sbc_decoder_state_t *
|
||||
}
|
||||
|
||||
if (bad_frame){
|
||||
|
||||
// stats
|
||||
if (zero_seq_found){
|
||||
state->zero_frames_nr++;
|
||||
} else {
|
||||
state->bad_frames_nr++;
|
||||
}
|
||||
|
||||
#ifdef LOG_FRAME_STATUS
|
||||
if (zero_seq_found){
|
||||
printf("%d : ZERO FRAME\n", decoder_state->h2_sequence_nr);
|
||||
@ -377,29 +404,8 @@ static void btstack_sbc_decoder_process_msbc_data(btstack_sbc_decoder_state_t *
|
||||
printf("%d : BAD FRAME\n", decoder_state->h2_sequence_nr);
|
||||
}
|
||||
#endif
|
||||
|
||||
decoder_state->bytes_in_frame_buffer = 0;
|
||||
decoder_state->msbc_bad_bytes += msbc_frame_size;
|
||||
continue;
|
||||
}
|
||||
|
||||
int h2_syncword = 0;
|
||||
int h2_sync_pos = find_h2_sync(frame_data, decoder_state->bytes_in_frame_buffer, &h2_syncword);
|
||||
// printf("Sync Pos: %d, nr %d\n", h2_sync_pos, h2_syncword);
|
||||
if (h2_sync_pos < 0){
|
||||
// no sync found, discard all but last 2 bytes
|
||||
bytes_processed = decoder_state->bytes_in_frame_buffer - 2;
|
||||
memmove(decoder_state->frame_buffer, decoder_state->frame_buffer + bytes_processed, decoder_state->bytes_in_frame_buffer);
|
||||
decoder_state->bytes_in_frame_buffer -= bytes_processed; // == 2
|
||||
decoder_state->msbc_bad_bytes += bytes_processed;
|
||||
continue;
|
||||
}
|
||||
|
||||
decoder_state->h2_sequence_nr = h2_syncword;
|
||||
|
||||
// drop data before it
|
||||
bytes_processed = h2_sync_pos - 2;
|
||||
if (bytes_processed > 2){
|
||||
// retry after dropoing 3 byte sync
|
||||
bytes_processed = 3;
|
||||
memmove(decoder_state->frame_buffer, decoder_state->frame_buffer + bytes_processed, decoder_state->bytes_in_frame_buffer);
|
||||
decoder_state->bytes_in_frame_buffer -= bytes_processed;
|
||||
decoder_state->msbc_bad_bytes += bytes_processed;
|
||||
|
Loading…
x
Reference in New Issue
Block a user