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