X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fvc1data.h;h=da8f0a1f40b4c4f5f126e8c16775585c56b654a6;hb=3ab770001817e0f52114a9876819f07fcd8ed93a;hp=f54b2e0cbb6830c99ee0f38c05ab52ab691c73d3;hpb=660e83f815316cb85560e36830e4d7903ebfae09;p=ffmpeg diff --git a/libavcodec/vc1data.h b/libavcodec/vc1data.h index f54b2e0cbb6..da8f0a1f40b 100644 --- a/libavcodec/vc1data.h +++ b/libavcodec/vc1data.h @@ -3,114 +3,138 @@ * copyright (c) 2006 Konstantin Shishkov * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav 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, + * Libav 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 + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** - * @file vc1data.h + * @file * VC-1 tables. */ -#ifndef VC1DATA_H -#define VC1DATA_H +#ifndef AVCODEC_VC1DATA_H +#define AVCODEC_VC1DATA_H + +#include +#include "libavutil/rational.h" +#include "get_bits.h" /** Table for conversion between TTBLK and TTMB */ -extern const int vc1_ttblk_to_tt[3][8]; +extern const int ff_vc1_ttblk_to_tt[3][8]; -extern const int vc1_ttfrm_to_tt[4]; +extern const int ff_vc1_ttfrm_to_tt[4]; /** MV P mode - the 5th element is only used for mode 1 */ -extern const uint8_t vc1_mv_pmode_table[2][5]; -extern const uint8_t vc1_mv_pmode_table2[2][4]; +extern const uint8_t ff_vc1_mv_pmode_table[2][5]; +extern const uint8_t ff_vc1_mv_pmode_table2[2][4]; + +extern const int ff_vc1_fps_nr[5], ff_vc1_fps_dr[2]; +extern const uint8_t ff_vc1_pquant_table[3][32]; -extern const int vc1_fps_nr[5], vc1_fps_dr[2]; -extern const uint8_t vc1_pquant_table[3][32]; +/* MBMODE table for interlaced frame P-picture */ +extern const uint8_t ff_vc1_mbmode_intfrp[2][15][4]; /** @name VC-1 VLC tables and defines * @todo TODO move this into the context */ //@{ #define VC1_BFRACTION_VLC_BITS 7 -extern VLC vc1_bfraction_vlc; +extern VLC ff_vc1_bfraction_vlc; #define VC1_IMODE_VLC_BITS 4 -extern VLC vc1_imode_vlc; +extern VLC ff_vc1_imode_vlc; #define VC1_NORM2_VLC_BITS 3 -extern VLC vc1_norm2_vlc; +extern VLC ff_vc1_norm2_vlc; #define VC1_NORM6_VLC_BITS 9 -extern VLC vc1_norm6_vlc; +extern VLC ff_vc1_norm6_vlc; /* Could be optimized, one table only needs 8 bits */ #define VC1_TTMB_VLC_BITS 9 //12 -extern VLC vc1_ttmb_vlc[3]; +extern VLC ff_vc1_ttmb_vlc[3]; #define VC1_MV_DIFF_VLC_BITS 9 //15 -extern VLC vc1_mv_diff_vlc[4]; +extern VLC ff_vc1_mv_diff_vlc[4]; #define VC1_CBPCY_P_VLC_BITS 9 //14 -extern VLC vc1_cbpcy_p_vlc[4]; +extern VLC ff_vc1_cbpcy_p_vlc[4]; +#define VC1_ICBPCY_VLC_BITS 9 +extern VLC ff_vc1_icbpcy_vlc[8]; #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6 -extern VLC vc1_4mv_block_pattern_vlc[4]; +extern VLC ff_vc1_4mv_block_pattern_vlc[4]; +#define VC1_2MV_BLOCK_PATTERN_VLC_BITS 3 +extern VLC ff_vc1_2mv_block_pattern_vlc[4]; #define VC1_TTBLK_VLC_BITS 5 -extern VLC vc1_ttblk_vlc[3]; +extern VLC ff_vc1_ttblk_vlc[3]; #define VC1_SUBBLKPAT_VLC_BITS 6 -extern VLC vc1_subblkpat_vlc[3]; - -extern VLC vc1_ac_coeff_table[8]; +extern VLC ff_vc1_subblkpat_vlc[3]; +#define VC1_INTFR_4MV_MBMODE_VLC_BITS 9 +extern VLC ff_vc1_intfr_4mv_mbmode_vlc[4]; +#define VC1_INTFR_NON4MV_MBMODE_VLC_BITS 6 +extern VLC ff_vc1_intfr_non4mv_mbmode_vlc[4]; +#define VC1_IF_MMV_MBMODE_VLC_BITS 5 +extern VLC ff_vc1_if_mmv_mbmode_vlc[8]; +#define VC1_IF_1MV_MBMODE_VLC_BITS 5 +extern VLC ff_vc1_if_1mv_mbmode_vlc[8]; +#define VC1_1REF_MVDATA_VLC_BITS 9 +extern VLC ff_vc1_1ref_mvdata_vlc[4]; +#define VC1_2REF_MVDATA_VLC_BITS 9 +extern VLC ff_vc1_2ref_mvdata_vlc[8]; + +extern VLC ff_vc1_ac_coeff_table[8]; + +#define VC1_IF_MBMODE_VLC_BITS 5 //@} -#if 0 //original bfraction from vc9data.h, not conforming to standard -/* Denominator used for vc1_bfraction_lut */ -#define B_FRACTION_DEN 840 - -/* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */ -extern const int16_t vc1_bfraction_lut[23]; -#else -/* Denominator used for vc1_bfraction_lut */ +/* Denominator used for ff_vc1_bfraction_lut */ #define B_FRACTION_DEN 256 /* pre-computed scales for all bfractions and base=256 */ -extern const int16_t vc1_bfraction_lut[23]; -#endif - -extern const uint8_t vc1_bfraction_bits[23]; -extern const uint8_t vc1_bfraction_codes[23]; +extern const int16_t ff_vc1_bfraction_lut[23]; +extern const uint8_t ff_vc1_bfraction_bits[23]; +extern const uint8_t ff_vc1_bfraction_codes[23]; //Same as H.264 -extern const AVRational vc1_pixel_aspect[16]; +extern const AVRational ff_vc1_pixel_aspect[16]; /* BitPlane IMODE - such a small table... */ -extern const uint8_t vc1_imode_codes[7]; -extern const uint8_t vc1_imode_bits[7]; +extern const uint8_t ff_vc1_imode_codes[7]; +extern const uint8_t ff_vc1_imode_bits[7]; /* Normal-2 imode */ -extern const uint8_t vc1_norm2_codes[4]; -extern const uint8_t vc1_norm2_bits[4]; -extern const uint16_t vc1_norm6_codes[64]; -extern const uint8_t vc1_norm6_bits[64]; +extern const uint8_t ff_vc1_norm2_codes[4]; +extern const uint8_t ff_vc1_norm2_bits[4]; +extern const uint16_t ff_vc1_norm6_codes[64]; +extern const uint8_t ff_vc1_norm6_bits[64]; /* Normal-6 imode */ -extern const uint8_t vc1_norm6_spec[64][5]; +extern const uint8_t ff_vc1_norm6_spec[64][5]; /* 4MV Block pattern VLC tables */ -extern const uint8_t vc1_4mv_block_pattern_codes[4][16]; -extern const uint8_t vc1_4mv_block_pattern_bits[4][16]; +extern const uint8_t ff_vc1_4mv_block_pattern_codes[4][16]; +extern const uint8_t ff_vc1_4mv_block_pattern_bits[4][16]; + +/* 2MV Block pattern VLC tables */ +extern const uint8_t ff_vc1_2mv_block_pattern_codes[4][4]; +extern const uint8_t ff_vc1_2mv_block_pattern_bits[4][4]; extern const uint8_t wmv3_dc_scale_table[32]; /* P-Picture CBPCY VLC tables */ -extern const uint16_t vc1_cbpcy_p_codes[4][64]; -extern const uint8_t vc1_cbpcy_p_bits[4][64]; +extern const uint16_t ff_vc1_cbpcy_p_codes[4][64]; +extern const uint8_t ff_vc1_cbpcy_p_bits[4][64]; + +/* Interlaced CBPCY VLC tables (Table 124 - Table 131) */ +extern const uint16_t ff_vc1_icbpcy_p_codes[8][63]; +extern const uint8_t ff_vc1_icbpcy_p_bits[8][63]; /* MacroBlock Transform Type: 7.1.3.11, p89 * 8x8:B @@ -120,40 +144,60 @@ extern const uint8_t vc1_cbpcy_p_bits[4][64]; * 8x4:MB:btm 8x4:MB:top 8x4,MB,both * 4x8,MB,right 4x8,MB,left * 4x4,MB */ -extern const uint16_t vc1_ttmb_codes[3][16]; +extern const uint16_t ff_vc1_ttmb_codes[3][16]; -extern const uint8_t vc1_ttmb_bits[3][16]; +extern const uint8_t ff_vc1_ttmb_bits[3][16]; /* TTBLK (Transform Type per Block) tables */ -extern const uint8_t vc1_ttblk_codes[3][8]; -extern const uint8_t vc1_ttblk_bits[3][8]; +extern const uint8_t ff_vc1_ttblk_codes[3][8]; +extern const uint8_t ff_vc1_ttblk_bits[3][8]; /* SUBBLKPAT tables, p93-94, reordered */ -extern const uint8_t vc1_subblkpat_codes[3][15]; -extern const uint8_t vc1_subblkpat_bits[3][15]; +extern const uint8_t ff_vc1_subblkpat_codes[3][15]; +extern const uint8_t ff_vc1_subblkpat_bits[3][15]; /* MV differential tables, p265 */ -extern const uint16_t vc1_mv_diff_codes[4][73]; -extern const uint8_t vc1_mv_diff_bits[4][73]; +extern const uint16_t ff_vc1_mv_diff_codes[4][73]; +extern const uint8_t ff_vc1_mv_diff_bits[4][73]; + +/* Interlaced frame picture MBMODE VLC tables (p. 246, p. 360) */ +extern const uint16_t ff_vc1_intfr_4mv_mbmode_codes[4][15]; +extern const uint8_t ff_vc1_intfr_4mv_mbmode_bits[4][15]; +extern const uint8_t ff_vc1_intfr_non4mv_mbmode_codes[4][9]; +extern const uint8_t ff_vc1_intfr_non4mv_mbmode_bits[4][9]; + +/* Interlaced field picture MBMODE VLC tables (p. 356 - 11.4.1, 11.4.2) */ +extern const uint8_t ff_vc1_if_mmv_mbmode_codes[8][8]; +extern const uint8_t ff_vc1_if_mmv_mbmode_bits[8][8]; +extern const uint8_t ff_vc1_if_1mv_mbmode_codes[8][6]; +extern const uint8_t ff_vc1_if_1mv_mbmode_bits[8][6]; + +/* Interlaced frame/field picture MVDATA VLC tables */ +/* 1-reference tables */ +extern const uint32_t ff_vc1_1ref_mvdata_codes[4][72]; +extern const uint8_t ff_vc1_1ref_mvdata_bits[4][72]; +/* 2-reference tables */ +extern const uint32_t ff_vc1_2ref_mvdata_codes[8][126]; +extern const uint8_t ff_vc1_2ref_mvdata_bits[8][126]; /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */ /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */ -extern const int8_t vc1_normal_zz[64]; -extern const int8_t vc1_horizontal_zz [64]; -extern const int8_t vc1_vertical_zz [64]; -extern const int8_t vc1_simple_progressive_8x8_zz [64]; -extern const int8_t vc1_simple_progressive_8x4_zz [32]; -extern const int8_t vc1_simple_progressive_4x8_zz [32]; -extern const int8_t vc1_simple_progressive_4x4_zz [16]; -extern const int8_t vc1_adv_progressive_8x4_zz [32]; -extern const int8_t vc1_adv_progressive_4x8_zz [32]; -extern const int8_t vc1_adv_interlaced_8x8_zz [64]; -extern const int8_t vc1_adv_interlaced_8x4_zz [32]; -extern const int8_t vc1_adv_interlaced_4x8_zz [32]; -extern const int8_t vc1_adv_interlaced_4x4_zz [16]; +extern const int8_t ff_vc1_simple_progressive_4x4_zz [16]; +extern const int8_t ff_vc1_adv_progressive_8x4_zz [32]; +extern const int8_t ff_vc1_adv_progressive_4x8_zz [32]; +extern const int8_t ff_vc1_adv_interlaced_8x8_zz [64]; +extern const int8_t ff_vc1_adv_interlaced_8x4_zz [32]; +extern const int8_t ff_vc1_adv_interlaced_4x8_zz [32]; +extern const int8_t ff_vc1_adv_interlaced_4x4_zz [16]; +extern const int8_t ff_vc1_intra_horz_8x8_zz [64]; +extern const int8_t ff_vc1_intra_vert_8x8_zz [64]; /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */ -extern const int32_t vc1_dqscale[63]; +extern const int32_t ff_vc1_dqscale[63]; -#endif /* VC1DATA_H */ +/* P Interlaced field picture MV predictor scaling values (Table 114) */ +extern const uint16_t vc1_field_mvpred_scales[2][7][4]; +/* B Interlaced field picture backward MV predictor scaling values for first field (Table 115) */ +extern const uint16_t vc1_b_field_mvpred_scales[7][4]; +#endif /* AVCODEC_VC1DATA_H */