yading@10: /* yading@10: * Header file for hardcoded DV 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_DV_TABLEGEN_H yading@10: #define AVCODEC_DV_TABLEGEN_H yading@10: yading@10: #include yading@10: yading@10: #include "dv_vlc_data.h" yading@10: yading@10: #if CONFIG_SMALL yading@10: #define DV_VLC_MAP_RUN_SIZE 15 yading@10: #define DV_VLC_MAP_LEV_SIZE 23 yading@10: #else yading@10: #define DV_VLC_MAP_RUN_SIZE 64 yading@10: #define DV_VLC_MAP_LEV_SIZE 512 //FIXME sign was removed so this should be /2 but needs check yading@10: #endif yading@10: yading@10: /* VLC encoding lookup table */ yading@10: typedef struct dv_vlc_pair { yading@10: uint32_t vlc; yading@10: uint32_t size; yading@10: } dv_vlc_pair; yading@10: yading@10: #if CONFIG_HARDCODED_TABLES yading@10: #define dv_vlc_map_tableinit() yading@10: #include "libavcodec/dv_tables.h" yading@10: #else yading@10: static struct dv_vlc_pair dv_vlc_map[DV_VLC_MAP_RUN_SIZE][DV_VLC_MAP_LEV_SIZE]; yading@10: yading@10: static void dv_vlc_map_tableinit(void) yading@10: { yading@10: int i, j; yading@10: for (i = 0; i < NB_DV_VLC - 1; i++) { yading@10: if (dv_vlc_run[i] >= DV_VLC_MAP_RUN_SIZE) yading@10: continue; yading@10: #if CONFIG_SMALL yading@10: if (dv_vlc_level[i] >= DV_VLC_MAP_LEV_SIZE) yading@10: continue; yading@10: #endif yading@10: yading@10: if (dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size != 0) yading@10: continue; yading@10: yading@10: dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].vlc = yading@10: dv_vlc_bits[i] << (!!dv_vlc_level[i]); yading@10: dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size = yading@10: dv_vlc_len[i] + (!!dv_vlc_level[i]); yading@10: } yading@10: for (i = 0; i < DV_VLC_MAP_RUN_SIZE; i++) { yading@10: #if CONFIG_SMALL yading@10: for (j = 1; j < DV_VLC_MAP_LEV_SIZE; j++) { yading@10: if (dv_vlc_map[i][j].size == 0) { yading@10: dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc | yading@10: (dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size)); yading@10: dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size + yading@10: dv_vlc_map[0][j].size; yading@10: } yading@10: } yading@10: #else yading@10: for (j = 1; j < DV_VLC_MAP_LEV_SIZE/2; j++) { yading@10: if (dv_vlc_map[i][j].size == 0) { yading@10: dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc | yading@10: (dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size)); yading@10: dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size + yading@10: dv_vlc_map[0][j].size; yading@10: } yading@10: dv_vlc_map[i][((uint16_t)(-j))&0x1ff].vlc = yading@10: dv_vlc_map[i][j].vlc | 1; yading@10: dv_vlc_map[i][((uint16_t)(-j))&0x1ff].size = yading@10: dv_vlc_map[i][j].size; yading@10: } yading@10: #endif yading@10: } yading@10: } yading@10: #endif /* CONFIG_HARDCODED_TABLES */ yading@10: yading@10: #endif /* AVCODEC_DV_TABLEGEN_H */