38 #define FILTER_RAW 642 49 #define RALF_MAX_PKT_SIZE 8192 66 int block_size[1 << 12];
67 int block_pts[1 << 12];
73 #define MAX_ELEMS 644 // no RALF table uses more than that 79 int counts[17], prefixes[18];
84 for (i = 0; i <= 16; i++)
86 for (i = 0; i < elems; i++) {
87 cur_len = (nb ? *data & 0xF : *data >> 4) + 1;
89 max_bits =
FFMAX(max_bits, cur_len);
95 for (i = 1; i <= 16; i++)
96 prefixes[i + 1] = (prefixes[i] + counts[i]) << 1;
98 for (i = 0; i < elems; i++)
99 codes[i] = prefixes[lens[i]]++;
102 lens, 1, 1, codes, 2, 2,
NULL, 0, 0, 0);
110 for (i = 0; i < 3; i++) {
114 for (j = 0; j < 10; j++)
115 for (k = 0; k < 11; k++)
117 for (j = 0; j < 15; j++)
119 for (j = 0; j < 125; j++)
162 for (i = 0; i < 3; i++) {
180 for (j = 0; j < 10; j++) {
181 for (k = 0; k < 11; k++) {
191 for (j = 0; j < 15; j++) {
199 for (j = 0; j < 125; j++) {
216 }
else if (val == range * 2) {
240 for (i = 0; i <
length; i++)
250 memset(dst, 0,
sizeof(*dst) * length);
255 int cmode = 0,
coeff = 0;
264 coeff -= 12 << add_bits;
268 cmode = coeff >> add_bits;
273 }
else if (cmode > 0) {
281 code_params =
get_vlc2(gb,
set->coding_mode.table,
set->coding_mode.bits, 2);
282 if (code_params >= 15) {
283 add_bits = av_clip((code_params / 5 - 3) / 2, 0, 10);
284 if (add_bits > 9 && (code_params % 5) != 2)
288 code_vlc =
set->long_codes + code_params - 15;
293 code_vlc =
set->short_codes + code_params;
296 for (i = 0; i <
length; i += 2) {
303 dst[i + 1] =
extend_code(gb, code2, range, 0) << add_bits;
306 dst[i + 1] |=
get_bits(gb, add_bits);
318 int max_clip = (1 <<
bits) - 1, min_clip = -max_clip - 1;
320 for (i = 1; i <
length; i++) {
324 for (j = 0; j < flen; j++)
325 acc += ctx->
filter[j] * audio[i - j - 1];
328 acc =
FFMAX(acc, min_clip);
331 acc =
FFMIN(acc, max_clip);
338 int16_t *dst0, int16_t *dst1)
348 if (len <= 7) len ^= 1;
353 "Decoder's stomach is crying, it ate too many samples\n");
362 mode[0] = (dmode == 4) ? 1 : 0;
363 mode[1] = (dmode >= 2) ? 2 : 0;
365 bits[1] = (mode[1] == 2) ? 17 : 16;
367 for (ch = 0; ch < avctx->
channels; ch++) {
368 if ((ret =
decode_channel(ctx, gb, ch, len, mode[ch], bits[ch])) < 0)
381 for (i = 0; i <
len; i++)
382 dst0[i] = ch0[i] + ctx->
bias[0];
385 for (i = 0; i <
len; i++) {
386 dst0[
i] = ch0[
i] + ctx->
bias[0];
387 dst1[
i] = ch1[
i] + ctx->
bias[1];
391 for (i = 0; i <
len; i++) {
392 ch0[
i] += ctx->
bias[0];
394 dst1[
i] = ch0[
i] - (ch1[
i] + ctx->
bias[1]);
398 for (i = 0; i <
len; i++) {
399 t = ch0[
i] + ctx->
bias[0];
400 t2 = ch1[
i] + ctx->
bias[1];
406 for (i = 0; i <
len; i++) {
407 t = ch1[
i] + ctx->
bias[1];
408 t2 = ((ch0[
i] + ctx->
bias[0]) << 1) | (t & 1);
409 dst0[
i] = (t2 +
t) / 2;
410 dst1[
i] = (t2 -
t) / 2;
429 int table_size, table_bytes,
i;
441 if (memcmp(ctx->
pkt, avpkt->
data, 2 + table_bytes)) {
449 avpkt->
size - 2 - table_bytes);
459 src_size = avpkt->
size;
465 samples0 = (int16_t *)frame->
data[0];
466 samples1 = (int16_t *)frame->
data[1];
473 table_bytes = (table_size + 7) >> 3;
474 if (src_size < table_bytes + 3) {
490 block_pointer = src + table_bytes + 2;
491 bytes_left = src_size - table_bytes - 2;
494 if (bytes_left < ctx->block_size[i]) {
501 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.
static void set(uint8_t *a[], int ch, int index, int ch_count, enum AVSampleFormat f, double v)
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 AV_CH_LAYOUT_STEREO
static const uint8_t bias_def[3][128]
static int init_ralf_vlc(VLC *vlc, const uint8_t *data, int elems)
static const uint8_t filter_coeffs_def[3][10][11][24]
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
int ff_init_vlc_sparse(VLC *vlc, 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)
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.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
the mask is usually to keep the same permissions Filters should remove permissions on reference they give to output whenever necessary It can be automatically done by setting the rej_perms field on the output pad Here are a few guidelines corresponding to common 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
bitstream reader API header.
struct RALFContext RALFContext
static int get_bits_left(GetBitContext *gb)
static int get_ue_golomb(GetBitContext *gb)
read unsigned exp golomb code.
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)
static const struct endianess table[]
#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
void av_log(void *avcl, int level, const char *fmt,...)
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
#define SHORT_CODES_ELEMENTS
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.
static void flush(AVCodecContext *avctx)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int filter_params
combined filter parameters for the current channel data
int sample_rate
samples per second
#define FILTERPARAM_ELEMENTS
main external API structure.
static void close(AVCodecParserContext *s)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static unsigned int get_bits1(GetBitContext *s)
synthesis window for stochastic i
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static const double coeff[2][5]
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.
AVSampleFormat
Audio Sample Formats.
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
else dst[i][x+y *dst_stride[i]]
VLC_TYPE(* table)[2]
code, bits
static const uint8_t filter_param_def[3][324]
int bias[2]
a constant value added to channel data after filtering
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define LONG_CODES_ELEMENTS
#define AV_CH_LAYOUT_MONO
static void apply_lpc(RALFContext *ctx, int ch, int length, int bits)
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
int nb_samples
number of audio samples (per channel) described by this frame