mirror of https://github.com/FFmpeg/FFmpeg.git
Originally committed as revision 22622 to svn://svn.ffmpeg.org/ffmpeg/trunkrelease/0.6
parent
8de0859bcb
commit
c787cb339e
4 changed files with 155 additions and 55 deletions
@ -0,0 +1,50 @@ |
||||
/*
|
||||
* Generate a header file for hardcoded DV tables |
||||
* |
||||
* Copyright (c) 2010 Reimar Döffinger <Reimar.Doeffinger@gmx.de> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#include <stdlib.h> |
||||
#define CONFIG_HARDCODED_TABLES 0 |
||||
#ifndef CONFIG_SMALL |
||||
#error CONFIG_SMALL must be defined to generate tables |
||||
#endif |
||||
#include "dv_tablegen.h" |
||||
#include "tableprint.h" |
||||
#include <inttypes.h> |
||||
|
||||
WRITE_1D_FUNC_ARGV(vlc_pair, struct dv_vlc_pair, 7, |
||||
"{0x%"PRIx32", %"PRId8"}", data[i].vlc, data[i].size) |
||||
WRITE_2D_FUNC(vlc_pair, struct dv_vlc_pair) |
||||
|
||||
void tableinit(void) |
||||
{ |
||||
dv_vlc_map_tableinit(); |
||||
} |
||||
|
||||
const struct tabledef tables[] = { |
||||
{ |
||||
"static const struct dv_vlc_pair dv_vlc_map[DV_VLC_MAP_RUN_SIZE][DV_VLC_MAP_LEV_SIZE]", |
||||
write_vlc_pair_2d_array, |
||||
dv_vlc_map, |
||||
DV_VLC_MAP_RUN_SIZE, |
||||
DV_VLC_MAP_LEV_SIZE |
||||
}, |
||||
{ NULL } |
||||
}; |
@ -0,0 +1,96 @@ |
||||
/*
|
||||
* Header file for hardcoded DV tables |
||||
* |
||||
* Copyright (c) 2010 Reimar Döffinger <Reimar.Doeffinger@gmx.de> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef DV_TABLEGEN_H |
||||
#define DV_TABLEGEN_H |
||||
|
||||
#include <stdint.h> |
||||
#include "dv_vlc_data.h" |
||||
|
||||
#if CONFIG_SMALL |
||||
#define DV_VLC_MAP_RUN_SIZE 15 |
||||
#define DV_VLC_MAP_LEV_SIZE 23 |
||||
#else |
||||
#define DV_VLC_MAP_RUN_SIZE 64 |
||||
#define DV_VLC_MAP_LEV_SIZE 512 //FIXME sign was removed so this should be /2 but needs check
|
||||
#endif |
||||
|
||||
/* VLC encoding lookup table */ |
||||
struct dv_vlc_pair { |
||||
uint32_t vlc; |
||||
uint32_t size; |
||||
}; |
||||
|
||||
#if CONFIG_HARDCODED_TABLES |
||||
#define dv_vlc_map_tableinit() |
||||
#include "libavcodec/dv_tables.h" |
||||
#else |
||||
static struct dv_vlc_pair dv_vlc_map[DV_VLC_MAP_RUN_SIZE][DV_VLC_MAP_LEV_SIZE]; |
||||
|
||||
static void dv_vlc_map_tableinit(void) |
||||
{ |
||||
int i, j; |
||||
for (i = 0; i < NB_DV_VLC - 1; i++) { |
||||
if (dv_vlc_run[i] >= DV_VLC_MAP_RUN_SIZE) |
||||
continue; |
||||
#if CONFIG_SMALL |
||||
if (dv_vlc_level[i] >= DV_VLC_MAP_LEV_SIZE) |
||||
continue; |
||||
#endif |
||||
|
||||
if (dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size != 0) |
||||
continue; |
||||
|
||||
dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].vlc = |
||||
dv_vlc_bits[i] << (!!dv_vlc_level[i]); |
||||
dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size = |
||||
dv_vlc_len[i] + (!!dv_vlc_level[i]); |
||||
} |
||||
for (i = 0; i < DV_VLC_MAP_RUN_SIZE; i++) { |
||||
#if CONFIG_SMALL |
||||
for (j = 1; j < DV_VLC_MAP_LEV_SIZE; j++) { |
||||
if (dv_vlc_map[i][j].size == 0) { |
||||
dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc | |
||||
(dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size)); |
||||
dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size + |
||||
dv_vlc_map[0][j].size; |
||||
} |
||||
} |
||||
#else |
||||
for (j = 1; j < DV_VLC_MAP_LEV_SIZE/2; j++) { |
||||
if (dv_vlc_map[i][j].size == 0) { |
||||
dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc | |
||||
(dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size)); |
||||
dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size + |
||||
dv_vlc_map[0][j].size; |
||||
} |
||||
dv_vlc_map[i][((uint16_t)(-j))&0x1ff].vlc = |
||||
dv_vlc_map[i][j].vlc | 1; |
||||
dv_vlc_map[i][((uint16_t)(-j))&0x1ff].size = |
||||
dv_vlc_map[i][j].size; |
||||
} |
||||
#endif |
||||
} |
||||
} |
||||
#endif /* CONFIG_HARDCODED_TABLES */ |
||||
|
||||
#endif /* DV_TABLEGEN_H */ |
Loading…
Reference in new issue