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/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 
51 
52 typedef struct H261DecContext {
54 
56 
58  int mba_diff;
62  int gob_start_code_skipped; // 1 if gob start code is already read before gob header is read
64 
66 {
68  ff_h261_mba_bits, 1, 1,
69  ff_h261_mba_code, 1, 1, 540);
71  ff_h261_mtype_bits, 1, 1,
72  ff_h261_mtype_code, 1, 1, 80);
74  &ff_h261_mv_tab[0][1], 2, 1,
75  &ff_h261_mv_tab[0][0], 2, 1, 144);
77  &ff_h261_cbp_tab[0][1], 2, 1,
78  &ff_h261_cbp_tab[0][0], 2, 1, 512);
80 }
81 
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;
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  */
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  */
163 {
164  MpegEncContext *const s = &h->s;
165  int left, ret;
166 
167  if (h->gob_start_code_skipped) {
169  if (ret >= 0)
170  return 0;
171  } else {
172  if (show_bits(&s->gb, 15) == 0) {
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 
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  */
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;
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 
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  */
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 
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;
404 
405  // Read mtype
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  }
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  */
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 
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 
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  */
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 
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 
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) {
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 
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;
659  }
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 
675 {
676  H261DecContext *const h = avctx->priv_data;
677  MpegEncContext *s = &h->s;
678 
680  return 0;
681 }
682 
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),
690  .close = h261_decode_end,
692  .p.capabilities = AV_CODEC_CAP_DR1,
693  .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
694  .p.max_lowres = 3,
695 };
ff_mpv_common_init
av_cold int ff_mpv_common_init(MpegEncContext *s)
init common structure for both encoder and decoder.
Definition: mpegvideo.c:738
IS_INTRA4x4
#define IS_INTRA4x4(a)
Definition: mpegutils.h:68
MB_TYPE_L0
#define MB_TYPE_L0
Definition: mpegutils.h:60
MV_TYPE_16X16
#define MV_TYPE_16X16
1 vector for the whole mb
Definition: mpegvideo.h:246
H261_MV_VLC_BITS
#define H261_MV_VLC_BITS
Definition: h261dec.c:41
level
uint8_t level
Definition: svq3.c:206
MBA_STARTCODE
#define MBA_STARTCODE
Definition: h261dec.c:45
h261_decode_mb
static int h261_decode_mb(H261DecContext *h)
Definition: h261dec.c:365
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:839
H261Context::mtype
int mtype
Definition: h261.h:38
thread.h
H261_CBP_VLC_BITS
#define H261_CBP_VLC_BITS
Definition: h261dec.c:42
INIT_VLC_STATIC
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
Definition: vlc.h:125
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:219
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:325
h261_decode_init_static
static av_cold void h261_decode_init_static(void)
Definition: h261dec.c:65
H261DecContext::current_mv_x
int current_mv_x
Definition: h261dec.c:59
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:374
H261_MBA_VLC_BITS
#define H261_MBA_VLC_BITS
Definition: h261dec.c:39
MB_TYPE_16x16
#define MB_TYPE_16x16
Definition: mpegutils.h:47
FFCodec
Definition: codec_internal.h:112
ff_init_block_index
void ff_init_block_index(MpegEncContext *s)
Definition: mpegvideo.c:1673
mpegvideo.h
AV_EF_COMPLIANT
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
Definition: avcodec.h:1359
UPDATE_CACHE
#define UPDATE_CACHE(name, gb)
Definition: get_bits.h:178
h261_decode_picture_header
static int h261_decode_picture_header(H261DecContext *h)
Decode the H.261 picture header.
Definition: h261dec.c:490
mpegutils.h
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:649
h261_decode_gob_header
static int h261_decode_gob_header(H261DecContext *h)
Decode the group of blocks header or slice header.
Definition: h261dec.c:108
AV_CODEC_ID_H261
@ AV_CODEC_ID_H261
Definition: codec_id.h:53
get_consumed_bytes
static int get_consumed_bytes(MpegEncContext *s, int buf_size)
returns the number of bytes consumed for building the current frame
Definition: h261dec.c:586
init
static int init
Definition: av_tx.c:47
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:467
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:379
MBA_STUFFING
#define MBA_STUFFING
Definition: h261dec.c:44
ff_h261_mtype_map
const int ff_h261_mtype_map[10]
Definition: h261data.c:75
SKIP_CACHE
#define SKIP_CACHE(name, gb, num)
Definition: get_bits.h:180
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:116
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1695
h261.h
RLTable
RLTable.
Definition: rl.h:39
GetBitContext
Definition: get_bits.h:61
h261_resync
static int h261_resync(H261DecContext *h)
Decode the group of blocks / video packet header.
Definition: h261dec.c:162
val
static double val(void *priv, double ch)
Definition: aeval.c:77
AVCodecContext::coded_height
int coded_height
Definition: avcodec.h:577
SLICE_END
#define SLICE_END
end marker found
Definition: mpegvideo.h:472
HAS_CBP
#define HAS_CBP(a)
Definition: mpegutils.h:94
AV_EF_BITSTREAM
#define AV_EF_BITSTREAM
detect bitstream specification deviations
Definition: avcodec.h:1353
ff_mpv_common_end
void ff_mpv_common_end(MpegEncContext *s)
Definition: mpegvideo.c:879
avassert.h
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:179
mpegvideodec.h
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
INIT_FIRST_VLC_RL
#define INIT_FIRST_VLC_RL(rl, static_size)
Definition: rl.h:83
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:90
h261_mtype_vlc
static VLC h261_mtype_vlc
Definition: h261dec.c:48
check
#define check(x, y, S, v)
Definition: motion_est_template.c:405
CLOSE_READER
#define CLOSE_READER(name, gb)
Definition: get_bits.h:149
h261_decode_init
static av_cold int h261_decode_init(AVCodecContext *avctx)
Definition: h261dec.c:82
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:254
s
#define s(width, name)
Definition: cbs_vp9.c:256
format
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
SHOW_SBITS
#define SHOW_SBITS(name, gb, num)
Definition: get_bits.h:212
h261_decode_block
static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded)
Decode a macroblock.
Definition: h261dec.c:273
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
FMT_H261
@ FMT_H261
Definition: mpegutils.h:118
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
h261_decode_end
static av_cold int h261_decode_end(AVCodecContext *avctx)
Definition: h261dec.c:674
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:66
if
if(ret)
Definition: filter_design.txt:179
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:54
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:177
run
uint8_t run
Definition: svq3.c:205
ff_mpv_idct_init
av_cold void ff_mpv_idct_init(MpegEncContext *s)
Definition: mpegvideo.c:331
H261DecContext::common
H261Context common
Definition: h261dec.c:55
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
H261DecContext::current_mv_y
int current_mv_y
Definition: h261dec.c:60
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:274
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:498
ff_set_qscale
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
Definition: mpegvideo.c:1709
H261DecContext::gob_start_code_skipped
int gob_start_code_skipped
Definition: h261dec.c:62
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:787
AVOnce
#define AVOnce
Definition: thread.h:176
ff_dlog
#define ff_dlog(a,...)
Definition: tableprint_vlc.h:28
AVDISCARD_NONKEY
@ AVDISCARD_NONKEY
discard all frames except keyframes
Definition: defs.h:53
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:375
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
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:343
codec_internal.h
MB_TYPE_SKIP
#define MB_TYPE_SKIP
Definition: mpegutils.h:55
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:276
OPEN_READER
#define OPEN_READER(name, gb)
Definition: get_bits.h:138
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:538
h261_decode_mb_skipped
static int h261_decode_mb_skipped(H261DecContext *h, int mba1, int mba2)
Decode skipped macroblocks.
Definition: h261dec.c:203
IS_16X16
#define IS_16X16(a)
Definition: mpegutils.h:79
H261Context
H261Context.
Definition: h261.h:37
H261_MTYPE_VLC_BITS
#define H261_MTYPE_VLC_BITS
Definition: h261dec.c:40
ff_update_block_index
static void ff_update_block_index(MpegEncContext *s)
Definition: mpegvideo.h:593
h261_decode_frame
static int h261_decode_frame(AVCodecContext *avctx, AVFrame *pict, int *got_frame, AVPacket *avpkt)
Definition: h261dec.c:597
mvmap
static const int mvmap[17]
Definition: h261dec.c:243
SKIP_COUNTER
#define SKIP_COUNTER(name, gb, num)
Definition: get_bits.h:185
ff_h261_cbp_tab
const uint8_t ff_h261_cbp_tab[63][2]
Definition: h261data.c:95
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:446
ff_mpv_decode_init
void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx)
Initialize the given MpegEncContext for decoding.
Definition: mpegvideo_dec.c:37
h261_mv_vlc
static VLC h261_mv_vlc
Definition: h261dec.c:49
IS_QUANT
#define IS_QUANT(a)
Definition: mpegutils.h:88
FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: codec_internal.h:31
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:203
H261DecContext::current_mba
int current_mba
Definition: h261dec.c:57
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:599
avcodec.h
ff_h261_decoder
const FFCodec ff_h261_decoder
Definition: h261dec.c:683
GET_RL_VLC
#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)
Definition: get_bits.h:728
ret
ret
Definition: filter_design.txt:187
SLICE_OK
#define SLICE_OK
Definition: mpegvideo.h:470
h261_mba_vlc
static VLC h261_mba_vlc
Definition: h261dec.c:47
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:683
pos
unsigned int pos
Definition: spdifenc.c:412
left
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
Definition: snow.txt:386
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:844
AVCodecContext
main external API structure.
Definition: avcodec.h:389
h261_cbp_vlc
static VLC h261_cbp_vlc
Definition: h261dec.c:50
SHOW_UBITS
#define SHOW_UBITS(name, gb, num)
Definition: get_bits.h:211
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:276
VLC
Definition: vlc.h:31
H261DecContext::mba_diff
int mba_diff
Definition: h261dec.c:58
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:498
ff_mpv_reconstruct_mb
void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64])
Definition: mpegvideo.c:1649
VLC::table
VLCElem * table
Definition: vlc.h:33
AVCodecContext::coded_width
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:577
h261_decode_gob
static int h261_decode_gob(H261DecContext *h)
Definition: h261dec.c:554
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:275
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
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:90
AVCodecContext::frame_number
int frame_number
Frame counter, set by libavcodec.
Definition: avcodec.h:1037
H261DecContext::gob_number
int gob_number
Definition: h261dec.c:61
SLICE_ERROR
#define SLICE_ERROR
Definition: mpegvideo.h:471
MV_DIR_FORWARD
#define MV_DIR_FORWARD
Definition: mpegvideo.h:242
AVPacket
This structure stores compressed data.
Definition: packet.h:351
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:416
decode_mv_component
static int decode_mv_component(GetBitContext *gb, int v)
Definition: h261dec.c:247
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:2038
ff_print_debug_info
void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict)
Definition: mpegvideo_dec.c:506
AVDISCARD_NONREF
@ AVDISCARD_NONREF
discard all non reference
Definition: defs.h:50
ff_h261_mba_bits
const uint8_t ff_h261_mba_bits[35]
Definition: h261data.c:48
MpegEncContext
MpegEncContext.
Definition: mpegvideo.h:62
H261DecContext
Definition: h261dec.c:52
TCOEFF_VLC_BITS
#define TCOEFF_VLC_BITS
Definition: h261dec.c:43
H261DecContext::s
MpegEncContext s
Definition: h261dec.c:53
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:66
re
float re
Definition: fft.c:79
MB_TYPE_H261_FIL
#define MB_TYPE_H261_FIL
Definition: h261.h:41