mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-29 07:04:19 +08:00
82d00972c9
Most SIMD instruction sets benefit from data being naturally aligned. And even if it is not strictly required, performance is usually better with the aligned data. ARM NEON and SSE2 have different instruction variants for aligned/unaligned memory accesses.
99 lines
2.5 KiB
C
99 lines
2.5 KiB
C
/*
|
|
*
|
|
* Bluetooth low-complexity, subband codec (SBC) library
|
|
*
|
|
* Copyright (C) 2004-2009 Marcel Holtmann <marcel@holtmann.org>
|
|
* Copyright (C) 2004-2005 Henryk Ploetz <henryk@ploetzli.ch>
|
|
* Copyright (C) 2005-2006 Brad Midgley <bmidgley@xmission.com>
|
|
*
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
*/
|
|
|
|
#ifndef __SBC_H
|
|
#define __SBC_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdint.h>
|
|
|
|
/* sampling frequency */
|
|
#define SBC_FREQ_16000 0x00
|
|
#define SBC_FREQ_32000 0x01
|
|
#define SBC_FREQ_44100 0x02
|
|
#define SBC_FREQ_48000 0x03
|
|
|
|
/* blocks */
|
|
#define SBC_BLK_4 0x00
|
|
#define SBC_BLK_8 0x01
|
|
#define SBC_BLK_12 0x02
|
|
#define SBC_BLK_16 0x03
|
|
|
|
/* channel mode */
|
|
#define SBC_MODE_MONO 0x00
|
|
#define SBC_MODE_DUAL_CHANNEL 0x01
|
|
#define SBC_MODE_STEREO 0x02
|
|
#define SBC_MODE_JOINT_STEREO 0x03
|
|
|
|
/* allocation method */
|
|
#define SBC_AM_LOUDNESS 0x00
|
|
#define SBC_AM_SNR 0x01
|
|
|
|
/* subbands */
|
|
#define SBC_SB_4 0x00
|
|
#define SBC_SB_8 0x01
|
|
|
|
/* Data endianess */
|
|
#define SBC_LE 0x00
|
|
#define SBC_BE 0x01
|
|
|
|
struct sbc_struct {
|
|
unsigned long flags;
|
|
|
|
uint8_t frequency;
|
|
uint8_t blocks;
|
|
uint8_t subbands;
|
|
uint8_t mode;
|
|
uint8_t allocation;
|
|
uint8_t bitpool;
|
|
uint8_t endian;
|
|
|
|
void *priv;
|
|
void *priv_alloc_base;
|
|
};
|
|
|
|
typedef struct sbc_struct sbc_t;
|
|
|
|
int sbc_init(sbc_t *sbc, unsigned long flags);
|
|
int sbc_reinit(sbc_t *sbc, unsigned long flags);
|
|
int sbc_parse(sbc_t *sbc, void *input, int input_len);
|
|
int sbc_decode(sbc_t *sbc, void *input, int input_len, void *output,
|
|
int output_len, int *len);
|
|
int sbc_encode(sbc_t *sbc, void *input, int input_len, void *output,
|
|
int output_len, int *written);
|
|
int sbc_get_frame_length(sbc_t *sbc);
|
|
int sbc_get_frame_duration(sbc_t *sbc);
|
|
uint16_t sbc_get_codesize(sbc_t *sbc);
|
|
void sbc_finish(sbc_t *sbc);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __SBC_H */
|