42 #define BITSTREAM_READER_LE 53 #define QDM2_LIST_ADD(list, size, packet) \ 56 list[size - 1].next = &list[size]; \ 58 list[size].packet = packet; \ 59 list[size].next = NULL; \ 64 #define QDM2_SB_USED(sub_sampling) (((sub_sampling) >= 2) ? 30 : 8 << (sub_sampling)) 66 #define FIX_NOISE_IDX(noise_idx) \ 67 if ((noise_idx) >= 3840) \ 68 (noise_idx) -= 3840; \ 70 #define SB_DITHERING_NOISE(sb,noise_idx) (noise_table[(noise_idx)++] * sb_noise_attenuation[(sb)]) 72 #define SAMPLES_NEEDED \ 73 av_log (NULL,AV_LOG_INFO,"This file triggers some untested code. Please contact the developers.\n"); 75 #define SAMPLES_NEEDED_2(why) \ 76 av_log (NULL,AV_LOG_INFO,"This file triggers some missing code. Please contact the developers.\nPosition: %s\n",why); 78 #define QDM2_MAX_FRAME_SIZE 512 161 int fft_coefs_min_index[5];
162 int fft_coefs_max_index[5];
200 0, 5, 1, 5, 5, 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 4
224 if ((value & ~3) > 0)
236 return (value & 1) ? ((value + 1) >> 1) : -(value >> 1);
252 for (i = 0; i <
length; i++)
255 return (uint16_t)(value & 0xffff);
269 if (sub_packet->
type == 0) {
270 sub_packet->
size = 0;
275 if (sub_packet->
type & 0x80) {
276 sub_packet->
size <<= 8;
278 sub_packet->
type &= 0x7f;
281 if (sub_packet->
type == 0x7f)
302 while (list && list->
packet) {
318 int i, j, n, ch, sum;
323 for (i = 0; i < n; i++) {
326 for (j = 0; j < 8; j++)
333 for (j = 0; j < 8; j++)
355 for (j = 0; j < 64; j++) {
380 for (j = 0; j < 64; ) {
381 if (coding_method[ch][sb][j] < 8)
383 if ((coding_method[ch][sb][j] - 8) > 22) {
387 switch (
switchtable[coding_method[ch][sb][j] - 8]) {
411 for (k = 0; k <
run; k++) {
413 int sbjk = sb + (j + k) / 64;
418 if (coding_method[ch][sbjk][(j + k) % 64] > coding_method[ch][sb][j]) {
422 memset(&coding_method[ch][sb][j + k], case_val,
424 memset(&coding_method[ch][sb][j + k], case_val,
445 int i, sb, ch, sb_used;
449 for (sb = 0; sb < 30; sb++)
450 for (i = 0; i < 8; i++) {
464 for (sb = 0; sb < sb_used; sb++)
466 for (i = 0; i < 64; i++) {
475 for (sb = 0; sb < sb_used; sb++) {
476 if ((sb >= 4) && (sb <= 23)) {
478 for (i = 0; i < 64; i++) {
492 for (i = 0; i < 64; i++) {
504 for (i = 0; i < 64; i++) {
536 int c,
int superblocktype_2_3,
541 int add1, add2, add3, add4;
544 if (!superblocktype_2_3) {
549 for (sb = 0; sb < 30; sb++) {
550 for (j = 1; j < 63; j++) {
551 add1 = tone_level_idx[ch][sb][j] - 10;
554 add2 = add3 = add4 = 0;
570 tmp = tone_level_idx[ch][sb][j + 1] * 2 - add4 - add3 - add2 - add1;
573 tone_level_idx_temp[ch][sb][j + 1] = tmp & 0xff;
575 tone_level_idx_temp[ch][sb][0] = tone_level_idx_temp[ch][sb][1];
580 for (sb = 0; sb < 30; sb++)
581 for (j = 0; j < 64; j++)
582 acc += tone_level_idx_temp[ch][sb][j];
584 multres = 0x66666667LL * (acc * 10);
585 esp_40 = (multres >> 32) / 8 + ((multres & 0xffffffff) >> 31);
587 for (sb = 0; sb < 30; sb++)
588 for (j = 0; j < 64; j++) {
589 comp = tone_level_idx_temp[ch][sb][j]* esp_40 * 10;
620 coding_method[ch][sb][j] = ((tmp & 0xfffa) + 30 )& 0xff;
622 for (sb = 0; sb < 30; sb++)
625 for (sb = 0; sb < 30; sb++)
626 for (j = 0; j < 64; j++)
628 if (coding_method[ch][sb][j] < 10)
629 coding_method[ch][sb][j] = 10;
632 if (coding_method[ch][sb][j] < 16)
633 coding_method[ch][sb][j] = 16;
635 if (coding_method[ch][sb][j] < 30)
636 coding_method[ch][sb][j] = 30;
641 for (sb = 0; sb < 30; sb++)
642 for (j = 0; j < 64; j++)
660 int length,
int sb_min,
int sb_max)
663 int joined_stereo, zero_encoding;
665 float type34_div = 0;
666 float type34_predictor;
668 int sign_bits[16] = {0};
672 for (sb=sb_min; sb < sb_max; sb++)
678 for (sb = sb_min; sb < sb_max; sb++) {
690 for (j = 0; j < 16; j++)
693 for (j = 0; j < 64; j++)
709 type34_predictor = 0.0;
712 for (j = 0; j < 128; ) {
717 for (k = 0; k < 5; k++) {
718 if ((j + 2 * k) >= 128)
729 for (k = 0; k < 5; k++)
732 for (k = 0; k < 5; k++)
735 for (k = 0; k < 10; k++)
747 f -=
noise_samples[((sb + 1) * (j +5 * ch + 1)) & 127] * 9.0 / 40.0;
758 for (k = 0; k < 5; k++) {
770 for (k = 0; k < 5; k++)
774 for (k = 0; k < 5; k++)
788 for (k = 0; k < 3; k++)
791 for (k = 0; k < 3; k++)
814 type34_div = (float)(1 <<
get_bits(gb, 2));
815 samples[0] = ((float)
get_bits(gb, 5) - 16.0) / 15.0;
816 type34_predictor = samples[0];
825 type34_predictor = samples[0];
840 for (k = 0; k < run && j + k < 128; k++) {
842 q->
tone_level[0][sb][(j + k) / 2] * samples[k];
844 if (sign_bits[(j + k) / 8])
846 q->
tone_level[1][sb][(j + k) / 2] * -samples[k];
849 q->
tone_level[1][sb][(j + k) / 2] * samples[k];
853 for (k = 0; k <
run; k++)
884 quantized_coeffs[0] =
level;
886 for (i = 0; i < 7; ) {
898 for (k = 1; k <=
run; k++)
899 quantized_coeffs[i + k] = (level + ((k * diff) / run));
931 for (sb = 0; sb < n; sb++)
933 for (j = 0; j < 8; j++) {
937 for (k=0; k < 8; k++) {
943 for (k=0; k < 8; k++)
950 for (sb = 0; sb < n; sb++)
958 for (j = 0; j < 8; j++)
964 for (sb = 0; sb < n; sb++)
966 for (j = 0; j < 8; j++) {
988 for (i = 1; i < n; i++)
993 for (j = 0; j < (8 - 1); ) {
1000 for (k = 1; k <=
run; k++)
1009 for (i = 0; i < 8; i++)
1103 if (nodes[0] && nodes[1] && nodes[2])
1109 if (nodes[0] && nodes[1] && nodes[3])
1124 int i, packet_bytes, sub_packet_size, sub_packets_D;
1125 unsigned int next_index = 0;
1139 if (header.
type < 2 || header.
type >= 8) {
1150 if (header.
type == 2 || header.
type == 4 || header.
type == 5) {
1166 for (i = 0; i < 6; i++)
1170 for (i = 0; packet_bytes > 0; i++) {
1187 if (next_index >= header.
size)
1195 sub_packet_size = ((packet->
size > 0xff) ? 1 : 0) + packet->
size + 2;
1197 if (packet->
type == 0)
1200 if (sub_packet_size > packet_bytes) {
1201 if (packet->
type != 10 && packet->
type != 11 && packet->
type != 12)
1203 packet->
size += packet_bytes - sub_packet_size;
1206 packet_bytes -= sub_packet_size;
1212 if (packet->
type == 8) {
1215 }
else if (packet->
type >= 9 && packet->
type <= 12) {
1218 }
else if (packet->
type == 13) {
1219 for (j = 0; j < 6; j++)
1221 }
else if (packet->
type == 14) {
1222 for (j = 0; j < 6; j++)
1224 }
else if (packet->
type == 15) {
1227 }
else if (packet->
type >= 16 && packet->
type < 48 &&
1252 ((sub_packet >= 16) ? (sub_packet - 16) : sub_packet);
1264 int local_int_4, local_int_8, stereo_phase, local_int_10;
1265 int local_int_14, stereo_exp, local_int_20, local_int_28;
1272 local_int_10 = 1 << (q->
group_order - duration - 1);
1279 if(local_int_4 < q->group_size)
1285 local_int_4 += local_int_10;
1286 local_int_28 += (1 << local_int_8);
1288 local_int_4 += 8 * local_int_10;
1289 local_int_28 += (8 << local_int_8);
1294 if (local_int_10 <= 2) {
1299 while (offset >= (local_int_10 - 1)) {
1300 offset += (1 - (local_int_10 - 1));
1301 local_int_4 += local_int_10;
1302 local_int_28 += (1 << local_int_8);
1309 local_int_14 = (offset >> local_int_8);
1323 exp = (exp < 0) ? 0 : exp;
1332 if (stereo_phase < 0)
1337 int sub_packet = (local_int_20 + local_int_28);
1343 channel, exp, phase);
1347 stereo_exp, stereo_phase);
1363 for (i = 0; i < 5; i++)
1373 if (value > min && value < max) {
1386 (packet->
type < 16 || packet->
type >= 48 ||
1398 type = packet->
type;
1400 if ((type >= 17 && type < 24) || (type >= 33 && type < 40)) {
1403 if (duration >= 0 && duration < 4)
1405 }
else if (type == 31) {
1406 for (j = 0; j < 4; j++)
1408 }
else if (type == 46) {
1409 for (j = 0; j < 6; j++)
1411 for (j = 0; j < 4; j++)
1417 for (i = 0, j = -1; i < 5; i++)
1432 const double iscale = 2.0 *
M_PI / 512.0;
1438 c.
im = level * sin(tone->
phase * iscale);
1439 c.
re = level * cos(tone->
phase * iscale);
1448 f[1] = -tone->
table[4];
1450 f[2] = 1.0 - tone->
table[2] - tone->
table[3];
1451 f[3] = tone->
table[1] + tone->
table[4] - 1.0;
1453 f[5] = tone->
table[2];
1454 for (i = 0; i < 2; i++) {
1458 c.
im * ((tone->
cutoff <=
i) ? -f[i] : f[i]);
1460 for (i = 0; i < 4; i++) {
1476 const double iscale = 0.25 *
M_PI;
1478 for (ch = 0; ch < q->
channels; ch++) {
1510 for (i = 0; i < 4; i++)
1523 if (offset < q->frequency_range) {
1527 tone.
cutoff = (offset >= 60) ? 3 : 2;
1566 int i, k, ch, sb_used, sub_sampling, dither_state = 0;
1571 for (ch = 0; ch < q->
channels; ch++)
1572 for (i = 0; i < 8; i++)
1573 for (k = sb_used; k <
SBLIMIT; k++)
1577 float *samples_ptr = q->
samples + ch;
1579 for (i = 0; i < 8; i++) {
1592 for (ch = 0; ch < q->
channels; ch++)
1661 if (bytestream2_peek_be64(&gb) == (((uint64_t)
MKBETAG(
'f',
'r',
'm',
'a') << 32) |
1662 (uint64_t)
MKBETAG(
'Q',
'D',
'M',
'2')))
1674 size = bytestream2_get_be32(&gb);
1683 if (bytestream2_get_be32(&gb) !=
MKBETAG(
'Q',
'D',
'C',
'A')) {
1699 avctx->
bit_rate = bytestream2_get_be32(&gb);
1701 s->
fft_size = bytestream2_get_be32(&gb);
1732 case 0: tmp = 40;
break;
1733 case 1: tmp = 48;
break;
1734 case 2: tmp = 56;
break;
1735 case 3: tmp = 72;
break;
1736 case 4: tmp = 80;
break;
1737 case 5: tmp = 100;
break;
1741 if ((tmp * 1000) < avctx->
bit_rate) tmp_val = 1;
1742 if ((tmp * 1440) < avctx->
bit_rate) tmp_val = 2;
1743 if ((tmp * 1760) < avctx->
bit_rate) tmp_val = 3;
1744 if ((tmp * 2240) < avctx->
bit_rate) tmp_val = 4;
1792 memset(&q->
output_buffer[frame_size], 0, frame_size *
sizeof(
float));
1810 for (ch = 0; ch < q->
channels; ch++) {
1841 int *got_frame_ptr,
AVPacket *avpkt)
1845 int buf_size = avpkt->
size;
1852 if(buf_size < s->checksum_size)
1859 out = (int16_t *)frame->
data[0];
1861 for (i = 0; i < 16; i++) {
av_cold void ff_rdft_end(RDFTContext *s)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
FFTTone fft_tones[1000]
FFT and tones.
A node in the subpacket list.
This structure describes decoded (raw) audio or video data.
static int fix_coding_method_array(int sb, int channels, sb_int8_array coding_method)
Called while processing data from subpackets 11 and 12.
ptrdiff_t const GLvoid * data
static int init_quantized_coeffs_elem0(int8_t *quantized_coeffs, GetBitContext *gb)
Init the first element of a channel in quantized_coeffs with data from packet 10 (quantized_coeffs[ch...
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
int64_t bit_rate
the average bitrate
static const float fft_tone_level_table[2][64]
static av_cold int init(AVCodecContext *avctx)
static void average_quantized_coeffs(QDM2Context *q)
Replace 8 elements with their average value.
#define avpriv_request_sample(...)
static VLC vlc_tab_tone_level_idx_hi2
#define QDM2_MAX_FRAME_SIZE
float synth_buf[MPA_MAX_CHANNELS][512 *2]
int8_t tone_level_idx_base[MPA_MAX_CHANNELS][30][8]
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
int coeff_per_sb_select
selector for "num. of coeffs. per subband" tables. Can be 0, 1, 2
static av_cold int qdm2_decode_close(AVCodecContext *avctx)
unsigned int size
subpacket size
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
int8_t tone_level_idx_hi2[MPA_MAX_CHANNELS][26]
#define FF_ARRAY_ELEMS(a)
float sb_samples[MPA_MAX_CHANNELS][128][SBLIMIT]
#define AV_CH_LAYOUT_STEREO
static VLC fft_stereo_exp_vlc
static void qdm2_decode_sub_packet_header(GetBitContext *gb, QDM2SubPacket *sub_packet)
Fill a QDM2SubPacket structure with packet type, size, and data pointer.
static void qdm2_fft_init_coefficient(QDM2Context *q, int sub_packet, int offset, int duration, int channel, int exp, int phase)
QDM2SubPNode sub_packet_list_C[16]
packets with errors?
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static QDM2SubPNode * qdm2_search_subpacket_type_in_list(QDM2SubPNode *list, int type)
Return node pointer to first packet of requested type in list.
static VLC vlc_tab_type30
static av_cold int qdm2_decode_init(AVCodecContext *avctx)
Init parameters from codec extradata.
static int qdm2_get_vlc(GetBitContext *gb, const VLC *vlc, int flag, int depth)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
enum AVSampleFormat sample_fmt
audio sample format
int fft_order
order of FFT (actually fftorder+1)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
static void qdm2_decode_fft_packets(QDM2Context *q)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
int sub_sampling
subsampling: 0=25%, 1=50%, 2=100% */
GLsizei GLboolean const GLfloat * value
#define SOFTCLIP_THRESHOLD
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static void qdm2_fft_tone_synthesizer(QDM2Context *q, int sub_packet)
static const int16_t fft_level_index_table[256]
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
static const float fft_tone_envelope_table[4][31]
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
static const uint8_t coeff_per_sb_for_dequant[3][30]
int checksum_size
size of data block, used also for checksum
static const uint8_t header[24]
static void process_subpacket_12(QDM2Context *q, QDM2SubPNode *node)
Process subpacket 12.
static int qdm2_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static const uint8_t fft_subpackets[32]
static av_cold void qdm2_init_static_data(void)
Init static data (does not depend on specific file)
int channels
number of channels
static void fill_tone_level_array(QDM2Context *q, int flag)
Related to synthesis filter Called by process_subpacket_10.
static av_always_inline int bytestream2_get_bytes_left(GetByteContext *g)
static int synthfilt_build_sb_samples(QDM2Context *q, GetBitContext *gb, int length, int sb_min, int sb_max)
Called by process_subpacket_11 to process more data from subpacket 11 with sb 0-8.
static av_cold void qdm2_init_vlc(void)
static int get_bits_left(GetBitContext *gb)
int synth_buf_offset[MPA_MAX_CHANNELS]
static VLC fft_level_exp_vlc
static av_cold void rnd_table_init(void)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static uint8_t random_dequant_type24[128][3]
const uint8_t * data
pointer to subpacket data (points to input data buffer, it's not a private copy)
static VLC vlc_tab_tone_level_idx_mid
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static const int switchtable[23]
int group_size
size of frame group (16 frames per group)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
int sub_packets_B
number of packets on 'B' list
QDM2SubPNode sub_packet_list_A[16]
list of all packets
int noise_idx
index for dithering noise table
const char * name
Name of the codec implementation.
float tone_level[MPA_MAX_CHANNELS][30][64]
Mixed temporary data used in decoding.
uint64_t channel_layout
Audio channel layout.
int8_t quantized_coeffs[MPA_MAX_CHANNELS][10][8]
static void qdm2_synthesis_filter(QDM2Context *q, int index)
static VLC vlc_tab_tone_level_idx_hi1
#define QDM2_SB_USED(sub_sampling)
int group_order
Parameters built from header parameters, do not change during playback.
static VLC fft_level_exp_alt_vlc
audio channel layout utility functions
static float noise_samples[128]
QDM2SubPNode sub_packet_list_B[16]
FFT packets B are on list.
struct QDM2SubPNode * next
pointer to next packet in the list, NULL if leaf node
static const int8_t tone_level_idx_offset_table[30][4]
float ff_mpa_synth_window_float[]
static void qdm2_decode_super_block(QDM2Context *q)
Decode superblock, fill packet lists.
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 av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define SAMPLES_NEEDED_2(why)
static const int8_t coding_method_table[5][30]
static VLC fft_stereo_phase_vlc
void(* rdft_calc)(struct RDFTContext *s, FFTSample *z)
static uint16_t qdm2_packet_checksum(const uint8_t *data, int length, int value)
QDM2 checksum.
#define QDM2_LIST_ADD(list, size, packet)
static uint8_t random_dequant_index[256][5]
static const float type30_dequant[8]
static uint16_t softclip_table[HARDCLIP_THRESHOLD-SOFTCLIP_THRESHOLD+1]
QDM2Complex complex[MPA_MAX_CHANNELS][256]
static const float type34_delta[10]
static VLC vlc_tab_fft_tone_offset[5]
static const uint8_t fft_level_exp[20][2]
static const float dequant_1bit[2][3]
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
static void build_sb_samples_from_noise(QDM2Context *q, int sb)
Build subband samples with noise weighted by q->tone_level.
float samples[MPA_MAX_CHANNELS *MPA_FRAME_SIZE]
static const uint8_t last_coeff[3]
Libavcodec external API header.
static const int fft_cutoff_index_table[4][2]
int sample_rate
samples per second
static void qdm2_fft_decode_tones(QDM2Context *q, int duration, GetBitContext *gb, int b)
static const uint8_t coeff_per_sb_for_avg[3][30]
int8_t tone_level_idx_mid[MPA_MAX_CHANNELS][26][8]
main external API structure.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame 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 list
static int qdm2_get_se_vlc(const VLC *vlc, GetBitContext *gb, int depth)
float output_buffer[QDM2_MAX_FRAME_SIZE *MPA_MAX_CHANNELS *2]
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
int fft_coefs_min_index[5]
FFTCoefficient fft_coefs[1000]
static unsigned int get_bits1(GetBitContext *s)
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
static void skip_bits(GetBitContext *s, int n)
int has_errors
packet has errors
static const uint8_t dequant_table[64]
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static void fill_coding_method_array(sb_int8_array tone_level_idx, sb_int8_array tone_level_idx_temp, sb_int8_array coding_method, int nb_channels, int c, int superblocktype_2_3, int cm_table_select)
Related to synthesis filter Called by process_subpacket_11 c is built with data from subpacket 11 Mos...
#define HARDCLIP_THRESHOLD
void ff_mpa_synth_filter_float(MPADSPContext *s, float *synth_buf_ptr, int *synth_buf_offset, float *window, int *dither_state, float *samples, ptrdiff_t incr, float *sb_samples)
void ff_mpa_synth_init_float(void)
int8_t coding_method[MPA_MAX_CHANNELS][30][64]
static void process_subpacket_10(QDM2Context *q, QDM2SubPNode *node)
Process subpacket 10 if not null, else.
static av_cold void softclip_table_init(void)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int fft_size
size of FFT, in complex numbers
int fft_coefs_max_index[5]
int frame_size
size of data frame
static int qdm2_decode(QDM2Context *q, const uint8_t *in, int16_t *out)
#define FIX_NOISE_IDX(noise_idx)
static const float fft_tone_sample_table[4][16][5]
int8_t tone_level_idx_hi1[MPA_MAX_CHANNELS][3][8][8]
int nb_channels
Parameters from codec header, do not change during playback.
int superblocktype_2_3
select fft tables and some algorithm based on superblock type
common internal api header.
int cm_table_select
selector for "coding method" tables. Can be 0, 1 (from init: 0-4)
channel
Use these values when setting the channel map with ebur128_set_channel().
QDM2SubPacket * packet
packet
QDM2SubPacket sub_packets[16]
Packets and packet lists.
static const int vlc_stage3_values[60]
mpeg audio declarations for both encoder and decoder.
int do_synth_filter
used to perform or skip synthesis filter
const uint8_t * compressed_data
I/O data.
int8_t tone_level_idx_temp[MPA_MAX_CHANNELS][30][64]
static int process_subpacket_9(QDM2Context *q, QDM2SubPNode *node)
Process subpacket 9, init quantized_coeffs with data from it.
#define MKBETAG(a, b, c, d)
static void process_subpacket_11(QDM2Context *q, QDM2SubPNode *node)
Process subpacket 11.
MPADSPContext mpadsp
Synthesis filter.
static void init_tone_level_dequantization(QDM2Context *q, GetBitContext *gb)
Related to synthesis filter, process data from packet 10 Init part of quantized_coeffs via function i...
static av_always_inline int diff(const uint32_t a, const uint32_t b)
int channels
number of audio channels
static void qdm2_fft_generate_tone(QDM2Context *q, FFTTone *tone)
QDM2SubPNode sub_packet_list_D[16]
DCT packets.
static int ff_thread_once(char *control, void(*routine)(void))
int8_t tone_level_idx[MPA_MAX_CHANNELS][30][64]
VLC_TYPE(* table)[2]
code, bits
static const struct twinvq_data tab
Filter the word “frame” indicates either a video frame or a group of audio samples
int8_t sb_int8_array[2][30][64]
#define SB_DITHERING_NOISE(sb, noise_idx)
static void qdm2_calculate_fft(QDM2Context *q, int channel, int sub_packet)
static void process_synthesis_subpackets(QDM2Context *q, QDM2SubPNode *list)
Process new subpackets for synthesis filter.
#define AV_CH_LAYOUT_MONO
av_cold int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans)
Set up a real FFT.
This structure stores compressed data.
av_cold void ff_mpadsp_init(MPADSPContext *s)
static av_cold void init_noise_samples(void)
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.
static VLC vlc_tab_type34