#ifndef _BACKEND_BT_H_
#define _BACKEND_BT_H_
#ifdef HAVE_LIBAV
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/opt.h>
#endif
#include "sbc_encode.h"
struct bt_config {
uint8_t sep;
uint8_t media_Type;
uint8_t chmode;
#define MODE_STEREO 2
#define MODE_JOINT 3
#define MODE_DUAL 1
#define MODE_MONO 0
uint8_t allocm;
#define ALLOC_LOUDNESS 0
#define ALLOC_SNR 1
uint8_t bitpool;
uint8_t bands;
#define BANDS_4 0
#define BANDS_8 1
uint8_t blocks;
#define BLOCKS_4 0
#define BLOCKS_8 1
#define BLOCKS_12 2
#define BLOCKS_16 3
uint8_t freq;
#define FREQ_UNDEFINED 255
#define FREQ_16K 0
#define FREQ_32K 1
#define FREQ_44_1K 2
#define FREQ_48K 3
uint16_t mtu;
uint8_t codec;
#define CODEC_SBC 0x00
#define CODEC_AAC 0x02
uint8_t aacMode1;
uint8_t aacMode2;
union {
#ifdef HAVE_LIBAV
struct {
AVCodec *codec;
AVCodecContext *context;
AVFormatContext *format;
AVFrame *frame;
AVStream *stream;
} av;
#endif
struct sbc_encode *sbc_enc;
} handle;
uint32_t rem_in_len;
uint32_t rem_in_size;
uint8_t *rem_in_data;
uint32_t mtu_seqnumber;
uint32_t mtu_timestamp;
uint32_t mtu_offset;
int fd;
int hc;
uint8_t mtu_data[65536];
int8_t acceptor_state;
#define acpInitial 1
#define acpConfigurationSet 2
#define acpStreamOpened 3
#define acpStreamStarted 4
#define acpStreamSuspended 5
#define acpStreamClosed 6
};
size_t sbc_encode_frame(struct bt_config *);
size_t sbc_decode_frame(struct bt_config *, int);
int bt_receive(struct bt_config *cfg, void *ptr, int len, int use_delay);
#endif