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