36 #define MAX_SUBFRAMES 8 37 #define MAX_PREDICTORS 256
69 int8_t coding_mode[128];
77 4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128, 160, 192, 224, 256, 0,
87 { 0x01, 0x0000001, 0x0000001, 0x0000003, 0x0000008 },
88 { 0x02, 0x0000003, 0x0000001, 0x0000007, 0x0000006 },
89 { 0x03, 0x0000005, 0x0000002, 0x000000E, 0x000000D },
90 { 0x03, 0x0000003, 0x0000003, 0x000000D, 0x0000018 },
91 { 0x04, 0x000000B, 0x0000004, 0x000001C, 0x0000019 },
92 { 0x04, 0x0000006, 0x0000006, 0x000001A, 0x0000030 },
93 { 0x05, 0x0000016, 0x0000008, 0x0000038, 0x0000032 },
94 { 0x05, 0x000000C, 0x000000C, 0x0000034, 0x0000060 },
95 { 0x06, 0x000002C, 0x0000010, 0x0000070, 0x0000064 },
96 { 0x06, 0x0000018, 0x0000018, 0x0000068, 0x00000C0 },
97 { 0x07, 0x0000058, 0x0000020, 0x00000E0, 0x00000C8 },
98 { 0x07, 0x0000030, 0x0000030, 0x00000D0, 0x0000180 },
99 { 0x08, 0x00000B0, 0x0000040, 0x00001C0, 0x0000190 },
100 { 0x08, 0x0000060, 0x0000060, 0x00001A0, 0x0000300 },
101 { 0x09, 0x0000160, 0x0000080, 0x0000380, 0x0000320 },
102 { 0x09, 0x00000C0, 0x00000C0, 0x0000340, 0x0000600 },
103 { 0x0A, 0x00002C0, 0x0000100, 0x0000700, 0x0000640 },
104 { 0x0A, 0x0000180, 0x0000180, 0x0000680, 0x0000C00 },
105 { 0x0B, 0x0000580, 0x0000200, 0x0000E00, 0x0000C80 },
106 { 0x0B, 0x0000300, 0x0000300, 0x0000D00, 0x0001800 },
107 { 0x0C, 0x0000B00, 0x0000400, 0x0001C00, 0x0001900 },
108 { 0x0C, 0x0000600, 0x0000600, 0x0001A00, 0x0003000 },
109 { 0x0D, 0x0001600, 0x0000800, 0x0003800, 0x0003200 },
110 { 0x0D, 0x0000C00, 0x0000C00, 0x0003400, 0x0006000 },
111 { 0x0E, 0x0002C00, 0x0001000, 0x0007000, 0x0006400 },
112 { 0x0E, 0x0001800, 0x0001800, 0x0006800, 0x000C000 },
113 { 0x0F, 0x0005800, 0x0002000, 0x000E000, 0x000C800 },
114 { 0x0F, 0x0003000, 0x0003000, 0x000D000, 0x0018000 },
115 { 0x10, 0x000B000, 0x0004000, 0x001C000, 0x0019000 },
116 { 0x10, 0x0006000, 0x0006000, 0x001A000, 0x0030000 },
117 { 0x11, 0x0016000, 0x0008000, 0x0038000, 0x0032000 },
118 { 0x11, 0x000C000, 0x000C000, 0x0034000, 0x0060000 },
119 { 0x12, 0x002C000, 0x0010000, 0x0070000, 0x0064000 },
120 { 0x12, 0x0018000, 0x0018000, 0x0068000, 0x00C0000 },
121 { 0x13, 0x0058000, 0x0020000, 0x00E0000, 0x00C8000 },
122 { 0x13, 0x0030000, 0x0030000, 0x00D0000, 0x0180000 },
123 { 0x14, 0x00B0000, 0x0040000, 0x01C0000, 0x0190000 },
124 { 0x14, 0x0060000, 0x0060000, 0x01A0000, 0x0300000 },
125 { 0x15, 0x0160000, 0x0080000, 0x0380000, 0x0320000 },
126 { 0x15, 0x00C0000, 0x00C0000, 0x0340000, 0x0600000 },
127 { 0x16, 0x02C0000, 0x0100000, 0x0700000, 0x0640000 },
128 { 0x16, 0x0180000, 0x0180000, 0x0680000, 0x0C00000 },
129 { 0x17, 0x0580000, 0x0200000, 0x0E00000, 0x0C80000 },
130 { 0x17, 0x0300000, 0x0300000, 0x0D00000, 0x1800000 },
131 { 0x18, 0x0B00000, 0x0400000, 0x1C00000, 0x1900000 },
132 { 0x18, 0x0600000, 0x0600000, 0x1A00000, 0x3000000 },
133 { 0x19, 0x1600000, 0x0800000, 0x3800000, 0x3200000 },
134 { 0x19, 0x0C00000, 0x0C00000, 0x3400000, 0x6000000 },
135 { 0x1A, 0x2C00000, 0x1000000, 0x7000000, 0x6400000 },
136 { 0x1A, 0x1800000, 0x1800000, 0x6800000, 0xC000000 },
164 shift =
FFMAX(0, shift);
193 for (i = 0; i < length - 1 >> 1; i++) {
195 coeffs[1] += *coeffs;
201 }
else if (mode == 2) {
203 int a2 = a1 + *coeffs;
207 for (i = 0; i < length - 2 >> 1; i++) {
208 int a3 = *coeffs +
a1;
219 }
else if (mode == 3) {
221 int a2 = a1 + *coeffs;
228 for (i = 0; i < length - 3; i++) {
246 memset(decoded, 0, len *
sizeof(*decoded));
254 for (i = 0; i <
len; i++) {
262 if (scale_bits > 0) {
263 if (scale_bits == 7) {
277 decoded[
i] = (x >> 1) ^ -(x & 1);
294 wlength = length / s->
uval;
296 rval = length - (wlength * s->
uval);
298 if (rval < s->uval / 2)
303 if (wlength <= 1 || wlength > 128)
308 for (i = 1; i < wlength; i++) {
320 mode += (-sign ^ (c - 1)) + sign;
334 while (i < wlength) {
339 if (i >= wlength - 1)
371 int subframe_size,
int prev_subframe_size)
374 int tmp,
x,
y,
i, j,
ret = 0;
375 int dshift,
size, filter_quant, filter_order;
383 if (prev_subframe_size > 0 &&
get_bits1(gb)) {
384 if (filter_order > prev_subframe_size)
387 decoded -= filter_order;
388 subframe_size += filter_order;
390 if (filter_order > subframe_size)
395 if (filter_order > subframe_size)
414 filter_quant -=
get_bits(gb, 3) + 1;
415 if (filter_quant < 3)
423 if (filter_order > 4) {
426 for (i = 4; i < filter_order; i++) {
434 for (i = 1; i < filter_order; i++) {
438 for (j = 0; j < (i + 1) / 2; j++) {
448 x = 1 << (32 - (15 - filter_quant));
449 y = 1 << ((15 - filter_quant) - 1);
450 for (i = 0, j = filter_order - 1; i < filter_order / 2; i++, j--) {
451 tmp = y + tfilter[j];
452 s->filter[j] = x - ((tfilter[
i] +
y) >> (15 - filter_quant));
453 s->filter[
i] = x - ((tfilter[j] +
y) >> (15 - filter_quant));
457 subframe_size - filter_order)) < 0)
460 for (i = 0; i < filter_order; i++)
461 s->residues[i] = *decoded++ >> dshift;
464 x = subframe_size - filter_order;
468 for (i = 0; i < tmp; i++) {
469 int v = 1 << (filter_quant - 1);
471 if (!(filter_order & 15)) {
474 }
else if (filter_order & 4) {
475 for (j = 0; j < filter_order; j += 4) {
476 v += s->residues[i + j + 3] * s->filter[j + 3] +
477 s->residues[i + j + 2] * s->filter[j + 2] +
478 s->residues[i + j + 1] * s->filter[j + 1] +
479 s->residues[i + j ] * s->filter[j ];
482 for (j = 0; j < filter_order; j += 8) {
483 v += s->residues[i + j + 7] * s->filter[j + 7] +
484 s->residues[i + j + 6] * s->filter[j + 6] +
485 s->residues[i + j + 5] * s->filter[j + 5] +
486 s->residues[i + j + 4] * s->filter[j + 4] +
487 s->residues[i + j + 3] * s->filter[j + 3] +
488 s->residues[i + j + 2] * s->filter[j + 2] +
489 s->residues[i + j + 1] * s->filter[j + 1] +
490 s->residues[i + j ] * s->filter[j ];
493 v = (av_clip(v >> filter_quant, -8192, 8191) << dshift) - *decoded;
495 s->residues[filter_order +
i] = v >> dshift;
500 memcpy(s->residues, &s->residues[y], 2 * filter_order);
514 int i = 0,
ret, prev = 0;
565 for (i = 0; i <
length; i++) {
572 for (i = 0; i <
length; i++) {
579 for (i = 0; i <
length; i++) {
592 for (i = 0; i <
length; i++) {
595 b = dfactor * (b >> dshift) + 128 >> 8 << dshift;
602 int length2, order_half, filter_order, dval1, dval2;
603 int tmp,
x, code_size;
613 for (i = 0; i < filter_order; i++) {
619 order_half = filter_order / 2;
620 length2 = length - (filter_order - 1);
624 for (i = 0; i < order_half; i++) {
633 for (i = length2 + order_half; i <
length; i++) {
641 for (i = 0; i < filter_order; i++)
642 s->residues[i] = *p2++ >> dshift;
646 for (; length2 > 0; length2 -= tmp) {
647 tmp =
FFMIN(length2, x);
649 for (i = 0; i < tmp; i++)
650 s->residues[filter_order + i] = *p2++ >> dshift;
652 for (i = 0; i < tmp; i++) {
655 if (filter_order == 16) {
659 v += s->residues[i + 7] * s->filter[7] +
660 s->residues[i + 6] * s->filter[6] +
661 s->residues[i + 5] * s->filter[5] +
662 s->residues[i + 4] * s->filter[4] +
663 s->residues[i + 3] * s->filter[3] +
664 s->residues[i + 2] * s->filter[2] +
665 s->residues[i + 1] * s->filter[1] +
666 s->residues[
i ] * s->filter[0];
669 v = (av_clip(v >> 10, -8192, 8191) << dshift) - *p1;
673 memcpy(s->residues, &s->residues[tmp], 2 * filter_order);
690 int chan,
i,
ret, hsize;
721 "invalid number of channels: %d\n", s->
ti.
channels);
726 "unsupported number of channels: %d\n", s->
ti.
channels);
768 for (chan = 0; chan < avctx->
channels; chan++)
773 for (chan = 0; chan < avctx->
channels; chan++) {
780 for (chan = 0; chan < avctx->
channels; chan++)
802 for (i = 0; i < chan; i++) {
808 if (ch_mask & 1 << nbit)
827 ch_mask |= 1 << nbit;
831 for (i = 0; i < chan; i++) {
837 for (i = 0; i < chan; i++) {
856 for (chan = 0; chan < avctx->
channels; chan++) {
886 for (chan = 0; chan < avctx->
channels; chan++) {
890 samples[i] = decoded[i] + 0x80;
894 for (chan = 0; chan < avctx->
channels; chan++) {
898 samples[i] = decoded[i];
902 for (chan = 0; chan < avctx->
channels; chan++) {
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
static int set_bps_params(AVCodecContext *avctx)
static const uint16_t predictor_sizes[]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int ff_tak_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, TAKStreamInfo *ti, int log_level_offset)
Validate and decode a frame header.
static int shift(int a, int b)
int16_t subframe_len[MAX_SUBFRAMES]
subframe length in samples
This structure describes decoded (raw) audio or video data.
int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Get the required buffer size for the given audio parameters.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int init(AVCodecContext *avctx)
MCDParam mcdparams[TAK_MAX_CHANNELS]
multichannel decorrelation parameters
static int decode_subframe(TAKDecContext *s, int32_t *decoded, int subframe_size, int prev_subframe_size)
#define DECLARE_ALIGNED(n, t, v)
#define FF_ARRAY_ELEMS(a)
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
static int decode_segment(TAKDecContext *s, int8_t mode, int32_t *decoded, int len)
static int get_sbits(GetBitContext *s, int n)
int8_t lpc_mode[TAK_MAX_CHANNELS]
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, const uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Fill plane data pointers and linesize for samples with sample format sample_fmt.
unsigned int decode_buffer_size
enum AVSampleFormat sample_fmt
audio sample format
static av_cold int tak_decode_close(AVCodecContext *avctx)
int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size)
#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
AVCodecContext * avctx
parent AVCodecContext
static int get_bits_count(const GetBitContext *s)
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
static int decode_channel(TAKDecContext *s, int chan)
#define MAX_SUBFRAMES
max number of subframes per channel
int8_t index
index into array of decorrelation types
static int get_bits_left(GetBitContext *gb)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
av_cold void ff_tak_init_crc(void)
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
int8_t present
decorrelation parameter availability for this channel
static int decode_residues(TAKDecContext *s, int32_t *decoded, int length)
uint64_t channel_layout
Audio channel layout.
common internal API header
static av_cold int tak_decode_init(AVCodecContext *avctx)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
static const struct CParam xcodes[50]
static int get_bits_esc4(GetBitContext *gb)
static int decorrelate(TAKDecContext *s, int c1, int c2, int length)
static void decode_lpc(int32_t *coeffs, int mode, int length)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define TAK_MIN_FRAME_HEADER_BYTES
int sample_rate
samples per second
int16_t predictors[MAX_PREDICTORS]
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
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.
struct TAKDecContext TAKDecContext
int32_t * decoded[TAK_MAX_CHANNELS]
decoded samples for each channel
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
synthesis window for stochastic i
TAK (Tom's lossless Audio Kompressor) decoder/demuxer common functions.
GetBitContext gb
bitstream reader initialized to start at the current frame
int8_t dmode
channel decorrelation type in the current frame
int32_t(* scalarproduct_int16)(const int16_t *v1, const int16_t *v2, int len)
Calculate scalar product of two vectors.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
int nb_samples
number of samples in the current frame
common internal api header.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
AVSampleFormat
Audio Sample Formats.
static const int8_t mc_dmodes[]
int nb_subframes
number of subframes in the current frame
static int tak_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *pkt)
int channels
number of audio channels
static const uint8_t * align_get_bits(GetBitContext *s)
Filter the word “frame” indicates either a video frame or a group of audio samples
static void set_sample_rate_params(AVCodecContext *avctx)
int8_t sample_shift[TAK_MAX_CHANNELS]
shift applied to every sample in the channel
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define FFSWAP(type, a, b)
uint8_t ** extended_data
pointers to the data planes/channels.
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame