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 Jul 20 2014 23:05:49 for FFmpeg by
1.8.2