yading@10: /* yading@10: * Copyright (c) 2002-2003 Michael Niedermayer yading@10: * yading@10: * see http://www.pcisys.net/~melanson/codecs/huffyuv.txt for a description of yading@10: * the algorithm used 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: /** yading@10: * @file yading@10: * huffyuv codec for libavcodec. yading@10: */ yading@10: yading@10: #ifndef AVCODEC_HUFFYUV_H yading@10: #define AVCODEC_HUFFYUV_H yading@10: yading@10: #include yading@10: yading@10: #include "avcodec.h" yading@10: #include "dsputil.h" yading@10: #include "get_bits.h" yading@10: #include "put_bits.h" yading@10: yading@10: #define VLC_BITS 11 yading@10: yading@10: #if HAVE_BIGENDIAN yading@10: #define B 3 yading@10: #define G 2 yading@10: #define R 1 yading@10: #define A 0 yading@10: #else yading@10: #define B 0 yading@10: #define G 1 yading@10: #define R 2 yading@10: #define A 3 yading@10: #endif yading@10: yading@10: typedef enum Predictor { yading@10: LEFT = 0, yading@10: PLANE, yading@10: MEDIAN, yading@10: } Predictor; yading@10: yading@10: typedef struct HYuvContext { yading@10: AVCodecContext *avctx; yading@10: Predictor predictor; yading@10: GetBitContext gb; yading@10: PutBitContext pb; yading@10: int interlaced; yading@10: int decorrelate; yading@10: int bitstream_bpp; yading@10: int version; yading@10: int yuy2; //use yuy2 instead of 422P yading@10: int bgr32; //use bgr32 instead of bgr24 yading@10: int width, height; yading@10: int flags; yading@10: int context; yading@10: int picture_number; yading@10: int last_slice_end; yading@10: uint8_t *temp[3]; yading@10: uint64_t stats[3][256]; yading@10: uint8_t len[3][256]; yading@10: uint32_t bits[3][256]; yading@10: uint32_t pix_bgr_map[1<