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