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
rpr
;
///< one field size in RV30 slice header
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 Sat Jan 25 2014 19:51:54 for FFmpeg by
1.8.2