54 switch (
frame->subbands) {
57 x = &
s->X[ch][
s->position - 4 *
58 s->increment +
frame->blocks * 4];
60 blk +=
s->increment) {
66 x -= 4 *
s->increment;
69 return frame->blocks * 4;
73 x = &
s->X[ch][
s->position - 8 *
74 s->increment +
frame->blocks * 8];
76 blk +=
s->increment) {
82 x -= 8 *
s->increment;
85 return frame->blocks * 8;
102 uint8_t crc_header[11] = { 0 };
105 uint32_t audio_sample;
109 uint32_t levels[2][8];
110 uint32_t sb_sample_delta[2][8];
119 avpkt->
data[1] = (
frame->frequency & 0x03) << 6;
120 avpkt->
data[1] |= (((
frame->blocks >> 2) - 1) & 0x03) << 4;
121 avpkt->
data[1] |= (
frame->mode & 0x03) << 2;
122 avpkt->
data[1] |= (
frame->allocation & 0x01) << 1;
123 avpkt->
data[1] |= ((
frame->subbands == 8) & 0x01) << 0;
133 crc_header[0] = avpkt->
data[1];
134 crc_header[1] = avpkt->
data[2];
141 crc_header[crc_pos >> 3] = joint;
142 crc_pos +=
frame->subbands;
146 for (sb = 0; sb <
frame->subbands; sb++) {
148 crc_header[crc_pos >> 3] <<= 4;
149 crc_header[crc_pos >> 3] |=
frame->scale_factor[ch][sb] & 0x0F;
156 crc_header[crc_pos >> 3] <<= 8 - (crc_pos % 8);
163 for (sb = 0; sb <
frame->subbands; sb++) {
164 levels[ch][sb] = ((1 <<
bits[ch][sb]) - 1) <<
165 (32 - (
frame->scale_factor[ch][sb] +
167 sb_sample_delta[ch][sb] = (uint32_t) 1 <<
168 (
frame->scale_factor[ch][sb] +
175 for (sb = 0; sb <
frame->subbands; sb++) {
177 if (
bits[ch][sb] == 0)
180 audio_sample = ((uint64_t) levels[ch][sb] *
181 (sb_sample_delta[ch][sb] +
182 frame->sb_sample_f[
blk][ch][sb])) >> 32;
246 / (1000000 *
frame->subbands)) - 10, 4, 16) & ~3;
268 memset(&sbc->
dsp.X, 0,
sizeof(sbc->
dsp.X));
270 sbc->
dsp.increment = sbc->
msbc ? 1 : 4;
277 const AVFrame *av_frame,
int *got_packet_ptr)
286 + ((
frame->blocks *
frame->bitpool * (1 + dual)
297 if (
frame->subbands == 8)
298 sbc->
dsp.position = sbc->
dsp.sbc_enc_process_input_8s(
299 sbc->
dsp.position, av_frame->
data[0], sbc->
dsp.X,
302 sbc->
dsp.position = sbc->
dsp.sbc_enc_process_input_4s(
303 sbc->
dsp.position, av_frame->
data[0], sbc->
dsp.X,
309 j = sbc->
dsp.sbc_calc_scalefactors_j(
frame->sb_sample_f,
314 sbc->
dsp.sbc_calc_scalefactors(
frame->sb_sample_f,
326 #define OFFSET(x) offsetof(SBCEncContext, x)
327 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
329 {
"sbc_delay",
"set maximum algorithmic latency",
331 {
"msbc",
"use mSBC mode (wideband speech mono SBC)",
358 .supported_samplerates = (
const int[]) { 16000, 32000, 44100, 48000, 0 },
Libavcodec external API header.
#define FF_PROFILE_SBC_MSBC
static av_cold int init(AVCodecContext *avctx)
static const uint16_t channel_layouts[7]
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
#define AV_CH_LAYOUT_MONO
#define AV_CH_LAYOUT_STEREO
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
AVSampleFormat
Audio sample formats.
@ AV_SAMPLE_FMT_S16
signed 16 bits
#define LIBAVUTIL_VERSION_INT
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
const AVProfile ff_sbc_profiles[]
#define FF_AVCTX_PROFILE_OPTION(name, description, type, value)
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static int put_bits_count(PutBitContext *s)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
uint8_t ff_sbc_crc8(const AVCRC *ctx, const uint8_t *data, size_t len)
void ff_sbc_calculate_bits(const struct sbc_frame *frame, int(*bits)[8])
SBC common definitions for the encoder and decoder.
#define SBC_MODE_JOINT_STEREO
#define SBC_MODE_DUAL_CHANNEL
av_cold void ff_sbcdsp_init(SBCDSPContext *s)
SBC basic "building bricks".
#define SBC_X_BUFFER_SIZE
static size_t sbc_pack_frame(AVPacket *avpkt, struct sbc_frame *frame, int joint, int msbc)
static int sbc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *av_frame, int *got_packet_ptr)
static const AVOption options[]
static int sbc_encode_init(AVCodecContext *avctx)
static const AVClass sbc_class
static int sbc_analyze_audio(SBCDSPContext *s, struct sbc_frame *frame)
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
main external API structure.
int global_quality
Global quality for codecs which cannot change it per frame.
int64_t bit_rate
the average bitrate
const struct AVCodec * codec
int sample_rate
samples per second
int channels
number of audio channels
int frame_size
Number of samples per channel in an audio frame.
const char * name
Name of the codec implementation.
const int * supported_samplerates
array of supported audio samplerates, or NULL if unknown, array is terminated by 0
This structure describes decoded (raw) audio or video data.
int nb_samples
number of audio samples (per channel) described by this frame
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int channels
number of audio channels, only used for audio.
This structure stores compressed data.