yading@10: /* yading@10: * Header file for hardcoded QDM2 tables yading@10: * yading@10: * Copyright (c) 2010 Reimar Döffinger yading@10: * yading@10: * This file is part of FFmpeg. yading@10: * yading@10: * FFmpeg is free software; you can redistribute it and/or yading@10: * modify it under the terms of the GNU Lesser General Public yading@10: * License as published by the Free Software Foundation; either yading@10: * version 2.1 of the License, or (at your option) any later version. yading@10: * yading@10: * FFmpeg is distributed in the hope that it will be useful, yading@10: * but WITHOUT ANY WARRANTY; without even the implied warranty of yading@10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yading@10: * Lesser General Public License for more details. yading@10: * yading@10: * You should have received a copy of the GNU Lesser General Public yading@10: * License along with FFmpeg; if not, write to the Free Software yading@10: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA yading@10: */ yading@10: yading@10: #ifndef AVCODEC_QDM2_TABLEGEN_H yading@10: #define AVCODEC_QDM2_TABLEGEN_H yading@10: yading@10: #include yading@10: #include yading@10: #include "libavutil/attributes.h" yading@10: yading@10: #define SOFTCLIP_THRESHOLD 27600 yading@10: #define HARDCLIP_THRESHOLD 35716 yading@10: yading@10: #if CONFIG_HARDCODED_TABLES yading@10: #define softclip_table_init() yading@10: #define rnd_table_init() yading@10: #define init_noise_samples() yading@10: #include "libavcodec/qdm2_tables.h" yading@10: #else yading@10: static uint16_t softclip_table[HARDCLIP_THRESHOLD - SOFTCLIP_THRESHOLD + 1]; yading@10: static float noise_table[4096 + 20]; yading@10: static uint8_t random_dequant_index[256][5]; yading@10: static uint8_t random_dequant_type24[128][3]; yading@10: static float noise_samples[128]; yading@10: yading@10: static av_cold void softclip_table_init(void) { yading@10: int i; yading@10: double dfl = SOFTCLIP_THRESHOLD - 32767; yading@10: float delta = 1.0 / -dfl; yading@10: for (i = 0; i < HARDCLIP_THRESHOLD - SOFTCLIP_THRESHOLD + 1; i++) yading@10: softclip_table[i] = SOFTCLIP_THRESHOLD - ((int)(sin((float)i * delta) * dfl) & 0x0000FFFF); yading@10: } yading@10: yading@10: yading@10: // random generated table yading@10: static av_cold void rnd_table_init(void) { yading@10: int i,j; yading@10: uint32_t ldw; yading@10: uint64_t random_seed = 0; yading@10: float delta = 1.0 / 16384.0; yading@10: for(i = 0; i < 4096 ;i++) { yading@10: random_seed = random_seed * 214013 + 2531011; yading@10: noise_table[i] = (delta * (float)(((int32_t)random_seed >> 16) & 0x00007FFF)- 1.0) * 1.3; yading@10: } yading@10: yading@10: for (i = 0; i < 256 ;i++) { yading@10: random_seed = 81; yading@10: ldw = i; yading@10: for (j = 0; j < 5 ;j++) { yading@10: random_dequant_index[i][j] = ldw / random_seed; yading@10: ldw %= random_seed; yading@10: random_seed /= 3; yading@10: } yading@10: } yading@10: for (i = 0; i < 128 ;i++) { yading@10: random_seed = 25; yading@10: ldw = i; yading@10: for (j = 0; j < 3 ;j++) { yading@10: random_dequant_type24[i][j] = ldw / random_seed; yading@10: ldw %= random_seed; yading@10: random_seed /= 5; yading@10: } yading@10: } yading@10: } yading@10: yading@10: yading@10: static av_cold void init_noise_samples(void) { yading@10: int i; yading@10: unsigned random_seed = 0; yading@10: float delta = 1.0 / 16384.0; yading@10: for (i = 0; i < 128;i++) { yading@10: random_seed = random_seed * 214013 + 2531011; yading@10: noise_samples[i] = (delta * (float)((random_seed >> 16) & 0x00007fff) - 1.0); yading@10: } yading@10: } yading@10: #endif /* CONFIG_HARDCODED_TABLES */ yading@10: yading@10: #endif /* AVCODEC_QDM2_TABLEGEN_H */