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
intelh263dec.c
Go to the documentation of this file.
1
/*
2
* H.263i decoder
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include "
mpegvideo.h
"
22
#include "
h263.h
"
23
24
/* don't understand why they choose a different header ! */
25
int
ff_intel_h263_decode_picture_header
(
MpegEncContext
*
s
)
26
{
27
int
format;
28
29
if
(
get_bits_left
(&s->
gb
) == 64) {
/* special dummy frames */
30
return
FRAME_SKIPPED
;
31
}
32
33
/* picture header */
34
if
(
get_bits_long
(&s->
gb
, 22) != 0x20) {
35
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Bad picture start code\n"
);
36
return
-1;
37
}
38
s->
picture_number
=
get_bits
(&s->
gb
, 8);
/* picture timestamp */
39
40
if
(
get_bits1
(&s->
gb
) != 1) {
41
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Bad marker\n"
);
42
return
-1;
/* marker */
43
}
44
if
(
get_bits1
(&s->
gb
) != 0) {
45
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Bad H263 id\n"
);
46
return
-1;
/* h263 id */
47
}
48
skip_bits1
(&s->
gb
);
/* split screen off */
49
skip_bits1
(&s->
gb
);
/* camera off */
50
skip_bits1
(&s->
gb
);
/* freeze picture release off */
51
52
format =
get_bits
(&s->
gb
, 3);
53
if
(format == 0 || format == 6) {
54
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Intel H263 free format not supported\n"
);
55
return
-1;
56
}
57
s->
h263_plus
= 0;
58
59
s->
pict_type
=
AV_PICTURE_TYPE_I
+
get_bits1
(&s->
gb
);
60
61
s->
h263_long_vectors
=
get_bits1
(&s->
gb
);
62
63
if
(
get_bits1
(&s->
gb
) != 0) {
64
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"SAC not supported\n"
);
65
return
-1;
/* SAC: off */
66
}
67
s->
obmc
=
get_bits1
(&s->
gb
);
68
s->
unrestricted_mv
= s->
obmc
|| s->
h263_long_vectors
;
69
s->
pb_frame
=
get_bits1
(&s->
gb
);
70
71
if
(format < 6) {
72
s->
width
=
ff_h263_format
[format][0];
73
s->
height
=
ff_h263_format
[format][1];
74
s->
avctx
->
sample_aspect_ratio
.
num
= 12;
75
s->
avctx
->
sample_aspect_ratio
.
den
= 11;
76
}
else
{
77
format =
get_bits
(&s->
gb
, 3);
78
if
(format == 0 || format == 7){
79
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Wrong Intel H263 format\n"
);
80
return
-1;
81
}
82
if
(
get_bits
(&s->
gb
, 2))
83
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Bad value for reserved field\n"
);
84
s->
loop_filter
=
get_bits1
(&s->
gb
) * !s->
avctx
->
lowres
;
85
if
(
get_bits1
(&s->
gb
))
86
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Bad value for reserved field\n"
);
87
if
(
get_bits1
(&s->
gb
))
88
s->
pb_frame
= 2;
89
if
(
get_bits
(&s->
gb
, 5))
90
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Bad value for reserved field\n"
);
91
if
(
get_bits
(&s->
gb
, 5) != 1)
92
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Invalid marker\n"
);
93
}
94
if
(format == 6){
95
int
ar =
get_bits
(&s->
gb
, 4);
96
skip_bits
(&s->
gb
, 9);
// display width
97
skip_bits1
(&s->
gb
);
98
skip_bits
(&s->
gb
, 9);
// display height
99
if
(ar == 15){
100
s->
avctx
->
sample_aspect_ratio
.
num
=
get_bits
(&s->
gb
, 8);
// aspect ratio - width
101
s->
avctx
->
sample_aspect_ratio
.
den
=
get_bits
(&s->
gb
, 8);
// aspect ratio - height
102
}
else
{
103
s->
avctx
->
sample_aspect_ratio
=
ff_h263_pixel_aspect
[ar];
104
}
105
if
(s->
avctx
->
sample_aspect_ratio
.
num
== 0)
106
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Invalid aspect ratio.\n"
);
107
}
108
109
s->
chroma_qscale
= s->
qscale
=
get_bits
(&s->
gb
, 5);
110
skip_bits1
(&s->
gb
);
/* Continuous Presence Multipoint mode: off */
111
112
if
(s->
pb_frame
){
113
skip_bits
(&s->
gb
, 3);
//temporal reference for B-frame
114
skip_bits
(&s->
gb
, 2);
//dbquant
115
}
116
117
/* PEI */
118
if
(
skip_1stop_8data_bits
(&s->
gb
) < 0)
119
return
AVERROR_INVALIDDATA
;
120
s->
f_code
= 1;
121
122
s->
y_dc_scale_table
=
123
s->
c_dc_scale_table
=
ff_mpeg1_dc_scale_table
;
124
125
ff_h263_show_pict_info
(s);
126
127
return
0;
128
}
129
130
AVCodec
ff_h263i_decoder
= {
131
.
name
=
"h263i"
,
132
.long_name =
NULL_IF_CONFIG_SMALL
(
"Intel H.263"
),
133
.type =
AVMEDIA_TYPE_VIDEO
,
134
.id =
AV_CODEC_ID_H263I
,
135
.priv_data_size =
sizeof
(
MpegEncContext
),
136
.
init
=
ff_h263_decode_init
,
137
.close =
ff_h263_decode_end
,
138
.
decode
=
ff_h263_decode_frame
,
139
.capabilities =
CODEC_CAP_DRAW_HORIZ_BAND
|
CODEC_CAP_DR1
,
140
.pix_fmts = (
const
enum
AVPixelFormat
[]) {
141
AV_PIX_FMT_YUV420P
,
142
AV_PIX_FMT_NONE
143
},
144
};
Generated on Sun Mar 8 2015 02:34:54 for FFmpeg by
1.8.2