1/* 2 * MPEG1/2 common code 3 * Copyright (c) 2007 Aurelien Jacobs <aurel@gnuage.org> 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#ifndef AVCODEC_MPEG12_H 23#define AVCODEC_MPEG12_H 24 25#include "mpegvideo.h" 26 27#define DC_VLC_BITS 9 28#define TEX_VLC_BITS 9 29 30static VLC dc_lum_vlc; 31static VLC dc_chroma_vlc; 32 33extern uint8_t ff_mpeg12_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3]; 34 35void ff_mpeg12_common_init(MpegEncContext *s); 36void ff_mpeg12_init_vlcs(void); 37 38static inline int decode_dc(GetBitContext *gb, int component) 39{ 40 int code, diff; 41 42 if (component == 0) { 43 code = get_vlc2(gb, dc_lum_vlc.table, DC_VLC_BITS, 2); 44 } else { 45 code = get_vlc2(gb, dc_chroma_vlc.table, DC_VLC_BITS, 2); 46 } 47 if (code < 0){ 48 av_log(NULL, AV_LOG_ERROR, "invalid dc code at\n"); 49 return 0xffff; 50 } 51 if (code == 0) { 52 diff = 0; 53 } else { 54 diff = get_xbits(gb, code); 55 } 56 return diff; 57} 58 59extern inline int ff_mpeg1_decode_block_intra(MpegEncContext *s, DCTELEM *block, int n); 60 61#endif /* AVCODEC_MPEG12_H */ 62