FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
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 FFmpeg.
6
*
7
* FFmpeg 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
* FFmpeg 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 FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
/**
23
* @file
24
* RV30 and RV40 decoder common data declarations
25
*/
26
27
#ifndef AVCODEC_RV34_H
28
#define AVCODEC_RV34_H
29
30
#include "
avcodec.h
"
31
#include "
mpegvideo.h
"
32
33
#include "
h264pred.h
"
34
#include "
rv34dsp.h
"
35
36
#define MB_TYPE_SEPARATE_DC 0x01000000
37
#define IS_SEPARATE_DC(a) ((a) & MB_TYPE_SEPARATE_DC)
38
39
/**
40
* RV30 and RV40 Macroblock types
41
*/
42
enum
RV40BlockTypes
{
43
RV34_MB_TYPE_INTRA
,
///< Intra macroblock
44
RV34_MB_TYPE_INTRA16x16
,
///< Intra macroblock with DCs in a separate 4x4 block
45
RV34_MB_P_16x16
,
///< P-frame macroblock, one motion frame
46
RV34_MB_P_8x8
,
///< P-frame macroblock, 8x8 motion compensation partitions
47
RV34_MB_B_FORWARD
,
///< B-frame macroblock, forward prediction
48
RV34_MB_B_BACKWARD
,
///< B-frame macroblock, backward prediction
49
RV34_MB_SKIP
,
///< Skipped block
50
RV34_MB_B_DIRECT
,
///< Bidirectionally predicted B-frame macroblock, no motion vectors
51
RV34_MB_P_16x8
,
///< P-frame macroblock, 16x8 motion compensation partitions
52
RV34_MB_P_8x16
,
///< P-frame macroblock, 8x16 motion compensation partitions
53
RV34_MB_B_BIDIR
,
///< Bidirectionally predicted B-frame macroblock, two motion vectors
54
RV34_MB_P_MIX16x16
,
///< P-frame macroblock with DCs in a separate 4x4 block, one motion vector
55
RV34_MB_TYPES
56
};
57
58
/**
59
* VLC tables used by the decoder
60
*
61
* Intra frame VLC sets do not contain some of those tables.
62
*/
63
typedef
struct
RV34VLC
{
64
VLC
cbppattern
[2];
///< VLCs used for pattern of coded block patterns decoding
65
VLC
cbp
[2][4];
///< VLCs used for coded block patterns decoding
66
VLC
first_pattern
[4];
///< VLCs used for decoding coefficients in the first subblock
67
VLC
second_pattern
[2];
///< VLCs used for decoding coefficients in the subblocks 2 and 3
68
VLC
third_pattern
[2];
///< VLCs used for decoding coefficients in the last subblock
69
VLC
coefficient
;
///< VLCs used for decoding big coefficients
70
}
RV34VLC
;
71
72
/** essential slice information */
73
typedef
struct
SliceInfo
{
74
int
type
;
///< slice type (intra, inter)
75
int
quant
;
///< quantizer used for this slice
76
int
vlc_set
;
///< VLCs used for this slice
77
int
start
,
end
;
///< start and end macroblocks of the slice
78
int
width
;
///< coded width
79
int
height
;
///< coded height
80
int
pts
;
///< frame timestamp
81
}
SliceInfo
;
82
83
/** decoder context */
84
typedef
struct
RV34DecContext
{
85
MpegEncContext
s
;
86
RV34DSPContext
rdsp
;
87
int8_t *
intra_types_hist
;
///< old block types, used for prediction
88
int8_t *
intra_types
;
///< block types
89
int
intra_types_stride
;
///< block types array stride
90
const
uint8_t
*
luma_dc_quant_i
;
///< luma subblock DC quantizer for intraframes
91
const
uint8_t
*
luma_dc_quant_p
;
///< luma subblock DC quantizer for interframes
92
93
RV34VLC
*
cur_vlcs
;
///< VLC set used for current frame decoding
94
H264PredContext
h
;
///< functions for 4x4 and 16x16 intra block prediction
95
SliceInfo
si
;
///< current slice information
96
97
int
*
mb_type
;
///< internal macroblock types
98
int
block_type
;
///< current block type
99
int
luma_vlc
;
///< which VLC set will be used for decoding of luma blocks
100
int
chroma_vlc
;
///< which VLC set will be used for decoding of chroma blocks
101
int
is16
;
///< current block has additional 16x16 specific features or not
102
int
dmv
[4][2];
///< differential motion vectors for the current macroblock
103
104
int
rv30
;
///< indicates which RV variasnt is currently decoded
105
int
max_rpr
;
106
107
int
cur_pts
,
last_pts
,
next_pts
;
108
int
scaled_weight
;
109
int
weight1
,
weight2
;
///< B frame distance fractions (0.14) used in motion compensation
110
int
mv_weight1
,
mv_weight2
;
111
112
uint16_t *
cbp_luma
;
///< CBP values for luma subblocks
113
uint8_t
*
cbp_chroma
;
///< CBP values for chroma subblocks
114
uint16_t *
deblock_coefs
;
///< deblock coefficients for each macroblock
115
116
/** 8x8 block available flags (for MV prediction) */
117
DECLARE_ALIGNED
(8, uint32_t,
avail_cache
)[3*4];
118
119
/** temporary blocks for RV4 weighted MC */
120
uint8_t
*
tmp_b_block_y
[2];
121
uint8_t
*
tmp_b_block_uv
[4];
122
uint8_t
*
tmp_b_block_base
;
123
124
int (*
parse_slice_header
)(
struct
RV34DecContext
*
r
,
GetBitContext
*gb,
SliceInfo
*
si
);
125
int (*
decode_mb_info
)(
struct
RV34DecContext
*
r
);
126
int (*
decode_intra_types
)(
struct
RV34DecContext
*
r
,
GetBitContext
*gb, int8_t *dst);
127
void
(*
loop_filter
)(
struct
RV34DecContext
*
r
,
int
row);
128
}
RV34DecContext
;
129
130
/**
131
* common decoding functions
132
*/
133
int
ff_rv34_get_start_offset
(
GetBitContext
*gb,
int
blocks);
134
int
ff_rv34_decode_init
(
AVCodecContext
*avctx);
135
int
ff_rv34_decode_frame
(
AVCodecContext
*avctx,
void
*
data
,
int
*got_frame,
AVPacket
*avpkt);
136
int
ff_rv34_decode_end
(
AVCodecContext
*avctx);
137
int
ff_rv34_decode_init_thread_copy
(
AVCodecContext
*avctx);
138
int
ff_rv34_decode_update_thread_context
(
AVCodecContext
*dst,
const
AVCodecContext
*
src
);
139
140
#endif
/* AVCODEC_RV34_H */
Generated on Sun Mar 23 2014 23:50:02 for FFmpeg by
1.8.2