add OggFlac & remove BLE - release

This commit is contained in:
Philippe G
2020-05-21 14:05:24 -07:00
parent f815b8e2c6
commit 2597db9e15
16 changed files with 49 additions and 65 deletions

View File

@@ -36,6 +36,7 @@
struct flac {
FLAC__StreamDecoder *decoder;
u8_t container;
#if !LINKALL
// FLAC symbols to be dynamically loaded
const char **FLAC__StreamDecoderErrorStatusString;
@@ -55,6 +56,18 @@ struct flac {
FLAC__StreamDecoderErrorCallback error_callback,
void *client_data
);
FLAC__StreamDecoderInitStatus (* FLAC__stream_decoder_init_ogg_stream)(
FLAC__StreamDecoder *decoder,
FLAC__StreamDecoderReadCallback read_callback,
FLAC__StreamDecoderSeekCallback seek_callback,
FLAC__StreamDecoderTellCallback tell_callback,
FLAC__StreamDecoderLengthCallback length_callback,
FLAC__StreamDecoderEofCallback eof_callback,
FLAC__StreamDecoderWriteCallback write_callback,
FLAC__StreamDecoderMetadataCallback metadata_callback,
FLAC__StreamDecoderErrorCallback error_callback,
void *client_data
);
FLAC__bool (* FLAC__stream_decoder_process_single)(FLAC__StreamDecoder *decoder);
FLAC__StreamDecoderState (* FLAC__stream_decoder_get_state)(const FLAC__StreamDecoder *decoder);
#endif
@@ -220,18 +233,30 @@ static void error_cb(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErro
LOG_INFO("flac error: %s", FLAC_A(f, StreamDecoderErrorStatusString)[status]);
}
static void flac_close(void) {
FLAC(f, stream_decoder_delete, f->decoder);
f->decoder = NULL;
}
static void flac_open(u8_t sample_size, u8_t sample_rate, u8_t channels, u8_t endianness) {
if ( f->decoder && f->container != sample_size ) {
flac_close();
}
f->container = sample_size;
if (f->decoder) {
FLAC(f, stream_decoder_reset, f->decoder);
} else {
f->decoder = FLAC(f, stream_decoder_new);
}
FLAC(f, stream_decoder_init_stream, f->decoder, &read_cb, NULL, NULL, NULL, NULL, &write_cb, NULL, &error_cb, NULL);
}
static void flac_close(void) {
FLAC(f, stream_decoder_delete, f->decoder);
f->decoder = NULL;
if ( f->container == 'o' ) {
LOG_DEBUG("ogg/flac container - using init_ogg_stream");
FLAC(f, stream_decoder_init_ogg_stream, f->decoder, &read_cb, NULL, NULL, NULL, NULL, &write_cb, NULL, &error_cb, NULL);
} else {
FLAC(f, stream_decoder_init_stream, f->decoder, &read_cb, NULL, NULL, NULL, NULL, &write_cb, NULL, &error_cb, NULL);
}
}
static decode_state flac_decode(void) {
@@ -267,6 +292,7 @@ static bool load_flac() {
f->FLAC__stream_decoder_reset = dlsym(handle, "FLAC__stream_decoder_reset");
f->FLAC__stream_decoder_delete = dlsym(handle, "FLAC__stream_decoder_delete");
f->FLAC__stream_decoder_init_stream = dlsym(handle, "FLAC__stream_decoder_init_stream");
f->FLAC__stream_decoder_init_ogg_stream = dlsym(handle, "FLAC__stream_decoder_init_ogg_stream");
f->FLAC__stream_decoder_process_single = dlsym(handle, "FLAC__stream_decoder_process_single");
f->FLAC__stream_decoder_get_state = dlsym(handle, "FLAC__stream_decoder_get_state");
@@ -284,7 +310,7 @@ static bool load_flac() {
struct codec *register_flac(void) {
static struct codec ret = {
'f', // id
"flc", // types
"ogf,flc", // types
16384, // min read
204800, // min space
flac_open, // open
@@ -303,6 +329,6 @@ struct codec *register_flac(void) {
return NULL;
}
LOG_INFO("using flac to decode flc");
LOG_INFO("using flac to decode ogf,flc");
return &ret;
}