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