a2dp: move codecs to separate files

This commit is contained in:
Wim Taymans 2020-10-19 12:12:21 +02:00
parent 5c5b9f61bb
commit e18c4d76dc
8 changed files with 649 additions and 479 deletions

View file

@ -26,6 +26,9 @@
#define BLUEALSA_A2DPCODECS_H_
#include <stdint.h>
#include <stddef.h>
#include <spa/param/audio/format.h>
#define A2DP_CODEC_SBC 0x00
#define A2DP_CODEC_MPEG12 0x01
@ -33,6 +36,8 @@
#define A2DP_CODEC_ATRAC 0x03
#define A2DP_CODEC_VENDOR 0xFF
#define A2DP_MAX_CAPS_SIZE 254
/* customized 16-bit vendor extension */
#define A2DP_CODEC_VENDOR_APTX 0x4FFF
#define A2DP_CODEC_VENDOR_LDAC 0x2DFF
@ -58,8 +63,8 @@
#define SBC_ALLOCATION_LOUDNESS (1 << 0)
#define SBC_ALLOCATION_SNR (1 << 1)
#define MIN_BITPOOL 2
#define MAX_BITPOOL 64
#define SBC_MIN_BITPOOL 2
#define SBC_MAX_BITPOOL 64
#define MPEG_CHANNEL_MODE_JOINT_STEREO (1 << 0)
#define MPEG_CHANNEL_MODE_STEREO (1 << 1)
@ -155,8 +160,6 @@
#define LDAC_VENDOR_ID 0x0000012d
#define LDAC_CODEC_ID 0x00aa
#define A2DP_MAX_CONFIG_SIZE 254
typedef struct {
uint32_t vendor_id;
uint16_t codec_id;
@ -286,13 +289,48 @@ static inline int a2dp_sbc_get_frequency(a2dp_sbc_t *config)
}
}
extern const a2dp_sbc_t bluez_a2dp_sbc;
struct a2dp_codec {
uint32_t flags;
uint8_t codec_id;
uint32_t vendor_id;
uint16_t vendor_codec_id;
const char *name;
const char *description;
int (*fill_caps) (uint32_t flags, uint8_t caps[A2DP_MAX_CAPS_SIZE]);
int (*select_config) (uint32_t flags, const void *caps, size_t caps_size,
const struct spa_audio_info *info, uint8_t config[A2DP_MAX_CAPS_SIZE]);
void *(*init) (uint32_t flags, void *config, size_t config_size, struct spa_audio_info *info);
void (*deinit) (void *data);
int (*get_block_size) (void *data);
int (*get_num_blocks) (void *data, size_t mtu);
int (*start_encode) (void *data,
void *dst, size_t dst_size, uint16_t seqnum, uint32_t timestamp);
int (*encode) (void *data,
const void *src, size_t src_size,
void *dst, size_t dst_size,
size_t *dst_out);
int (*decode) (void *data,
const void *src, size_t src_size,
void *dst, size_t dst_size,
size_t *dst_out);
int (*reduce_bitpool) (void *data);
int (*increase_bitpool) (void *data);
};
extern struct a2dp_codec a2dp_codec_sbc;
extern struct a2dp_codec a2dp_codec_aac;
#if ENABLE_MP3
extern const a2dp_mpeg_t bluez_a2dp_mpeg;
#endif
#if ENABLE_AAC
extern const a2dp_aac_t bluez_a2dp_aac;
#endif
#if ENABLE_APTX
extern const a2dp_aptx_t bluez_a2dp_aptx;
#endif