Skip to content
Snippets Groups Projects
mpeg12.h 2.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * MPEG1/2 common code
     * Copyright (c) 2007 Aurelien Jacobs <aurel@gnuage.org>
     *
    
     * This file is part of Libav.
    
     * 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.
     *
    
     * 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 Libav; if not, write to the Free Software
    
     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     */
    
    
    #ifndef AVCODEC_MPEG12_H
    #define AVCODEC_MPEG12_H
    
    
    #include "mpegvideo.h"
    
    
    #define DC_VLC_BITS 9
    #define TEX_VLC_BITS 9
    
    
    extern VLC ff_dc_lum_vlc;
    extern VLC ff_dc_chroma_vlc;
    
    typedef struct Mpeg1Context {
        MpegEncContext mpeg_enc_ctx;
        int mpeg_enc_ctx_allocated; /* true if decoding context allocated */
        int repeat_field; /* true if we must repeat the field */
        AVPanScan pan_scan;              /**< some temporary storage for the panscan */
        int slice_count;
        int swap_uv;//indicate VCR2
        int save_aspect_info;
        int save_width, save_height, save_progressive_seq;
        AVRational frame_rate_ext;       ///< MPEG-2 specific framerate modificator
        int sync;                        ///< Did we reach a sync point like a GOP/SEQ/KEYFrame?
    
        int closed_gop;                  ///< GOP is closed
    
        int extradata_decoded;
    
    extern uint8_t ff_mpeg12_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3];
    
    void ff_mpeg12_common_init(MpegEncContext *s);
    
    
    static inline int decode_dc(GetBitContext *gb, int component)
    {
        int code, diff;
    
        if (component == 0) {
    
            code = get_vlc2(gb, ff_dc_lum_vlc.table, DC_VLC_BITS, 2);
    
            code = get_vlc2(gb, ff_dc_chroma_vlc.table, DC_VLC_BITS, 2);
    
        }
        if (code < 0){
            av_log(NULL, AV_LOG_ERROR, "invalid dc code at\n");
            return 0xffff;
        }
        if (code == 0) {
            diff = 0;
        } else {
            diff = get_xbits(gb, code);
        }
        return diff;
    }
    
    int ff_mpeg1_decode_block_intra(MpegEncContext *s, int16_t *block, int n);
    
    #endif /* AVCODEC_MPEG12_H */