yading@10: /* yading@10: * Common Ut Video header yading@10: * Copyright (c) 2011 Konstantin Shishkov 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: #ifndef AVCODEC_UTVIDEO_H yading@10: #define AVCODEC_UTVIDEO_H yading@10: yading@10: /** yading@10: * @file yading@10: * Common Ut Video header yading@10: */ yading@10: yading@10: #include "libavutil/common.h" yading@10: #include "avcodec.h" yading@10: #include "dsputil.h" yading@10: yading@10: enum { yading@10: PRED_NONE = 0, yading@10: PRED_LEFT, yading@10: PRED_GRADIENT, yading@10: PRED_MEDIAN, yading@10: }; yading@10: yading@10: enum { yading@10: COMP_NONE = 0, yading@10: COMP_HUFF, yading@10: }; yading@10: yading@10: /* yading@10: * "Original format" markers. yading@10: * Based on values gotten from the official VFW encoder. yading@10: * They are not used during decoding, but they do have yading@10: * an informative role on seeing what was input yading@10: * to the encoder. yading@10: */ yading@10: enum { yading@10: UTVIDEO_RGB = MKTAG(0x00, 0x00, 0x01, 0x18), yading@10: UTVIDEO_RGBA = MKTAG(0x00, 0x00, 0x02, 0x18), yading@10: UTVIDEO_420 = MKTAG('Y', 'V', '1', '2'), yading@10: UTVIDEO_422 = MKTAG('Y', 'U', 'Y', '2'), yading@10: }; yading@10: yading@10: /* Mapping of libavcodec prediction modes to Ut Video's */ yading@10: extern const int ff_ut_pred_order[5]; yading@10: yading@10: /* Order of RGB(A) planes in Ut Video */ yading@10: extern const int ff_ut_rgb_order[4]; yading@10: yading@10: typedef struct UtvideoContext { yading@10: AVCodecContext *avctx; yading@10: DSPContext dsp; yading@10: yading@10: uint32_t frame_info_size, flags, frame_info; yading@10: int planes; yading@10: int slices; yading@10: int compression; yading@10: int interlaced; yading@10: int frame_pred; yading@10: yading@10: int slice_stride; yading@10: uint8_t *slice_bits, *slice_buffer[4]; yading@10: int slice_bits_size; yading@10: } UtvideoContext; yading@10: yading@10: typedef struct HuffEntry { yading@10: uint8_t sym; yading@10: uint8_t len; yading@10: uint32_t code; yading@10: } HuffEntry; yading@10: yading@10: /* Compare huffman tree nodes */ yading@10: int ff_ut_huff_cmp_len(const void *a, const void *b); yading@10: yading@10: #endif /* AVCODEC_UTVIDEO_H */