FFmpeg
intrax8.h
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #ifndef AVCODEC_INTRAX8_H
20 #define AVCODEC_INTRAX8_H
21 
22 #include "blockdsp.h"
23 #include "get_bits.h"
24 #include "idctdsp.h"
25 #include "intrax8dsp.h"
26 #include "wmv2dsp.h"
27 #include "mpegpicture.h"
28 
29 typedef struct IntraX8Context {
30  VLC *j_ac_vlc[4]; // they point to the static j_mb_vlc
33 
35 
36  // set by ff_intrax8_common_init
37  uint8_t *prediction_table; // 2 * (mb_w * 2)
40  uint8_t idct_permutation[64];
42  int *block_last_index; ///< last nonzero coefficient in block
43  int16_t (*block)[64];
44 
45  // set by the caller codec
49  int quant;
50  int dquant;
51  int qsum;
55 
56  // calculated per frame
60  uint8_t *dest[3];
61  uint8_t scratchpad[42]; // size of the block is fixed (8x8 plus padding)
62 
63  // changed per block
64  int edges;
65  int flat_dc;
69  int orient;
70  int est_run;
71 
72  // block props
73  int mb_x, mb_y;
76 
77 /**
78  * Initialize IntraX8 frame decoder.
79  * @param avctx pointer to AVCodecContext
80  * @param w pointer to IntraX8Context
81  * @param idsp pointer to IDCTDSPContext
82  * @param block pointer to block array
83  * @param block_last_index pointer to index array
84  * @param mb_width macroblock width
85  * @param mb_height macroblock height
86  * @return 0 on success, a negative AVERROR value on error
87  */
90  int16_t (*block)[64],
91  int block_last_index[12],
92  int mb_width, int mb_height);
93 
94 /**
95  * Destroy IntraX8 frame structure.
96  * @param w pointer to IntraX8Context
97  */
99 
100 /**
101  * Decode single IntraX8 frame.
102  * lowres decoding is theoretically impossible.
103  * @param w pointer to IntraX8Context
104  * @param pict the output Picture containing an AVFrame
105  * @param gb open bitstream reader
106  * @param mb_x pointer to the x coordinate of the current macroblock
107  * @param mb_y pointer to the y coordinate of the current macroblock
108  * @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1.
109  * @param quant_offset offset away from zero
110  * @param loopfilter enable filter after decoding a block
111  */
113  GetBitContext *gb, int *mb_x, int *mb_y,
114  int quant, int halfpq,
115  int loopfilter, int lowdelay);
116 
117 #endif /* AVCODEC_INTRAX8_H */
IntraX8Context::frame
AVFrame * frame
Definition: intrax8.h:53
blockdsp.h
IntraX8DSPContext
Definition: intrax8dsp.h:25
IntraX8Context::dsp
IntraX8DSPContext dsp
Definition: intrax8.h:46
IntraX8Context::scantable
ScanTable scantable[3]
Definition: intrax8.h:38
IntraX8Context::quant_dc_chroma
int quant_dc_chroma
Definition: intrax8.h:57
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:317
w
uint8_t w
Definition: llviddspenc.c:38
IntraX8Context::gb
GetBitContext * gb
Definition: intrax8.h:54
Picture
Picture.
Definition: mpegpicture.h:45
IntraX8Context::divide_quant_dc_luma
int divide_quant_dc_luma
Definition: intrax8.h:58
BlockDSPContext
Definition: blockdsp.h:34
intrax8dsp.h
IntraX8Context::wdsp
WMV2DSPContext wdsp
Definition: intrax8.h:39
IntraX8Context::prediction_table
uint8_t * prediction_table
Definition: intrax8.h:37
IntraX8Context::orient
int orient
Definition: intrax8.h:69
IntraX8Context::raw_orient
int raw_orient
Definition: intrax8.h:67
IntraX8Context::qsum
int qsum
Definition: intrax8.h:51
IntraX8Context::idsp
IDCTDSPContext idsp
Definition: intrax8.h:47
GetBitContext
Definition: get_bits.h:62
IntraX8Context::est_run
int est_run
Definition: intrax8.h:70
IntraX8Context::loopfilter
int loopfilter
Definition: intrax8.h:52
quant
static int quant(float coef, const float Q, const float rounding)
Quantize one coefficient.
Definition: aacenc_utils.h:59
IntraX8Context::divide_quant_dc_chroma
int divide_quant_dc_chroma
Definition: intrax8.h:59
get_bits.h
IntraX8Context
Definition: intrax8.h:29
IntraX8Context::predicted_dc
int predicted_dc
Definition: intrax8.h:66
wmv2dsp.h
IntraX8Context::dquant
int dquant
Definition: intrax8.h:50
IntraX8Context::chroma_orient
int chroma_orient
Definition: intrax8.h:68
IntraX8Context::avctx
AVCodecContext * avctx
Definition: intrax8.h:41
ff_intrax8_common_end
void ff_intrax8_common_end(IntraX8Context *w)
Destroy IntraX8 frame structure.
Definition: intrax8.c:734
IntraX8Context::scratchpad
uint8_t scratchpad[42]
Definition: intrax8.h:61
IntraX8Context::flat_dc
int flat_dc
Definition: intrax8.h:65
IntraX8Context::block
int16_t(* block)[64]
Definition: intrax8.h:43
IntraX8Context::j_dc_vlc
VLC * j_dc_vlc[3]
Definition: intrax8.h:32
mpegpicture.h
IntraX8Context::edges
int edges
Definition: intrax8.h:64
IntraX8Context::block_last_index
int * block_last_index
last nonzero coefficient in block
Definition: intrax8.h:42
WMV2DSPContext
Definition: wmv2dsp.h:26
IntraX8Context::dest
uint8_t * dest[3]
Definition: intrax8.h:60
ff_intrax8_decode_picture
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)
Decode single IntraX8 frame.
Definition: intrax8.c:739
IntraX8Context::mb_height
int mb_height
Definition: intrax8.h:74
IntraX8Context::j_orient_vlc
VLC * j_orient_vlc
Definition: intrax8.h:31
IntraX8Context::quant
int quant
Definition: intrax8.h:49
idctdsp.h
IntraX8Context::idct_permutation
uint8_t idct_permutation[64]
Definition: intrax8.h:40
IDCTDSPContext
Definition: idctdsp.h:53
IntraX8Context::use_quant_matrix
int use_quant_matrix
Definition: intrax8.h:34
AVCodecContext
main external API structure.
Definition: avcodec.h:383
VLC
Definition: vlc.h:26
IntraX8Context::mb_y
int mb_y
Definition: intrax8.h:73
IntraX8Context::mb_width
int mb_width
Definition: intrax8.h:74
IntraX8Context::j_ac_vlc
VLC * j_ac_vlc[4]
Definition: intrax8.h:30
ScanTable
Scantable.
Definition: idctdsp.h:31
ff_intrax8_common_init
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)
Initialize IntraX8 frame decoder.
Definition: intrax8.c:694
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
IntraX8Context::bdsp
BlockDSPContext bdsp
Definition: intrax8.h:48
IntraX8Context::mb_x
int mb_x
Definition: intrax8.h:73