| /* |
| * This file is part of FFmpeg. |
| * |
| * FFmpeg 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, |
| * 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 |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #ifndef AVCODEC_INTRAX8_H |
| #define AVCODEC_INTRAX8_H |
| |
| #include "blockdsp.h" |
| #include "get_bits.h" |
| #include "idctdsp.h" |
| #include "intrax8dsp.h" |
| #include "wmv2dsp.h" |
| #include "mpegpicture.h" |
| |
| typedef struct IntraX8Context { |
| VLC *j_ac_vlc[4]; // they point to the static j_mb_vlc |
| VLC *j_orient_vlc; |
| VLC *j_dc_vlc[3]; |
| |
| int use_quant_matrix; |
| |
| // set by ff_intrax8_common_init |
| uint8_t *prediction_table; // 2 * (mb_w * 2) |
| ScanTable scantable[3]; |
| WMV2DSPContext wdsp; |
| uint8_t idct_permutation[64]; |
| AVCodecContext *avctx; |
| int *block_last_index; ///< last nonzero coefficient in block |
| int16_t (*block)[64]; |
| |
| // set by the caller codec |
| IntraX8DSPContext dsp; |
| IDCTDSPContext idsp; |
| BlockDSPContext bdsp; |
| int quant; |
| int dquant; |
| int qsum; |
| int loopfilter; |
| AVFrame *frame; |
| GetBitContext *gb; |
| |
| // calculated per frame |
| int quant_dc_chroma; |
| int divide_quant_dc_luma; |
| int divide_quant_dc_chroma; |
| uint8_t *dest[3]; |
| uint8_t scratchpad[42]; // size of the block is fixed (8x8 plus padding) |
| |
| // changed per block |
| int edges; |
| int flat_dc; |
| int predicted_dc; |
| int raw_orient; |
| int chroma_orient; |
| int orient; |
| int est_run; |
| |
| // block props |
| int mb_x, mb_y; |
| int mb_width, mb_height; |
| } IntraX8Context; |
| |
| /** |
| * Initialize IntraX8 frame decoder. |
| * @param avctx pointer to AVCodecContext |
| * @param w pointer to IntraX8Context |
| * @param idsp pointer to IDCTDSPContext |
| * @param block pointer to block array |
| * @param block_last_index pointer to index array |
| * @param mb_width macroblock width |
| * @param mb_height macroblock height |
| * @return 0 on success, a negative AVERROR value on error |
| */ |
| int ff_intrax8_common_init(AVCodecContext *avctx, |
| IntraX8Context *w, IDCTDSPContext *idsp, |
| int16_t (*block)[64], |
| int block_last_index[12], |
| int mb_width, int mb_height); |
| |
| /** |
| * Destroy IntraX8 frame structure. |
| * @param w pointer to IntraX8Context |
| */ |
| void ff_intrax8_common_end(IntraX8Context *w); |
| |
| /** |
| * Decode single IntraX8 frame. |
| * lowres decoding is theoretically impossible. |
| * @param w pointer to IntraX8Context |
| * @param pict the output Picture containing an AVFrame |
| * @param gb open bitstream reader |
| * @param mb_x pointer to the x coordinate of the current macroblock |
| * @param mb_y pointer to the y coordinate of the current macroblock |
| * @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1. |
| * @param quant_offset offset away from zero |
| * @param loopfilter enable filter after decoding a block |
| */ |
| int ff_intrax8_decode_picture(IntraX8Context *w, Picture *pict, |
| GetBitContext *gb, int *mb_x, int *mb_y, |
| int quant, int halfpq, |
| int loopfilter, int lowdelay); |
| |
| #endif /* AVCODEC_INTRAX8_H */ |