39 #define FILTER_RAW 642 50 #define RALF_MAX_PKT_SIZE 8192 67 int block_size[1 << 12];
68 int block_pts[1 << 12];
74 #define MAX_ELEMS 644 // no RALF table uses more than that 80 int counts[17], prefixes[18];
85 for (i = 0; i <= 16; i++)
87 for (i = 0; i < elems; i++) {
88 cur_len = (nb ? *data & 0xF : *data >> 4) + 1;
90 max_bits =
FFMAX(max_bits, cur_len);
96 for (i = 1; i <= 16; i++)
97 prefixes[i + 1] = (prefixes[i] + counts[i]) << 1;
99 for (i = 0; i < elems; i++)
100 codes[i] = prefixes[lens[i]]++;
103 lens, 1, 1, codes, 2, 2,
NULL, 0, 0, 0);
111 for (i = 0; i < 3; i++) {
115 for (j = 0; j < 10; j++)
116 for (k = 0; k < 11; k++)
118 for (j = 0; j < 15; j++)
120 for (j = 0; j < 125; j++)
163 for (i = 0; i < 3; i++) {
181 for (j = 0; j < 10; j++) {
182 for (k = 0; k < 11; k++) {
192 for (j = 0; j < 15; j++) {
200 for (j = 0; j < 125; j++) {
217 }
else if (val == range * 2) {
223 val = ((unsigned)val << bits) |
get_bits(gb, bits);
243 for (i = 0; i <
length; i++)
253 memset(dst, 0,
sizeof(*dst) * length);
258 int cmode = 0,
coeff = 0;
271 cmode =
coeff >> add_bits;
276 }
else if (cmode > 0) {
284 code_params =
get_vlc2(gb,
set->coding_mode.table,
set->coding_mode.bits, 2);
285 if (code_params >= 15) {
286 add_bits = av_clip((code_params / 5 - 3) / 2, 0, 10);
287 if (add_bits > 9 && (code_params % 5) != 2)
291 code_vlc =
set->long_codes + (code_params - 15);
296 code_vlc =
set->short_codes + code_params;
299 for (i = 0; i <
length; i += 2) {
305 dst[
i] =
extend_code(gb, code1, range, 0) * (1
U << add_bits);
306 dst[i + 1] =
extend_code(gb, code2, range, 0) * (1
U << add_bits);
309 dst[i + 1] |=
get_bits(gb, add_bits);
321 int max_clip = (1 <<
bits) - 1, min_clip = -max_clip - 1;
323 for (i = 1; i <
length; i++) {
327 for (j = 0; j < flen; j++)
328 acc += (
unsigned)ctx->
filter[j] * audio[i - j - 1];
331 acc =
FFMAX(acc, min_clip);
334 acc =
FFMIN(acc, max_clip);
341 int16_t *dst0, int16_t *dst1)
352 if (len <= 7) len ^= 1;
357 "Decoder's stomach is crying, it ate too many samples\n");
366 mode[0] = (dmode == 4) ? 1 : 0;
367 mode[1] = (dmode >= 2) ? 2 : 0;
369 bits[1] = (mode[1] == 2) ? 17 : 16;
371 for (ch = 0; ch < avctx->
channels; ch++) {
372 if ((ret =
decode_channel(ctx, gb, ch, len, mode[ch], bits[ch])) < 0)
385 for (i = 0; i <
len; i++)
386 dst0[i] = ch0[i] + ctx->
bias[0];
389 for (i = 0; i <
len; i++) {
390 dst0[
i] = ch0[
i] + ctx->
bias[0];
391 dst1[
i] = ch1[
i] + ctx->
bias[1];
395 for (i = 0; i <
len; i++) {
396 ch0[
i] += ctx->
bias[0];
398 dst1[
i] = ch0[
i] - (ch1[
i] + ctx->
bias[1]);
402 for (i = 0; i <
len; i++) {
403 t = ch0[
i] + ctx->
bias[0];
404 t2 = ch1[
i] + ctx->
bias[1];
410 for (i = 0; i <
len; i++) {
411 t = ch1[
i] + ctx->
bias[1];
412 t2 = ((ch0[
i] + ctx->
bias[0]) * 2) | (t & 1);
413 dst0[
i] = (
int)(t2 + t) / 2;
414 dst1[
i] = (
int)(t2 - t) / 2;
433 int table_size, table_bytes,
i;
445 if (memcmp(ctx->
pkt, avpkt->
data, 2 + table_bytes)) {
453 avpkt->
size - 2 - table_bytes);
463 src_size = avpkt->
size;
469 samples0 = (int16_t *)frame->
data[0];
470 samples1 = (int16_t *)frame->
data[1];
477 table_bytes = (table_size + 7) >> 3;
478 if (src_size < table_bytes + 3) {
496 block_pointer = src + table_bytes + 2;
497 bytes_left = src_size - table_bytes - 2;
500 if (bytes_left < ctx->block_size[i]) {
507 av_log(avctx,
AV_LOG_ERROR,
"Sir, I got carsick in your office. Not decoding the rest of packet.\n");
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
ptrdiff_t const GLvoid * data
static void flush(AVCodecContext *avctx)
int num_blocks
number of blocks inside the frame
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int init(AVCodecContext *avctx)
#define avpriv_request_sample(...)
int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
#define AV_CH_LAYOUT_STEREO
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
static void set(uint8_t *a[], int ch, int index, int ch_count, enum AVSampleFormat f, double v)
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Macro definitions for various function/variable attributes.
static const uint8_t bias_def[3][128]
static const uint8_t filter_coeffs_def[3][10][11][24]
enum AVSampleFormat sample_fmt
audio sample format
static int decode_block(AVCodecContext *avctx, GetBitContext *gb, int16_t *dst0, int16_t *dst1)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
bitstream reader API header.
static const uint16_t table[]
static int get_bits_left(GetBitContext *gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
int filter_bits
filter precision for the current channel data
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static void decode_flush(AVCodecContext *avctx)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_cold int decode_close(AVCodecContext *avctx)
static int decode_channel(RALFContext *ctx, GetBitContext *gb, int ch, int length, int mode, int bits)
static const uint8_t long_codes_def[3][125][224]
#define RALF_MAX_PKT_SIZE
const char * name
Name of the codec implementation.
uint64_t channel_layout
Audio channel layout.
int32_t channel_data[2][4096]
audio channel layout utility functions
#define FILTER_COEFFS_ELEMENTS
unsigned bias[2]
a constant value added to channel data after filtering
#define SHORT_CODES_ELEMENTS
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
static const uint8_t coding_mode_def[3][72]
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define FF_ARRAY_ELEMS(a)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int filter_params
combined filter parameters for the current channel data
Libavcodec external API header.
AVSampleFormat
Audio sample formats.
int sample_rate
samples per second
#define FILTERPARAM_ELEMENTS
main external API structure.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static unsigned int get_bits1(GetBitContext *s)
static av_cold int init_ralf_vlc(VLC *vlc, const uint8_t *data, int elems)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
VLC filter_coeffs[10][11]
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int block_size[1<< 12]
size of the blocks
int block_pts[1<< 12]
block start time (in milliseconds)
#define CODING_MODE_ELEMENTS
common internal api header.
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
static const uint8_t short_codes_def[3][15][88]
int filter_length
length of the filter for the current channel data
static av_cold int decode_init(AVCodecContext *avctx)
static int extend_code(GetBitContext *gb, int val, int range, int bits)
int channels
number of audio channels
VLC_TYPE(* table)[2]
code, bits
static const uint8_t filter_param_def[3][324]
static const double coeff[2][5]
static enum AVSampleFormat sample_fmts[]
#define LONG_CODES_ELEMENTS
#define AV_CH_LAYOUT_MONO
static void apply_lpc(RALFContext *ctx, int ch, int length, int bits)
static double val(void *priv, double ch)
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
mode
Use these values in ebur128_init (or'ed).
int nb_samples
number of audio samples (per channel) described by this frame
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.