FFmpeg
sbc.h
Go to the documentation of this file.
1 /*
2  * Bluetooth low-complexity, subband codec (SBC)
3  *
4  * Copyright (C) 2017 Aurelien Jacobs <aurel@gnuage.org>
5  * Copyright (C) 2012-2014 Intel Corporation
6  * Copyright (C) 2008-2010 Nokia Corporation
7  * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
8  * Copyright (C) 2004-2005 Henryk Ploetz <henryk@ploetzli.ch>
9  * Copyright (C) 2005-2006 Brad Midgley <bmidgley@xmission.com>
10  *
11  * This file is part of FFmpeg.
12  *
13  * FFmpeg is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU Lesser General Public
15  * License as published by the Free Software Foundation; either
16  * version 2.1 of the License, or (at your option) any later version.
17  *
18  * FFmpeg is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21  * Lesser General Public License for more details.
22  *
23  * You should have received a copy of the GNU Lesser General Public
24  * License along with FFmpeg; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26  */
27 
28 /**
29  * @file
30  * SBC common definitions for the encoder and decoder
31  */
32 
33 #ifndef AVCODEC_SBC_H
34 #define AVCODEC_SBC_H
35 
36 #include "avcodec.h"
37 #include "libavutil/crc.h"
38 
39 #define MSBC_BLOCKS 15
40 
41 /* sampling frequency */
42 #define SBC_FREQ_16000 0x00
43 #define SBC_FREQ_32000 0x01
44 #define SBC_FREQ_44100 0x02
45 #define SBC_FREQ_48000 0x03
46 
47 /* blocks */
48 #define SBC_BLK_4 0x00
49 #define SBC_BLK_8 0x01
50 #define SBC_BLK_12 0x02
51 #define SBC_BLK_16 0x03
52 
53 /* channel mode */
54 #define SBC_MODE_MONO 0x00
55 #define SBC_MODE_DUAL_CHANNEL 0x01
56 #define SBC_MODE_STEREO 0x02
57 #define SBC_MODE_JOINT_STEREO 0x03
58 
59 /* allocation method */
60 #define SBC_AM_LOUDNESS 0x00
61 #define SBC_AM_SNR 0x01
62 
63 /* subbands */
64 #define SBC_SB_4 0x00
65 #define SBC_SB_8 0x01
66 
67 /* synchronisation words */
68 #define SBC_SYNCWORD 0x9C
69 #define MSBC_SYNCWORD 0xAD
70 
71 /* extra bits of precision for the synthesis filter input data */
72 #define SBCDEC_FIXED_EXTRA_BITS 2
73 
74 /*
75  * Enforce 16 byte alignment for the data, which is supposed to be used
76  * with SIMD optimized code.
77  */
78 #define SBC_ALIGN 16
79 
80 /* This structure contains an unpacked SBC frame.
81  Yes, there is probably quite some unused space herein */
82 struct sbc_frame {
85  enum {
90  } mode;
92  enum {
95  } allocation;
98  uint16_t codesize;
99 
100  /* bit number x set means joint stereo has been used in subband x */
102 
103  /* only the lower 4 bits of every element are to be used */
105 
106  /* raw integer subband samples in the frame */
108 
109  /* modified subband samples */
111 
112  const AVCRC *crc_ctx;
113 };
114 
115 uint8_t ff_sbc_crc8(const AVCRC *crc_ctx, const uint8_t *data, size_t len);
116 void ff_sbc_calculate_bits(const struct sbc_frame *frame, int (*bits)[8]);
117 
118 #endif /* AVCODEC_SBC_H */
AVCRC
uint32_t AVCRC
Definition: crc.h:47
sbc_frame::STEREO
@ STEREO
Definition: sbc.h:88
data
const char data[16]
Definition: mxf.c:91
sbc_frame::subbands
uint8_t subbands
Definition: sbc.h:96
crc.h
sbc_frame::JOINT_STEREO
@ JOINT_STEREO
Definition: sbc.h:89
sbc_frame::scale_factor
uint32_t scale_factor[2][8]
Definition: sbc.h:104
sbc_frame::bitpool
uint8_t bitpool
Definition: sbc.h:97
bits
uint8_t bits
Definition: vp3data.h:202
int32_t
int32_t
Definition: audio_convert.c:194
sbc_frame::DUAL_CHANNEL
@ DUAL_CHANNEL
Definition: sbc.h:87
SBC_AM_SNR
#define SBC_AM_SNR
Definition: sbc.h:61
SBC_MODE_STEREO
#define SBC_MODE_STEREO
Definition: sbc.h:56
SBC_AM_LOUDNESS
#define SBC_AM_LOUDNESS
Definition: sbc.h:60
sbc_frame::SNR
@ SNR
Definition: sbc.h:94
SBC_ALIGN
#define SBC_ALIGN
Definition: sbc.h:78
sbc_frame::MONO
@ MONO
Definition: sbc.h:86
sbc_frame::channels
uint8_t channels
Definition: sbc.h:91
SBC_MODE_MONO
#define SBC_MODE_MONO
Definition: sbc.h:54
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:112
sbc_frame
Definition: sbc.h:82
sbc_frame::joint
uint8_t joint
Definition: sbc.h:101
ff_sbc_calculate_bits
void ff_sbc_calculate_bits(const struct sbc_frame *frame, int(*bits)[8])
Definition: sbc.c:79
uint8_t
uint8_t
Definition: audio_convert.c:194
len
int len
Definition: vorbis_enc_data.h:452
sbc_frame::mode
enum sbc_frame::@130 mode
avcodec.h
sbc_frame::crc_ctx
const AVCRC * crc_ctx
Definition: sbc.h:112
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
sbc_frame::frequency
uint8_t frequency
Definition: sbc.h:83
ff_sbc_crc8
uint8_t ff_sbc_crc8(const AVCRC *crc_ctx, const uint8_t *data, size_t len)
Definition: sbc.c:55
sbc_frame::blocks
uint8_t blocks
Definition: sbc.h:84
sbc_frame::allocation
enum sbc_frame::@131 allocation
SBC_MODE_DUAL_CHANNEL
#define SBC_MODE_DUAL_CHANNEL
Definition: sbc.h:55
sbc_frame::LOUDNESS
@ LOUDNESS
Definition: sbc.h:93
sbc_frame::sb_sample
int32_t sb_sample[16][2][8]
Definition: sbc.h:110
SBC_MODE_JOINT_STEREO
#define SBC_MODE_JOINT_STEREO
Definition: sbc.h:57
sbc_frame::sb_sample_f
int32_t sb_sample_f[16][2][8]
Definition: sbc.h:107
sbc_frame::codesize
uint16_t codesize
Definition: sbc.h:98