Logo Search packages:      
Sourcecode: blender version File versions  Download package

qdm2.c File Reference


Detailed Description

QDM2 decoder
Author:
Ewald Snel, Benjamin Larsson, Alex Beregszaszi, Roberto Togni The decoder is not perfect yet, there are still some distortions especially on files encoded with 16 or 8 subbands.

Definition in file qdm2.c.

#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include "avcodec.h"
#include "bitstream.h"
#include "dsputil.h"
#include "mpegaudio.h"
#include "qdm2data.h"
#include <assert.h>

Go to the source code of this file.

Classes

struct  _QDM2SubPNode
struct  FFTCoefficient
struct  FFTTone
struct  QDM2Complex
struct  QDM2Context
struct  QDM2FFT
struct  QDM2SubPacket

Defines

#define ALT_BITSTREAM_READER_LE
#define BITS_LEFT(length, gb)   ((length) - get_bits_count ((gb)))
#define FIX_NOISE_IDX(noise_idx)
#define HARDCLIP_THRESHOLD   35716
#define QDM2_LIST_ADD(list, size, packet)
#define QDM2_SB_USED(sub_sampling)   (((sub_sampling) >= 2) ? 30 : 8 << (sub_sampling))
#define SAMPLES_NEEDED   av_log (NULL,AV_LOG_INFO,"This file triggers some untested code. Please contact the developers.\n");
#define SAMPLES_NEEDED_2(why)   av_log (NULL,AV_LOG_INFO,"This file triggers some missing code. Please contact the developers.\nPosition: %s\n",why);
#define SB_DITHERING_NOISE(sb, noise_idx)   (noise_table[(noise_idx)++] * sb_noise_attenuation[(sb)])
#define SOFTCLIP_THRESHOLD   27600

Typedefs

typedef struct _QDM2SubPNode QDM2SubPNode
typedef int8_t sb_int8_array [2][30][64]

Functions

static MPA_INT mpa_window[512] __attribute__ ((aligned(16)))
static void average_quantized_coeffs (QDM2Context *q)
static void build_sb_samples_from_noise (QDM2Context *q, int sb)
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)
static void fill_tone_level_array (QDM2Context *q, int flag)
static void fix_coding_method_array (int sb, int channels, sb_int8_array coding_method)
static void init_noise_samples (void)
static void init_quantized_coeffs_elem0 (int8_t *quantized_coeffs, GetBitContext *gb, int length)
static void init_tone_level_dequantization (QDM2Context *q, GetBitContext *gb, int length)
static void process_subpacket_10 (QDM2Context *q, QDM2SubPNode *node, int length)
static void process_subpacket_11 (QDM2Context *q, QDM2SubPNode *node, int length)
static void process_subpacket_12 (QDM2Context *q, QDM2SubPNode *node, int length)
static void process_subpacket_9 (QDM2Context *q, QDM2SubPNode *node)
static void process_synthesis_subpackets (QDM2Context *q, QDM2SubPNode *list)
static void qdm2_calculate_fft (QDM2Context *q, int channel, int sub_packet)
static void qdm2_decode (QDM2Context *q, uint8_t *in, int16_t *out)
static int qdm2_decode_close (AVCodecContext *avctx)
static void qdm2_decode_fft_packets (QDM2Context *q)
static int qdm2_decode_frame (AVCodecContext *avctx, void *data, int *data_size, uint8_t *buf, int buf_size)
static int qdm2_decode_init (AVCodecContext *avctx)
static void qdm2_decode_sub_packet_header (GetBitContext *gb, QDM2SubPacket *sub_packet)
static void qdm2_decode_super_block (QDM2Context *q)
static void qdm2_fft_decode_tones (QDM2Context *q, int duration, GetBitContext *gb, int b)
static void qdm2_fft_generate_tone (QDM2Context *q, FFTTone *tone)
static void qdm2_fft_init_coefficient (QDM2Context *q, int sub_packet, int offset, int duration, int channel, int exp, int phase)
static void qdm2_fft_tone_synthesizer (QDM2Context *q, int sub_packet)
static int qdm2_get_se_vlc (VLC *vlc, GetBitContext *gb, int depth)
static int qdm2_get_vlc (GetBitContext *gb, VLC *vlc, int flag, int depth)
static void qdm2_init (QDM2Context *q)
static void qdm2_init_vlc (void)
static uint16_t qdm2_packet_checksum (uint8_t *data, int length, int value)
static QDM2SubPNodeqdm2_search_subpacket_type_in_list (QDM2SubPNode *list, int type)
static void qdm2_synthesis_filter (QDM2Context *q, int index)
static void rnd_table_init (void)
static void softclip_table_init (void)
static void synthfilt_build_sb_samples (QDM2Context *q, GetBitContext *gb, int length, int sb_min, int sb_max)

Variables

static uint8_t empty_buffer [FF_INPUT_BUFFER_PADDING_SIZE]
static float f2i_scale = (float) (1 << (FRAC_BITS - 15))
static VLC fft_level_exp_alt_vlc
static VLC fft_level_exp_vlc
static VLC fft_stereo_exp_vlc
static VLC fft_stereo_phase_vlc
static float noise_samples [128]
static float noise_table [4096]
AVCodec qdm2_decoder
static uint8_t random_dequant_index [256][5]
static uint8_t random_dequant_type24 [128][3]
static uint16_t softclip_table [HARDCLIP_THRESHOLD-SOFTCLIP_THRESHOLD+1]
static VLC vlc_tab_diff
static VLC vlc_tab_fft_tone_offset [5]
static VLC vlc_tab_level
static VLC vlc_tab_run
static VLC vlc_tab_tone_level_idx_hi1
static VLC vlc_tab_tone_level_idx_hi2
static VLC vlc_tab_tone_level_idx_mid
static VLC vlc_tab_type30
static VLC vlc_tab_type34


Generated by  Doxygen 1.6.0   Back to index