rv34.h
Go to the documentation of this file.
1 /*
2  * RV30/40 decoder common data declarations
3  * Copyright (c) 2007 Mike Melanson, Konstantin Shishkov
4  *
5  * This file is part of Libav.
6  *
7  * Libav is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * Libav is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with Libav; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
27 #ifndef AVCODEC_RV34_H
28 #define AVCODEC_RV34_H
29 
30 #include "avcodec.h"
31 #include "dsputil.h"
32 #include "mpegvideo.h"
33 
34 #include "h264pred.h"
35 #include "rv34dsp.h"
36 
37 #define MB_TYPE_SEPARATE_DC 0x01000000
38 #define IS_SEPARATE_DC(a) ((a) & MB_TYPE_SEPARATE_DC)
39 
57 };
58 
64 typedef struct RV34VLC{
66  VLC cbp[2][4];
71 }RV34VLC;
72 
74 typedef struct SliceInfo{
75  int type;
76  int quant;
77  int vlc_set;
78  int start, end;
79  int width;
80  int height;
81  int pts;
82 }SliceInfo;
83 
85 typedef struct RV34DecContext{
89  int8_t *intra_types;
91  const uint8_t *luma_dc_quant_i;
92  const uint8_t *luma_dc_quant_p;
93 
97 
98  int *mb_type;
99  int block_type;
100  int luma_vlc;
102  int is16;
103  int dmv[4][2];
104 
105  int rv30;
106  int rpr;
107 
110 
111  uint16_t *cbp_luma;
112  uint8_t *cbp_chroma;
114 
116  DECLARE_ALIGNED(8, uint32_t, avail_cache)[3*4];
117 
119  uint8_t *tmp_b_block_y[2];
120  uint8_t *tmp_b_block_uv[4];
122 
124  int (*decode_mb_info)(struct RV34DecContext *r);
125  int (*decode_intra_types)(struct RV34DecContext *r, GetBitContext *gb, int8_t *dst);
126  void (*loop_filter)(struct RV34DecContext *r, int row);
128 
132 int ff_rv34_get_start_offset(GetBitContext *gb, int blocks);
134 int ff_rv34_decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt);
138 
139 #endif /* AVCODEC_RV34_H */