FFmpeg
h261dec.c
Go to the documentation of this file.
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/mem_internal.h"
29 #include "libavutil/thread.h"
30 #include "avcodec.h"
31 #include "codec_internal.h"
32 #include "decode.h"
33 #include "get_bits.h"
34 #include "mpeg_er.h"
35 #include "mpegutils.h"
36 #include "mpegvideo.h"
37 #include "mpegvideodec.h"
38 #include "h261.h"
39 
40 #define SLICE_OK 0
41 #define SLICE_ERROR -1
42 #define SLICE_END -2 ///<end marker found
43 
44 #define H261_MBA_VLC_BITS 8
45 #define H261_MTYPE_VLC_BITS 6
46 #define H261_MV_VLC_BITS 7
47 #define H261_CBP_VLC_BITS 9
48 #define TCOEFF_VLC_BITS 9
49 #define MBA_STUFFING 33
50 #define MBA_STARTCODE 34
51 
52 static VLCElem h261_mba_vlc[540];
54 static VLCElem h261_mv_vlc[144];
55 static VLCElem h261_cbp_vlc[512];
56 
57 typedef struct H261DecContext {
59 
61 
63  int mba_diff;
67  int gob_start_code_skipped; // 1 if gob start code is already read before gob header is read
68 
69  DECLARE_ALIGNED_32(int16_t, block)[6][64];
71 
73 {
75  ff_h261_mba_bits, 1, 1,
76  ff_h261_mba_code, 1, 1, 0);
78  ff_h261_mtype_bits, 1, 1,
79  ff_h261_mtype_code, 1, 1,
80  ff_h261_mtype_map, 2, 2, 0);
82  &ff_h261_mv_tab[0][1], 2, 1,
83  &ff_h261_mv_tab[0][0], 2, 1, 0);
85  &ff_h261_cbp_tab[0][1], 2, 1,
86  &ff_h261_cbp_tab[0][0], 2, 1, 0);
88 }
89 
91 {
92  static AVOnce init_static_once = AV_ONCE_INIT;
93  H261DecContext *const h = avctx->priv_data;
94  MpegEncContext *const s = &h->s;
95  int ret;
96 
97  avctx->framerate = (AVRational) { 30000, 1001 };
98 
99  /* The H.261 analog of intra/key frames is setting the freeze picture release flag,
100  * but this does not guarantee that the frame uses intra-only encoding,
101  * so we still need to allocate dummy frames. So set pict_type to P here
102  * for all frames and override it after having decoded the frame. */
103  s->pict_type = AV_PICTURE_TYPE_P;
104 
105  // set defaults
106  ret = ff_mpv_decode_init(s, avctx);
107  if (ret < 0)
108  return ret;
109 
110  s->out_format = FMT_H261;
111  s->low_delay = 1;
112  avctx->pix_fmt = AV_PIX_FMT_YUV420P;
113 
114  ff_thread_once(&init_static_once, h261_decode_init_static);
115 
116  return 0;
117 }
118 
119 static inline void h261_init_dest(MpegEncContext *s)
120 {
121  const unsigned block_size = 8 >> s->avctx->lowres;
123  s->dest[0] += 2 * block_size;
124  s->dest[1] += block_size;
125  s->dest[2] += block_size;
126 }
127 
128 /**
129  * Decode the group of blocks header or slice header.
130  * @return <0 if an error occurred
131  */
133 {
134  unsigned int val;
135  MpegEncContext *const s = &h->s;
136 
137  if (!h->gob_start_code_skipped) {
138  /* Check for GOB Start Code */
139  val = show_bits(&h->gb, 15);
140  if (val)
141  return -1;
142 
143  /* We have a GBSC */
144  skip_bits(&h->gb, 16);
145  }
146 
147  h->gob_start_code_skipped = 0;
148 
149  h->gob_number = get_bits(&h->gb, 4); /* GN */
150  s->qscale = get_bits(&h->gb, 5); /* GQUANT */
151 
152  /* Check if gob_number is valid */
153  if (s->mb_height == 18) { // CIF
154  if ((h->gob_number <= 0) || (h->gob_number > 12))
155  return -1;
156  } else { // QCIF
157  if ((h->gob_number != 1) && (h->gob_number != 3) &&
158  (h->gob_number != 5))
159  return -1;
160  }
161 
162  /* GEI */
163  if (skip_1stop_8data_bits(&h->gb) < 0)
164  return AVERROR_INVALIDDATA;
165 
166  if (s->qscale == 0) {
167  av_log(s->avctx, AV_LOG_ERROR, "qscale has forbidden 0 value\n");
168  if (s->avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_COMPLIANT))
169  return -1;
170  s->qscale = 1;
171  }
172 
173  /* For the first transmitted macroblock in a GOB, MBA is the absolute
174  * address. For subsequent macroblocks, MBA is the difference between
175  * the absolute addresses of the macroblock and the last transmitted
176  * macroblock. */
177  h->current_mba = 0;
178  h->mba_diff = 0;
179 
180  return 0;
181 }
182 
183 /**
184  * Decode skipped macroblocks.
185  * @return 0
186  */
187 static int h261_decode_mb_skipped(H261DecContext *h, int mba1, int mba2)
188 {
189  MpegEncContext *const s = &h->s;
190  int i;
191 
192  s->mb_intra = 0;
193 
194  for (i = mba1; i < mba2; i++) {
195  int j, xy;
196 
197  s->mb_x = ((h->gob_number - 1) % 2) * 11 + i % 11;
198  s->mb_y = ((h->gob_number - 1) / 2) * 3 + i / 11;
199  xy = s->mb_x + s->mb_y * s->mb_stride;
200  h261_init_dest(s);
201 
202  for (j = 0; j < 6; j++)
203  s->block_last_index[j] = -1;
204 
205  s->mv_dir = MV_DIR_FORWARD;
206  s->mv_type = MV_TYPE_16X16;
207  s->cur_pic.mb_type[xy] = MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_FORWARD_MV;
208  s->mv[0][0][0] = 0;
209  s->mv[0][0][1] = 0;
210  s->mb_skipped = 1;
211  s->mtype &= ~MB_TYPE_H261_FIL;
212 
213  if (s->cur_pic.motion_val[0]) {
214  int b_stride = 2*s->mb_width + 1;
215  int b_xy = 2 * s->mb_x + (2 * s->mb_y) * b_stride;
216  s->cur_pic.motion_val[0][b_xy][0] = s->mv[0][0][0];
217  s->cur_pic.motion_val[0][b_xy][1] = s->mv[0][0][1];
218  }
219 
220  ff_mpv_reconstruct_mb(s, h->block);
221  }
222 
223  return 0;
224 }
225 
226 static int decode_mv_component(GetBitContext *gb, int v)
227 {
228  int mv_diff = get_vlc2(gb, h261_mv_vlc, H261_MV_VLC_BITS, 2);
229 
230  /* check if mv_diff is valid */
231  if (mv_diff < 0)
232  return v;
233 
234  if (mv_diff && get_bits1(gb))
235  mv_diff = -mv_diff;
236 
237  v += mv_diff;
238  if (v <= -16)
239  v += 32;
240  else if (v >= 16)
241  v -= 32;
242 
243  return v;
244 }
245 
246 /**
247  * Decode a macroblock.
248  * @return <0 if an error occurred
249  */
250 static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded)
251 {
252  MpegEncContext *const s = &h->s;
253  int level, i, j, run;
254  const RLTable *rl = &ff_h261_rl_tcoeff;
255  const uint8_t *scan_table;
256  const int qmul = s->qscale << 1, qadd = (s->qscale - 1) | 1;
257 
258  /* For the variable length encoding there are two code tables, one being
259  * used for the first transmitted LEVEL in INTER, INTER + MC and
260  * INTER + MC + FIL blocks, the second for all other LEVELs except the
261  * first one in INTRA blocks which is fixed length coded with 8 bits.
262  * NOTE: The two code tables only differ in one VLC so we handle that
263  * manually. */
264  scan_table = s->intra_scantable.permutated;
265  if (s->mb_intra) {
266  /* DC coef */
267  level = get_bits(&h->gb, 8);
268  // 0 (00000000b) and -128 (10000000b) are FORBIDDEN
269  if ((level & 0x7F) == 0) {
270  av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n",
271  level, s->mb_x, s->mb_y);
272  return -1;
273  }
274  /* The code 1000 0000 is not used, the reconstruction level of 1024
275  * being coded as 1111 1111. */
276  if (level == 255)
277  level = 128;
278  block[0] = level * 8;
279  i = 1;
280  } else if (coded) {
281  // Run Level Code
282  // EOB Not possible for first level when cbp is available (that's why the table is different)
283  // 0 1 1s
284  // * * 0*
285  int check = show_bits(&h->gb, 2);
286  i = 0;
287  if (check & 0x2) {
288  skip_bits(&h->gb, 2);
289  block[0] = qmul + qadd;
290  block[0] *= (check & 0x1) ? -1 : 1;
291  i = 1;
292  }
293  } else {
294  i = 0;
295  }
296  if (!coded) {
297  s->block_last_index[n] = i - 1;
298  return 0;
299  }
300  {
301  OPEN_READER(re, &h->gb);
302  i--; // offset by -1 to allow direct indexing of scan_table
303  for (;;) {
304  UPDATE_CACHE(re, &h->gb);
305  GET_RL_VLC(level, run, re, &h->gb, rl->rl_vlc[0], TCOEFF_VLC_BITS, 2, 0);
306  if (run == 66) {
307  if (level) {
308  CLOSE_READER(re, &h->gb);
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  /* escape */
314  /* The remaining combinations of (run, level) are encoded with a
315  * 20-bit word consisting of 6 bits escape, 6 bits run and 8 bits
316  * level. */
317  run = SHOW_UBITS(re, &h->gb, 6) + 1;
318  SKIP_CACHE(re, &h->gb, 6);
319  level = SHOW_SBITS(re, &h->gb, 8);
320  if (level > 0)
321  level = level * qmul + qadd;
322  else if (level < 0)
323  level = level * qmul - qadd;
324  SKIP_COUNTER(re, &h->gb, 6 + 8);
325  } else if (level == 0) {
326  break;
327  } else {
328  level = level * qmul + qadd;
329  if (SHOW_UBITS(re, &h->gb, 1))
330  level = -level;
331  SKIP_COUNTER(re, &h->gb, 1);
332  }
333  i += run;
334  if (i >= 64) {
335  CLOSE_READER(re, &h->gb);
336  av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d\n",
337  s->mb_x, s->mb_y);
338  return -1;
339  }
340  j = scan_table[i];
341  block[j] = level;
342  }
343  CLOSE_READER(re, &h->gb);
344  }
345  s->block_last_index[n] = i;
346  return 0;
347 }
348 
350 {
351  MpegEncContext *const s = &h->s;
352  int i, cbp, xy;
353 
354  cbp = 63;
355  // Read mba
356  do {
357  h->mba_diff = get_vlc2(&h->gb, h261_mba_vlc,
358  H261_MBA_VLC_BITS, 2);
359 
360  /* Check for slice end */
361  /* NOTE: GOB can be empty (no MB data) or exist only of MBA_stuffing */
362  if (h->mba_diff == MBA_STARTCODE) { // start code
363  h->gob_start_code_skipped = 1;
364  return SLICE_END;
365  }
366  } while (h->mba_diff == MBA_STUFFING); // stuffing
367 
368  if (h->mba_diff < 0) {
369  if (get_bits_left(&h->gb) <= 7)
370  return SLICE_END;
371 
372  av_log(s->avctx, AV_LOG_ERROR, "illegal mba at %d %d\n", s->mb_x, s->mb_y);
373  return SLICE_ERROR;
374  }
375 
376  h->mba_diff += 1;
377  h->current_mba += h->mba_diff;
378 
379  if (h->current_mba > MBA_STUFFING)
380  return SLICE_ERROR;
381 
382  s->mb_x = ((h->gob_number - 1) % 2) * 11 + ((h->current_mba - 1) % 11);
383  s->mb_y = ((h->gob_number - 1) / 2) * 3 + ((h->current_mba - 1) / 11);
384  xy = s->mb_x + s->mb_y * s->mb_stride;
385  h261_init_dest(s);
386 
387  // Read mtype
388  s->mtype = get_vlc2(&h->gb, h261_mtype_vlc, H261_MTYPE_VLC_BITS, 2);
389  if (s->mtype < 0) {
390  av_log(s->avctx, AV_LOG_ERROR, "Invalid mtype index\n");
391  return SLICE_ERROR;
392  }
393 
394  // Read mquant
395  if (IS_QUANT(s->mtype)) {
396  s->qscale = get_bits(&h->gb, 5);
397  if (!s->qscale)
398  s->qscale = 1;
399  }
400 
401  s->mb_intra = IS_INTRA4x4(s->mtype);
402 
403  // Read mv
404  if (IS_16X16(s->mtype)) {
405  /* Motion vector data is included for all MC macroblocks. MVD is
406  * obtained from the macroblock vector by subtracting the vector
407  * of the preceding macroblock. For this calculation the vector
408  * of the preceding macroblock is regarded as zero in the
409  * following three situations:
410  * 1) evaluating MVD for macroblocks 1, 12 and 23;
411  * 2) evaluating MVD for macroblocks in which MBA does not represent a difference of 1;
412  * 3) MTYPE of the previous macroblock was not MC. */
413  if ((h->current_mba == 1) || (h->current_mba == 12) ||
414  (h->current_mba == 23) || (h->mba_diff != 1)) {
415  h->current_mv_x = 0;
416  h->current_mv_y = 0;
417  }
418 
419  h->current_mv_x = decode_mv_component(&h->gb, h->current_mv_x);
420  h->current_mv_y = decode_mv_component(&h->gb, h->current_mv_y);
421  } else {
422  h->current_mv_x = 0;
423  h->current_mv_y = 0;
424  }
425 
426  // Read cbp
427  if (HAS_CBP(s->mtype))
428  cbp = get_vlc2(&h->gb, h261_cbp_vlc, H261_CBP_VLC_BITS, 1) + 1;
429 
430  if (s->mb_intra) {
431  s->cur_pic.mb_type[xy] = MB_TYPE_INTRA;
432  goto intra;
433  }
434 
435  //set motion vectors
436  s->mv_dir = MV_DIR_FORWARD;
437  s->mv_type = MV_TYPE_16X16;
438  s->cur_pic.mb_type[xy] = MB_TYPE_16x16 | MB_TYPE_FORWARD_MV;
439  s->mv[0][0][0] = h->current_mv_x * 2; // gets divided by 2 in motion compensation
440  s->mv[0][0][1] = h->current_mv_y * 2;
441 
442  if (s->cur_pic.motion_val[0]) {
443  int b_stride = 2*s->mb_width + 1;
444  int b_xy = 2 * s->mb_x + (2 * s->mb_y) * b_stride;
445  s->cur_pic.motion_val[0][b_xy][0] = s->mv[0][0][0];
446  s->cur_pic.motion_val[0][b_xy][1] = s->mv[0][0][1];
447  }
448 
449 intra:
450  /* decode each block */
451  if (s->mb_intra || HAS_CBP(s->mtype)) {
452  s->bdsp.clear_blocks(h->block[0]);
453  for (i = 0; i < 6; i++) {
454  if (h261_decode_block(h, h->block[i], i, cbp & 32) < 0)
455  return SLICE_ERROR;
456  cbp += cbp;
457  }
458  } else {
459  for (i = 0; i < 6; i++)
460  s->block_last_index[i] = -1;
461  }
462 
463  ff_mpv_reconstruct_mb(s, h->block);
464 
465  return SLICE_OK;
466 }
467 
468 /**
469  * Decode the H.261 picture header.
470  * @return <0 if no startcode found
471  */
472 static int h261_decode_picture_header(H261DecContext *h, int *is_key)
473 {
474  MpegEncContext *const s = &h->s;
475  uint32_t startcode = 0;
476 
477  for (int i = get_bits_left(&h->gb); i > 24; i -= 1) {
478  startcode = ((startcode << 1) | get_bits(&h->gb, 1)) & 0x000FFFFF;
479 
480  if (startcode == 0x10)
481  break;
482  }
483 
484  if (startcode != 0x10) {
485  av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
486  return -1;
487  }
488 
489  /* temporal reference */
490  skip_bits(&h->gb, 5); /* picture timestamp */
491 
492  /* PTYPE starts here */
493  skip_bits1(&h->gb); /* split screen off */
494  skip_bits1(&h->gb); /* camera off */
495  *is_key = get_bits1(&h->gb); /* freeze picture release off */
496 
497  int format = get_bits1(&h->gb);
498 
499  // only 2 formats possible
500  if (format == 0) { // QCIF
501  s->width = 176;
502  s->height = 144;
503  } else { // CIF
504  s->width = 352;
505  s->height = 288;
506  }
507 
508  skip_bits1(&h->gb); /* still image mode off */
509  skip_bits1(&h->gb); /* Reserved */
510 
511  /* PEI */
512  if (skip_1stop_8data_bits(&h->gb) < 0)
513  return AVERROR_INVALIDDATA;
514 
515  h->gob_number = 0;
516  return 0;
517 }
518 
520 {
521  MpegEncContext *const s = &h->s;
522 
523  /* decode mb's */
524  while (h->current_mba <= MBA_STUFFING) {
525  int ret;
526  /* DCT & quantize */
527  ret = h261_decode_mb(h);
528  if (ret < 0) {
529  if (ret == SLICE_END) {
530  h261_decode_mb_skipped(h, h->current_mba, 33);
531  return 0;
532  }
533  av_log(s->avctx, AV_LOG_ERROR, "Error at MB: %d\n",
534  s->mb_x + s->mb_y * s->mb_stride);
535  return -1;
536  }
537 
539  h->current_mba - h->mba_diff,
540  h->current_mba - 1);
541  }
542 
543  return -1;
544 }
545 
546 static int h261_decode_frame(AVCodecContext *avctx, AVFrame *pict,
547  int *got_frame, AVPacket *avpkt)
548 {
549  H261DecContext *const h = avctx->priv_data;
550  const uint8_t *buf = avpkt->data;
551  int buf_size = avpkt->size;
552  MpegEncContext *s = &h->s;
553  int ret, is_key;
554 
555  ff_dlog(avctx, "*****frame %"PRId64" size=%d\n", avctx->frame_num, buf_size);
556  ff_dlog(avctx, "bytes=%x %x %x %x\n", buf[0], buf[1], buf[2], buf[3]);
557 
558  h->gob_start_code_skipped = 0;
559 
560  init_get_bits(&h->gb, buf, buf_size * 8);
561 
562  ret = h261_decode_picture_header(h, &is_key);
563 
564  /* skip if the header was thrashed */
565  if (ret < 0) {
566  av_log(s->avctx, AV_LOG_ERROR, "header damaged\n");
567  return -1;
568  }
569 
570  if (s->width != avctx->coded_width || s->height != avctx->coded_height) {
572  }
573 
574  if (!s->context_initialized) {
575  if ((ret = ff_mpv_common_init(s)) < 0)
576  return ret;
577 
578  ret = ff_set_dimensions(avctx, s->width, s->height);
579  if (ret < 0)
580  return ret;
581  }
582 
583  if ((avctx->skip_frame >= AVDISCARD_NONINTRA && !is_key) ||
584  avctx->skip_frame >= AVDISCARD_ALL)
585  return buf_size;
586 
587  if (ff_mpv_frame_start(s, avctx) < 0)
588  return -1;
589 
591 
592  /* decode each macroblock */
593  s->mb_x = 0;
594  s->mb_y = 0;
595 
596  while (h->gob_number < (s->mb_height == 18 ? 12 : 5)) {
597  if (h261_decode_gob_header(h) < 0)
598  break;
600  }
602 
603  if (is_key) {
604  s->cur_pic.ptr->f->pict_type = AV_PICTURE_TYPE_I;
605  s->cur_pic.ptr->f->flags |= AV_FRAME_FLAG_KEY;
606  }
607 
608  if ((ret = av_frame_ref(pict, s->cur_pic.ptr->f)) < 0)
609  return ret;
610  ff_print_debug_info(s, s->cur_pic.ptr, pict);
611 
612  *got_frame = 1;
613 
614  return buf_size;
615 }
616 
618  .p.name = "h261",
619  CODEC_LONG_NAME("H.261"),
620  .p.type = AVMEDIA_TYPE_VIDEO,
621  .p.id = AV_CODEC_ID_H261,
622  .priv_data_size = sizeof(H261DecContext),
625  .close = ff_mpv_decode_close,
626  .p.capabilities = AV_CODEC_CAP_DR1,
627  .p.max_lowres = 3,
628  .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
629 };
ff_mpv_common_init
av_cold int ff_mpv_common_init(MpegEncContext *s)
init common structure for both encoder and decoder.
Definition: mpegvideo.c:359
IS_INTRA4x4
#define IS_INTRA4x4(a)
Definition: mpegutils.h:69
MV_TYPE_16X16
#define MV_TYPE_16X16
1 vector for the whole mb
Definition: mpegvideo.h:172
H261_MV_VLC_BITS
#define H261_MV_VLC_BITS
Definition: h261dec.c:46
level
uint8_t level
Definition: svq3.c:208
MBA_STARTCODE
#define MBA_STARTCODE
Definition: h261dec.c:50
h261_decode_mb
static int h261_decode_mb(H261DecContext *h)
Definition: h261dec.c:349
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:694
ff_mpv_decode_init
av_cold int ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx)
Initialize the given MpegEncContext for decoding.
Definition: mpegvideo_dec.c:86
mem_internal.h
AV_EF_COMPLIANT
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
Definition: defs.h:55
thread.h
H261_CBP_VLC_BITS
#define H261_CBP_VLC_BITS
Definition: h261dec.c:47
h261_cbp_vlc
static VLCElem h261_cbp_vlc[512]
Definition: h261dec.c:55
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
h261_decode_init_static
static av_cold void h261_decode_init_static(void)
Definition: h261dec.c:72
H261DecContext::current_mv_x
int current_mv_x
Definition: h261dec.c:64
AVPacket::data
uint8_t * data
Definition: packet.h:588
H261_MBA_VLC_BITS
#define H261_MBA_VLC_BITS
Definition: h261dec.c:44
MB_TYPE_16x16
#define MB_TYPE_16x16
Definition: mpegutils.h:41
FFCodec
Definition: codec_internal.h:127
ff_init_block_index
void ff_init_block_index(MpegEncContext *s)
Definition: mpegvideo.c:472
mpegvideo.h
UPDATE_CACHE
#define UPDATE_CACHE(name, gb)
Definition: get_bits.h:213
FMT_H261
@ FMT_H261
Definition: mpegvideo.h:56
mpegutils.h
ff_set_dimensions
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
Definition: utils.c:91
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:517
h261_decode_gob_header
static int h261_decode_gob_header(H261DecContext *h)
Decode the group of blocks header or slice header.
Definition: h261dec.c:132
AV_CODEC_ID_H261
@ AV_CODEC_ID_H261
Definition: codec_id.h:55
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:383
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:559
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:337
MBA_STUFFING
#define MBA_STUFFING
Definition: h261dec.c:49
SKIP_CACHE
#define SKIP_CACHE(name, gb, num)
Definition: get_bits.h:216
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
h261_decode_picture_header
static int h261_decode_picture_header(H261DecContext *h, int *is_key)
Decode the H.261 picture header.
Definition: h261dec.c:472
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1670
SLICE_OK
#define SLICE_OK
Definition: h261dec.c:40
h261.h
RLTable
RLTable.
Definition: rl.h:39
GetBitContext
Definition: get_bits.h:109
AV_EF_BITSTREAM
#define AV_EF_BITSTREAM
detect bitstream specification deviations
Definition: defs.h:49
val
static double val(void *priv, double ch)
Definition: aeval.c:77
AVCodecContext::coded_height
int coded_height
Definition: avcodec.h:615
HAS_CBP
#define HAS_CBP(a)
Definition: mpegutils.h:87
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:205
mpegvideodec.h
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
INIT_FIRST_VLC_RL
#define INIT_FIRST_VLC_RL(rl, static_size)
Definition: rl.h:93
av_cold
#define av_cold
Definition: attributes.h:106
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:642
check
#define check(x, y, S, v)
Definition: motion_est_template.c:405
CLOSE_READER
#define CLOSE_READER(name, gb)
Definition: get_bits.h:189
H261DecContext::gb
GetBitContext gb
Definition: h261dec.c:60
h261_decode_init
static av_cold int h261_decode_init(AVCodecContext *avctx)
Definition: h261dec.c:90
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:347
s
#define s(width, name)
Definition: cbs_vp9.c:198
SHOW_SBITS
#define SHOW_SBITS(name, gb, num)
Definition: get_bits.h:248
h261_decode_block
static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded)
Decode a macroblock.
Definition: h261dec.c:250
ff_h261_mba_code
const uint8_t ff_h261_mba_code[35]
Definition: h261data.c:34
ff_mpeg_er_frame_start
void ff_mpeg_er_frame_start(MpegEncContext *s)
Definition: mpeg_er.c:46
decode.h
get_bits.h
ff_h261_mv_tab
const uint8_t ff_h261_mv_tab[17][2]
Definition: h261data.c:89
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
ff_mpv_common_end
av_cold void ff_mpv_common_end(MpegEncContext *s)
Definition: mpegvideo.c:428
if
if(ret)
Definition: filter_design.txt:179
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:203
format
New swscale design to change SwsGraph is what coordinates multiple passes These can include cascaded scaling error diffusion and so on Or we could have separate passes for the vertical and horizontal scaling In between each SwsPass lies a fully allocated image buffer Graph passes may have different levels of e g we can have a single threaded error diffusion pass following a multi threaded scaling pass SwsGraph is internally recreated whenever the image format
Definition: swscale-v2.txt:14
run
uint8_t run
Definition: svq3.c:207
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
ff_mpv_decode_close
av_cold int ff_mpv_decode_close(AVCodecContext *avctx)
Definition: mpegvideo_dec.c:166
H261DecContext::current_mv_y
int current_mv_y
Definition: h261dec.c:65
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:278
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:391
H261DecContext::gob_start_code_skipped
int gob_start_code_skipped
Definition: h261dec.c:67
get_vlc2
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:651
AVOnce
#define AVOnce
Definition: thread.h:202
h261_mtype_vlc
static VLCElem h261_mtype_vlc[80]
Definition: h261dec.c:53
ff_dlog
#define ff_dlog(a,...)
Definition: tableprint_vlc.h:28
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:550
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AVPacket::size
int size
Definition: packet.h:589
av_frame_ref
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
Definition: frame.c:278
codec_internal.h
VLCElem
Definition: vlc.h:32
FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
The decoder extracts and fills its parameters even if the frame is skipped due to the skip_frame sett...
Definition: codec_internal.h:54
MB_TYPE_SKIP
#define MB_TYPE_SKIP
Definition: mpegutils.h:61
ff_mpv_frame_start
int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx)
generic function called after decoding the header and before a frame is decoded.
Definition: mpegvideo_dec.c:347
OPEN_READER
#define OPEN_READER(name, gb)
Definition: get_bits.h:177
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:416
h261_decode_mb_skipped
static int h261_decode_mb_skipped(H261DecContext *h, int mba1, int mba2)
Decode skipped macroblocks.
Definition: h261dec.c:187
IS_16X16
#define IS_16X16(a)
Definition: mpegutils.h:80
H261_MTYPE_VLC_BITS
#define H261_MTYPE_VLC_BITS
Definition: h261dec.c:45
h261_init_dest
static void h261_init_dest(MpegEncContext *s)
Definition: h261dec.c:119
h261_decode_frame
static int h261_decode_frame(AVCodecContext *avctx, AVFrame *pict, int *got_frame, AVPacket *avpkt)
Definition: h261dec.c:546
ff_print_debug_info
void ff_print_debug_info(const MpegEncContext *s, const MPVPicture *p, AVFrame *pict)
Definition: mpegvideo_dec.c:406
SKIP_COUNTER
#define SKIP_COUNTER(name, gb, num)
Definition: get_bits.h:221
ff_h261_cbp_tab
const uint8_t ff_h261_cbp_tab[63][2]
Definition: h261data.c:95
AVDISCARD_NONINTRA
@ AVDISCARD_NONINTRA
discard all non intra frames
Definition: defs.h:230
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:373
IS_QUANT
#define IS_QUANT(a)
Definition: mpegutils.h:85
ff_h261_mtype_code
const uint8_t ff_h261_mtype_code[10]
Definition: h261data.c:63
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
H261DecContext::current_mba
int current_mba
Definition: h261dec.c:62
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:639
VLC_INIT_STATIC_SPARSE_TABLE
#define VLC_INIT_STATIC_SPARSE_TABLE(vlc_table, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, symbols, symbols_wrap, symbols_size, flags)
Definition: vlc.h:266
avcodec.h
ff_h261_decoder
const FFCodec ff_h261_decoder
Definition: h261dec.c:617
GET_RL_VLC
#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)
Definition: get_bits.h:605
AVCodecContext::frame_num
int64_t frame_num
Frame counter, set by libavcodec.
Definition: avcodec.h:1886
ret
ret
Definition: filter_design.txt:187
h261_mba_vlc
static VLCElem h261_mba_vlc[540]
Definition: h261dec.c:52
h261_mv_vlc
static VLCElem h261_mv_vlc[144]
Definition: h261dec.c:54
ff_h261_rl_tcoeff
RLTable ff_h261_rl_tcoeff
Definition: h261data.c:150
skip_1stop_8data_bits
static int skip_1stop_8data_bits(GetBitContext *gb)
Definition: get_bits.h:699
AVCodecContext
main external API structure.
Definition: avcodec.h:439
SLICE_ERROR
#define SLICE_ERROR
Definition: h261dec.c:41
SHOW_UBITS
#define SHOW_UBITS(name, gb, num)
Definition: get_bits.h:247
SLICE_END
#define SLICE_END
end marker found
Definition: h261dec.c:42
ff_h261_mtype_map
const uint16_t ff_h261_mtype_map[10]
Definition: h261data.c:75
VLC_INIT_STATIC_TABLE
#define VLC_INIT_STATIC_TABLE(vlc_table, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
Definition: vlc.h:278
H261DecContext::mba_diff
int mba_diff
Definition: h261dec.c:63
ff_h261_mtype_bits
const uint8_t ff_h261_mtype_bits[10]
Definition: h261data.c:69
ff_mpv_frame_end
void ff_mpv_frame_end(MpegEncContext *s)
Definition: mpegvideo_dec.c:398
AVCodecContext::coded_width
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:615
h261_decode_gob
static int h261_decode_gob(H261DecContext *h)
Definition: h261dec.c:519
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:279
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
ff_mpv_reconstruct_mb
void ff_mpv_reconstruct_mb(MPVContext *s, int16_t block[][64])
Definition: mpegvideo_dec.c:1124
H261DecContext::gob_number
int gob_number
Definition: h261dec.c:66
MV_DIR_FORWARD
#define MV_DIR_FORWARD
Definition: mpegvideo.h:168
AVPacket
This structure stores compressed data.
Definition: packet.h:565
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:466
decode_mv_component
static int decode_mv_component(GetBitContext *gb, int v)
Definition: h261dec.c:226
mpeg_er.h
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
h
h
Definition: vp9dsp_template.c:2070
H261DecContext::DECLARE_ALIGNED_32
DECLARE_ALIGNED_32(int16_t, block)[6][64]
ff_h261_mba_bits
const uint8_t ff_h261_mba_bits[35]
Definition: h261data.c:48
MpegEncContext
MpegEncContext.
Definition: mpegvideo.h:67
H261DecContext
Definition: h261dec.c:57
MB_TYPE_FORWARD_MV
#define MB_TYPE_FORWARD_MV
Definition: mpegutils.h:49
TCOEFF_VLC_BITS
#define TCOEFF_VLC_BITS
Definition: h261dec.c:48
H261DecContext::s
MpegEncContext s
Definition: h261dec.c:58
RLTable::rl_vlc
RL_VLC_ELEM * rl_vlc[32]
decoding only
Definition: rl.h:48
MB_TYPE_INTRA
#define MB_TYPE_INTRA
Definition: mpegutils.h:64
MB_TYPE_H261_FIL
#define MB_TYPE_H261_FIL
Definition: h261.h:34