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
h261dec.c
Go to the documentation of this file.
1
/*
2
* H261 decoder
3
* Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
4
* Copyright (c) 2004 Maarten Daniels
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
/**
24
* @file
25
* H.261 decoder.
26
*/
27
28
#include "
libavutil/avassert.h
"
29
#include "
avcodec.h
"
30
#include "
mpeg_er.h
"
31
#include "
mpegutils.h
"
32
#include "
mpegvideo.h
"
33
#include "
h263.h
"
34
#include "
h261.h
"
35
#include "
internal.h
"
36
37
#define H261_MBA_VLC_BITS 9
38
#define H261_MTYPE_VLC_BITS 6
39
#define H261_MV_VLC_BITS 7
40
#define H261_CBP_VLC_BITS 9
41
#define TCOEFF_VLC_BITS 9
42
#define MBA_STUFFING 33
43
#define MBA_STARTCODE 34
44
45
static
VLC
h261_mba_vlc
;
46
static
VLC
h261_mtype_vlc
;
47
static
VLC
h261_mv_vlc
;
48
static
VLC
h261_cbp_vlc
;
49
50
static
av_cold
void
h261_decode_init_vlc
(
H261Context
*h)
51
{
52
static
int
done = 0;
53
54
if
(!done) {
55
done = 1;
56
INIT_VLC_STATIC
(&h261_mba_vlc,
H261_MBA_VLC_BITS
, 35,
57
ff_h261_mba_bits
, 1, 1,
58
ff_h261_mba_code
, 1, 1, 662);
59
INIT_VLC_STATIC
(&h261_mtype_vlc,
H261_MTYPE_VLC_BITS
, 10,
60
ff_h261_mtype_bits
, 1, 1,
61
ff_h261_mtype_code
, 1, 1, 80);
62
INIT_VLC_STATIC
(&h261_mv_vlc,
H261_MV_VLC_BITS
, 17,
63
&
ff_h261_mv_tab
[0][1], 2, 1,
64
&
ff_h261_mv_tab
[0][0], 2, 1, 144);
65
INIT_VLC_STATIC
(&h261_cbp_vlc,
H261_CBP_VLC_BITS
, 63,
66
&
ff_h261_cbp_tab
[0][1], 2, 1,
67
&
ff_h261_cbp_tab
[0][0], 2, 1, 512);
68
INIT_VLC_RL
(
ff_h261_rl_tcoeff
, 552);
69
}
70
}
71
72
static
av_cold
int
h261_decode_init
(
AVCodecContext
*avctx)
73
{
74
H261Context
*h = avctx->
priv_data
;
75
MpegEncContext
*
const
s
= &h->
s
;
76
77
// set defaults
78
ff_MPV_decode_defaults
(s);
79
s->
avctx
= avctx;
80
s->
width
= s->
avctx
->
coded_width
;
81
s->
height
= s->
avctx
->
coded_height
;
82
s->
codec_id
= s->
avctx
->
codec
->
id
;
83
s->
out_format
=
FMT_H261
;
84
s->
low_delay
= 1;
85
avctx->
pix_fmt
=
AV_PIX_FMT_YUV420P
;
86
s->
codec_id
= avctx->
codec
->
id
;
87
88
ff_h261_common_init
();
89
h261_decode_init_vlc
(h);
90
91
h->
gob_start_code_skipped
= 0;
92
93
return
0;
94
}
95
96
/**
97
* Decode the group of blocks header or slice header.
98
* @return <0 if an error occurred
99
*/
100
static
int
h261_decode_gob_header
(
H261Context
*h)
101
{
102
unsigned
int
val
;
103
MpegEncContext
*
const
s
= &h->
s
;
104
105
if
(!h->
gob_start_code_skipped
) {
106
/* Check for GOB Start Code */
107
val =
show_bits
(&s->
gb
, 15);
108
if
(val)
109
return
-1;
110
111
/* We have a GBSC */
112
skip_bits
(&s->
gb
, 16);
113
}
114
115
h->
gob_start_code_skipped
= 0;
116
117
h->
gob_number
=
get_bits
(&s->
gb
, 4);
/* GN */
118
s->
qscale
=
get_bits
(&s->
gb
, 5);
/* GQUANT */
119
120
/* Check if gob_number is valid */
121
if
(s->
mb_height
== 18) {
// CIF
122
if
((h->
gob_number
<= 0) || (h->
gob_number
> 12))
123
return
-1;
124
}
else
{
// QCIF
125
if
((h->
gob_number
!= 1) && (h->
gob_number
!= 3) &&
126
(h->
gob_number
!= 5))
127
return
-1;
128
}
129
130
/* GEI */
131
if
(
skip_1stop_8data_bits
(&s->
gb
) < 0)
132
return
AVERROR_INVALIDDATA
;
133
134
if
(s->
qscale
== 0) {
135
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"qscale has forbidden 0 value\n"
);
136
if
(s->
avctx
->
err_recognition
& (
AV_EF_BITSTREAM
|
AV_EF_COMPLIANT
))
137
return
-1;
138
}
139
140
/* For the first transmitted macroblock in a GOB, MBA is the absolute
141
* address. For subsequent macroblocks, MBA is the difference between
142
* the absolute addresses of the macroblock and the last transmitted
143
* macroblock. */
144
h->
current_mba
= 0;
145
h->
mba_diff
= 0;
146
147
return
0;
148
}
149
150
/**
151
* Decode the group of blocks / video packet header.
152
* @return <0 if no resync found
153
*/
154
static
int
h261_resync
(
H261Context
*h)
155
{
156
MpegEncContext
*
const
s
= &h->
s
;
157
int
left,
ret
;
158
159
if
(h->
gob_start_code_skipped
) {
160
ret =
h261_decode_gob_header
(h);
161
if
(ret >= 0)
162
return
0;
163
}
else
{
164
if
(
show_bits
(&s->
gb
, 15) == 0) {
165
ret =
h261_decode_gob_header
(h);
166
if
(ret >= 0)
167
return
0;
168
}
169
// OK, it is not where it is supposed to be ...
170
s->
gb
= s->
last_resync_gb
;
171
align_get_bits
(&s->
gb
);
172
left =
get_bits_left
(&s->
gb
);
173
174
for
(; left > 15 + 1 + 4 + 5; left -= 8) {
175
if
(
show_bits
(&s->
gb
, 15) == 0) {
176
GetBitContext
bak = s->
gb
;
177
178
ret =
h261_decode_gob_header
(h);
179
if
(ret >= 0)
180
return
0;
181
182
s->
gb
= bak;
183
}
184
skip_bits
(&s->
gb
, 8);
185
}
186
}
187
188
return
-1;
189
}
190
191
/**
192
* Decode skipped macroblocks.
193
* @return 0
194
*/
195
static
int
h261_decode_mb_skipped
(
H261Context
*h,
int
mba1,
int
mba2)
196
{
197
MpegEncContext
*
const
s
= &h->
s
;
198
int
i;
199
200
s->
mb_intra
= 0;
201
202
for
(i = mba1; i < mba2; i++) {
203
int
j, xy;
204
205
s->
mb_x
= ((h->
gob_number
- 1) % 2) * 11 + i % 11;
206
s->
mb_y
= ((h->
gob_number
- 1) / 2) * 3 + i / 11;
207
xy = s->
mb_x
+ s->
mb_y
* s->
mb_stride
;
208
ff_init_block_index
(s);
209
ff_update_block_index
(s);
210
211
for
(j = 0; j < 6; j++)
212
s->
block_last_index
[j] = -1;
213
214
s->
mv_dir
=
MV_DIR_FORWARD
;
215
s->
mv_type
=
MV_TYPE_16X16
;
216
s->
current_picture
.
mb_type
[xy] =
MB_TYPE_SKIP
|
MB_TYPE_16x16
|
MB_TYPE_L0
;
217
s->
mv
[0][0][0] = 0;
218
s->
mv
[0][0][1] = 0;
219
s->
mb_skipped
= 1;
220
h->
mtype
&= ~
MB_TYPE_H261_FIL
;
221
222
ff_MPV_decode_mb
(s, s->
block
);
223
}
224
225
return
0;
226
}
227
228
static
const
int
mvmap
[17] = {
229
0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16
230
};
231
232
static
int
decode_mv_component
(
GetBitContext
*gb,
int
v
)
233
{
234
int
mv_diff =
get_vlc2
(gb, h261_mv_vlc.
table
,
H261_MV_VLC_BITS
, 2);
235
236
/* check if mv_diff is valid */
237
if
(mv_diff < 0)
238
return
v
;
239
240
mv_diff =
mvmap
[mv_diff];
241
242
if
(mv_diff && !
get_bits1
(gb))
243
mv_diff = -mv_diff;
244
245
v += mv_diff;
246
if
(v <= -16)
247
v += 32;
248
else
if
(v >= 16)
249
v -= 32;
250
251
return
v
;
252
}
253
254
/**
255
* Decode a macroblock.
256
* @return <0 if an error occurred
257
*/
258
static
int
h261_decode_block
(
H261Context
*h, int16_t *
block
,
int
n
,
int
coded)
259
{
260
MpegEncContext
*
const
s
= &h->
s
;
261
int
code,
level
, i, j,
run
;
262
RLTable
*rl = &
ff_h261_rl_tcoeff
;
263
const
uint8_t
*scan_table;
264
265
/* For the variable length encoding there are two code tables, one being
266
* used for the first transmitted LEVEL in INTER, INTER + MC and
267
* INTER + MC + FIL blocks, the second for all other LEVELs except the
268
* first one in INTRA blocks which is fixed length coded with 8 bits.
269
* NOTE: The two code tables only differ in one VLC so we handle that
270
* manually. */
271
scan_table = s->
intra_scantable
.
permutated
;
272
if
(s->
mb_intra
) {
273
/* DC coef */
274
level =
get_bits
(&s->
gb
, 8);
275
// 0 (00000000b) and -128 (10000000b) are FORBIDDEN
276
if
((level & 0x7F) == 0) {
277
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"illegal dc %d at %d %d\n"
,
278
level, s->
mb_x
, s->
mb_y
);
279
return
-1;
280
}
281
/* The code 1000 0000 is not used, the reconstruction level of 1024
282
* being coded as 1111 1111. */
283
if
(level == 255)
284
level = 128;
285
block[0] =
level
;
286
i = 1;
287
}
else
if
(coded) {
288
// Run Level Code
289
// EOB Not possible for first level when cbp is available (that's why the table is different)
290
// 0 1 1s
291
// * * 0*
292
int
check
=
show_bits
(&s->
gb
, 2);
293
i = 0;
294
if
(check & 0x2) {
295
skip_bits
(&s->
gb
, 2);
296
block[0] = (check & 0x1) ? -1 : 1;
297
i = 1;
298
}
299
}
else
{
300
i = 0;
301
}
302
if
(!coded) {
303
s->
block_last_index
[
n
] = i - 1;
304
return
0;
305
}
306
for
(;;) {
307
code =
get_vlc2
(&s->
gb
, rl->
vlc
.
table
,
TCOEFF_VLC_BITS
, 2);
308
if
(code < 0) {
309
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"illegal ac vlc code at %dx%d\n"
,
310
s->
mb_x
, s->
mb_y
);
311
return
-1;
312
}
313
if
(code == rl->
n
) {
314
/* escape */
315
/* The remaining combinations of (run, level) are encoded with a
316
* 20-bit word consisting of 6 bits escape, 6 bits run and 8 bits
317
* level. */
318
run =
get_bits
(&s->
gb
, 6);
319
level =
get_sbits
(&s->
gb
, 8);
320
}
else
if
(code == 0) {
321
break
;
322
}
else
{
323
run = rl->
table_run
[code];
324
level = rl->
table_level
[code];
325
if
(
get_bits1
(&s->
gb
))
326
level = -
level
;
327
}
328
i +=
run
;
329
if
(i >= 64) {
330
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"run overflow at %dx%d\n"
,
331
s->
mb_x
, s->
mb_y
);
332
return
-1;
333
}
334
j = scan_table[i];
335
block[j] =
level
;
336
i++;
337
}
338
s->
block_last_index
[
n
] = i - 1;
339
return
0;
340
}
341
342
static
int
h261_decode_mb
(
H261Context
*h)
343
{
344
MpegEncContext
*
const
s
= &h->
s
;
345
int
i, cbp, xy;
346
347
cbp = 63;
348
// Read mba
349
do
{
350
h->
mba_diff
=
get_vlc2
(&s->
gb
, h261_mba_vlc.
table
,
351
H261_MBA_VLC_BITS
, 2);
352
353
/* Check for slice end */
354
/* NOTE: GOB can be empty (no MB data) or exist only of MBA_stuffing */
355
if
(h->
mba_diff
==
MBA_STARTCODE
) {
// start code
356
h->
gob_start_code_skipped
= 1;
357
return
SLICE_END
;
358
}
359
}
while
(h->
mba_diff
==
MBA_STUFFING
);
// stuffing
360
361
if
(h->
mba_diff
< 0) {
362
if
(
get_bits_left
(&s->
gb
) <= 7)
363
return
SLICE_END
;
364
365
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"illegal mba at %d %d\n"
, s->
mb_x
, s->
mb_y
);
366
return
SLICE_ERROR
;
367
}
368
369
h->
mba_diff
+= 1;
370
h->
current_mba
+= h->
mba_diff
;
371
372
if
(h->
current_mba
>
MBA_STUFFING
)
373
return
SLICE_ERROR
;
374
375
s->
mb_x
= ((h->
gob_number
- 1) % 2) * 11 + ((h->
current_mba
- 1) % 11);
376
s->
mb_y
= ((h->
gob_number
- 1) / 2) * 3 + ((h->
current_mba
- 1) / 11);
377
xy = s->
mb_x
+ s->
mb_y
* s->
mb_stride
;
378
ff_init_block_index
(s);
379
ff_update_block_index
(s);
380
381
// Read mtype
382
h->
mtype
=
get_vlc2
(&s->
gb
, h261_mtype_vlc.
table
,
H261_MTYPE_VLC_BITS
, 2);
383
if
(h->
mtype
< 0) {
384
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Invalid mtype index %d\n"
,
385
h->
mtype
);
386
return
SLICE_ERROR
;
387
}
388
av_assert0
(h->
mtype
<
FF_ARRAY_ELEMS
(
ff_h261_mtype_map
));
389
h->
mtype
=
ff_h261_mtype_map
[h->
mtype
];
390
391
// Read mquant
392
if
(
IS_QUANT
(h->
mtype
))
393
ff_set_qscale
(s,
get_bits
(&s->
gb
, 5));
394
395
s->
mb_intra
=
IS_INTRA4x4
(h->
mtype
);
396
397
// Read mv
398
if
(
IS_16X16
(h->
mtype
)) {
399
/* Motion vector data is included for all MC macroblocks. MVD is
400
* obtained from the macroblock vector by subtracting the vector
401
* of the preceding macroblock. For this calculation the vector
402
* of the preceding macroblock is regarded as zero in the
403
* following three situations:
404
* 1) evaluating MVD for macroblocks 1, 12 and 23;
405
* 2) evaluating MVD for macroblocks in which MBA does not represent a difference of 1;
406
* 3) MTYPE of the previous macroblock was not MC. */
407
if
((h->
current_mba
== 1) || (h->
current_mba
== 12) ||
408
(h->
current_mba
== 23) || (h->
mba_diff
!= 1)) {
409
h->
current_mv_x
= 0;
410
h->
current_mv_y
= 0;
411
}
412
413
h->
current_mv_x
=
decode_mv_component
(&s->
gb
, h->
current_mv_x
);
414
h->
current_mv_y
=
decode_mv_component
(&s->
gb
, h->
current_mv_y
);
415
}
else
{
416
h->
current_mv_x
= 0;
417
h->
current_mv_y
= 0;
418
}
419
420
// Read cbp
421
if
(
HAS_CBP
(h->
mtype
))
422
cbp =
get_vlc2
(&s->
gb
, h261_cbp_vlc.
table
,
H261_CBP_VLC_BITS
, 2) + 1;
423
424
if
(s->
mb_intra
) {
425
s->
current_picture
.
mb_type
[xy] =
MB_TYPE_INTRA
;
426
goto
intra;
427
}
428
429
//set motion vectors
430
s->
mv_dir
=
MV_DIR_FORWARD
;
431
s->
mv_type
=
MV_TYPE_16X16
;
432
s->
current_picture
.
mb_type
[xy] =
MB_TYPE_16x16
|
MB_TYPE_L0
;
433
s->
mv
[0][0][0] = h->
current_mv_x
* 2;
// gets divided by 2 in motion compensation
434
s->
mv
[0][0][1] = h->
current_mv_y
* 2;
435
436
if
(s->
current_picture
.
motion_val
[0]) {
437
int
b_stride = 2*s->
mb_width
+ 1;
438
int
b_xy = 2 * s->
mb_x
+ (2 * s->
mb_y
) * b_stride;
439
s->
current_picture
.
motion_val
[0][b_xy][0] = s->
mv
[0][0][0];
440
s->
current_picture
.
motion_val
[0][b_xy][1] = s->
mv
[0][0][1];
441
}
442
443
intra:
444
/* decode each block */
445
if
(s->
mb_intra
||
HAS_CBP
(h->
mtype
)) {
446
s->
bdsp
.
clear_blocks
(s->
block
[0]);
447
for
(i = 0; i < 6; i++) {
448
if
(
h261_decode_block
(h, s->
block
[i], i, cbp & 32) < 0)
449
return
SLICE_ERROR
;
450
cbp += cbp;
451
}
452
}
else
{
453
for
(i = 0; i < 6; i++)
454
s->
block_last_index
[i] = -1;
455
}
456
457
ff_MPV_decode_mb
(s, s->
block
);
458
459
return
SLICE_OK
;
460
}
461
462
/**
463
* Decode the H.261 picture header.
464
* @return <0 if no startcode found
465
*/
466
static
int
h261_decode_picture_header
(
H261Context
*h)
467
{
468
MpegEncContext
*
const
s
= &h->
s
;
469
int
format, i;
470
uint32_t startcode = 0;
471
472
for
(i =
get_bits_left
(&s->
gb
); i > 24; i -= 1) {
473
startcode = ((startcode << 1) |
get_bits
(&s->
gb
, 1)) & 0x000FFFFF;
474
475
if
(startcode == 0x10)
476
break
;
477
}
478
479
if
(startcode != 0x10) {
480
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Bad picture start code\n"
);
481
return
-1;
482
}
483
484
/* temporal reference */
485
i =
get_bits
(&s->
gb
, 5);
/* picture timestamp */
486
if
(i < (s->
picture_number
& 31))
487
i += 32;
488
s->
picture_number
= (s->
picture_number
& ~31) + i;
489
490
s->
avctx
->
time_base
= (
AVRational
) { 1001, 30000 };
491
492
/* PTYPE starts here */
493
skip_bits1
(&s->
gb
);
/* split screen off */
494
skip_bits1
(&s->
gb
);
/* camera off */
495
skip_bits1
(&s->
gb
);
/* freeze picture release off */
496
497
format =
get_bits1
(&s->
gb
);
498
499
// only 2 formats possible
500
if
(format == 0) {
// QCIF
501
s->
width
= 176;
502
s->
height
= 144;
503
s->
mb_width
= 11;
504
s->
mb_height
= 9;
505
}
else
{
// CIF
506
s->
width
= 352;
507
s->
height
= 288;
508
s->
mb_width
= 22;
509
s->
mb_height
= 18;
510
}
511
512
s->
mb_num
= s->
mb_width
* s->
mb_height
;
513
514
skip_bits1
(&s->
gb
);
/* still image mode off */
515
skip_bits1
(&s->
gb
);
/* Reserved */
516
517
/* PEI */
518
if
(
skip_1stop_8data_bits
(&s->
gb
) < 0)
519
return
AVERROR_INVALIDDATA
;
520
521
/* H.261 has no I-frames, but if we pass AV_PICTURE_TYPE_I for the first
522
* frame, the codec crashes if it does not contain all I-blocks
523
* (e.g. when a packet is lost). */
524
s->
pict_type
=
AV_PICTURE_TYPE_P
;
525
526
h->
gob_number
= 0;
527
return
0;
528
}
529
530
static
int
h261_decode_gob
(
H261Context
*h)
531
{
532
MpegEncContext
*
const
s
= &h->
s
;
533
534
ff_set_qscale
(s, s->
qscale
);
535
536
/* decode mb's */
537
while
(h->
current_mba
<=
MBA_STUFFING
) {
538
int
ret
;
539
/* DCT & quantize */
540
ret =
h261_decode_mb
(h);
541
if
(ret < 0) {
542
if
(ret ==
SLICE_END
) {
543
h261_decode_mb_skipped
(h, h->
current_mba
, 33);
544
return
0;
545
}
546
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"Error at MB: %d\n"
,
547
s->
mb_x
+ s->
mb_y
* s->
mb_stride
);
548
return
-1;
549
}
550
551
h261_decode_mb_skipped
(h,
552
h->
current_mba
- h->
mba_diff
,
553
h->
current_mba
- 1);
554
}
555
556
return
-1;
557
}
558
559
/**
560
* returns the number of bytes consumed for building the current frame
561
*/
562
static
int
get_consumed_bytes
(
MpegEncContext
*
s
,
int
buf_size)
563
{
564
int
pos =
get_bits_count
(&s->
gb
) >> 3;
565
if
(pos == 0)
566
pos = 1;
// avoid infinite loops (i doubt that is needed but ...)
567
if
(pos + 10 > buf_size)
568
pos = buf_size;
// oops ;)
569
570
return
pos;
571
}
572
573
static
int
h261_decode_frame
(
AVCodecContext
*avctx,
void
*
data
,
574
int
*got_frame,
AVPacket
*avpkt)
575
{
576
const
uint8_t
*
buf
= avpkt->
data
;
577
int
buf_size = avpkt->
size
;
578
H261Context
*h = avctx->
priv_data
;
579
MpegEncContext
*
s
= &h->
s
;
580
int
ret
;
581
AVFrame
*pict =
data
;
582
583
av_dlog
(avctx,
"*****frame %d size=%d\n"
, avctx->
frame_number
, buf_size);
584
av_dlog
(avctx,
"bytes=%x %x %x %x\n"
, buf[0], buf[1], buf[2], buf[3]);
585
s->
flags
= avctx->
flags
;
586
s->
flags2
= avctx->
flags2
;
587
588
h->
gob_start_code_skipped
= 0;
589
590
retry:
591
init_get_bits
(&s->
gb
, buf, buf_size * 8);
592
593
if
(!s->
context_initialized
)
594
// we need the IDCT permutaton for reading a custom matrix
595
if
(
ff_MPV_common_init
(s) < 0)
596
return
-1;
597
598
ret =
h261_decode_picture_header
(h);
599
600
/* skip if the header was thrashed */
601
if
(ret < 0) {
602
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"header damaged\n"
);
603
return
-1;
604
}
605
606
if
(s->
width
!= avctx->
coded_width
|| s->
height
!= avctx->
coded_height
) {
607
ParseContext
pc = s->
parse_context
;
// FIXME move this demuxing hack to libavformat
608
s->
parse_context
.
buffer
= 0;
609
ff_MPV_common_end
(s);
610
s->
parse_context
= pc;
611
}
612
if
(!s->
context_initialized
) {
613
ret =
ff_set_dimensions
(avctx, s->
width
, s->
height
);
614
if
(ret < 0)
615
return
ret
;
616
617
goto
retry;
618
}
619
620
// for skipping the frame
621
s->
current_picture
.
f
->
pict_type
= s->
pict_type
;
622
s->
current_picture
.
f
->
key_frame
= s->
pict_type
==
AV_PICTURE_TYPE_I
;
623
624
if
((avctx->
skip_frame
>=
AVDISCARD_NONREF
&& s->
pict_type
==
AV_PICTURE_TYPE_B
) ||
625
(avctx->
skip_frame
>=
AVDISCARD_NONKEY
&& s->
pict_type
!=
AV_PICTURE_TYPE_I
) ||
626
avctx->
skip_frame
>=
AVDISCARD_ALL
)
627
return
get_consumed_bytes
(s, buf_size);
628
629
if
(
ff_MPV_frame_start
(s, avctx) < 0)
630
return
-1;
631
632
ff_mpeg_er_frame_start
(s);
633
634
/* decode each macroblock */
635
s->
mb_x
= 0;
636
s->
mb_y
= 0;
637
638
while
(h->
gob_number
< (s->
mb_height
== 18 ? 12 : 5)) {
639
if
(
h261_resync
(h) < 0)
640
break
;
641
h261_decode_gob
(h);
642
}
643
ff_MPV_frame_end
(s);
644
645
av_assert0
(s->
current_picture
.
f
->
pict_type
== s->
current_picture_ptr
->
f
->
pict_type
);
646
av_assert0
(s->
current_picture
.
f
->
pict_type
== s->
pict_type
);
647
648
if
((ret =
av_frame_ref
(pict, s->
current_picture_ptr
->
f
)) < 0)
649
return
ret
;
650
ff_print_debug_info
(s, s->
current_picture_ptr
, pict);
651
652
*got_frame = 1;
653
654
return
get_consumed_bytes
(s, buf_size);
655
}
656
657
static
av_cold
int
h261_decode_end
(
AVCodecContext
*avctx)
658
{
659
H261Context
*h = avctx->
priv_data
;
660
MpegEncContext
*
s
= &h->
s
;
661
662
ff_MPV_common_end
(s);
663
return
0;
664
}
665
666
AVCodec
ff_h261_decoder
= {
667
.
name
=
"h261"
,
668
.long_name =
NULL_IF_CONFIG_SMALL
(
"H.261"
),
669
.type =
AVMEDIA_TYPE_VIDEO
,
670
.id =
AV_CODEC_ID_H261
,
671
.priv_data_size =
sizeof
(
H261Context
),
672
.
init
=
h261_decode_init
,
673
.
close
=
h261_decode_end
,
674
.
decode
=
h261_decode_frame
,
675
.capabilities =
CODEC_CAP_DR1
,
676
.max_lowres = 3,
677
};
Generated on Sun Jul 20 2014 23:05:47 for FFmpeg by
1.8.2