• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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