ituh263dec.c
Go to the documentation of this file.
1 /*
2  * ITU H263 bitstream decoder
3  * Copyright (c) 2000,2001 Fabrice Bellard
4  * H263+ support.
5  * Copyright (c) 2001 Juan J. Sierralta P
6  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
7  *
8  * This file is part of FFmpeg.
9  *
10  * FFmpeg is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * FFmpeg is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with FFmpeg; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24 
25 /**
26  * @file
27  * h263 decoder.
28  */
29 
30 #define UNCHECKED_BITSTREAM_READER 1
31 
32 //#define DEBUG
33 #include <limits.h>
34 
35 #include "libavutil/internal.h"
36 #include "libavutil/mathematics.h"
37 #include "avcodec.h"
38 #include "mpegvideo.h"
39 #include "h263.h"
40 #include "mathops.h"
41 #include "unary.h"
42 #include "flv.h"
43 #include "mpeg4video.h"
44 
45 // The defines below define the number of bits that are read at once for
46 // reading vlc values. Changing these may improve speed and data cache needs
47 // be aware though that decreasing them may need the number of stages that is
48 // passed to get_vlc* to be increased.
49 #define MV_VLC_BITS 9
50 #define H263_MBTYPE_B_VLC_BITS 6
51 #define CBPC_B_VLC_BITS 3
52 
53 static const int h263_mb_type_b_map[15]= {
66  0, //stuffing
69 };
70 
73  av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n",
75  s->gb.size_in_bits, 1-s->no_rounding,
76  s->obmc ? " AP" : "",
77  s->umvplus ? " UMV" : "",
78  s->h263_long_vectors ? " LONG" : "",
79  s->h263_plus ? " +" : "",
80  s->h263_aic ? " AIC" : "",
81  s->alt_inter_vlc ? " AIV" : "",
82  s->modified_quant ? " MQ" : "",
83  s->loop_filter ? " LOOP" : "",
84  s->h263_slice_structured ? " SS" : "",
86  );
87  }
88 }
89 
90 /***********************************************/
91 /* decoding */
92 
96 static VLC mv_vlc;
98 static VLC cbpc_b_vlc;
99 
100 /* init vlcs */
101 
102 /* XXX: find a better solution to handle static init */
104 {
105  static volatile int done = 0;
106 
107  if (!done) {
108  INIT_VLC_STATIC(&ff_h263_intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9,
110  ff_h263_intra_MCBPC_code, 1, 1, 72);
111  INIT_VLC_STATIC(&ff_h263_inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 28,
113  ff_h263_inter_MCBPC_code, 1, 1, 198);
114  INIT_VLC_STATIC(&ff_h263_cbpy_vlc, CBPY_VLC_BITS, 16,
115  &ff_h263_cbpy_tab[0][1], 2, 1,
116  &ff_h263_cbpy_tab[0][0], 2, 1, 64);
117  INIT_VLC_STATIC(&mv_vlc, MV_VLC_BITS, 33,
118  &ff_mvtab[0][1], 2, 1,
119  &ff_mvtab[0][0], 2, 1, 538);
124  INIT_VLC_STATIC(&h263_mbtype_b_vlc, H263_MBTYPE_B_VLC_BITS, 15,
125  &ff_h263_mbtype_b_tab[0][1], 2, 1,
126  &ff_h263_mbtype_b_tab[0][0], 2, 1, 80);
127  INIT_VLC_STATIC(&cbpc_b_vlc, CBPC_B_VLC_BITS, 4,
128  &ff_cbpc_b_tab[0][1], 2, 1,
129  &ff_cbpc_b_tab[0][0], 2, 1, 8);
130  done = 1;
131  }
132 }
133 
135 {
136  int i, mb_pos;
137 
138  for(i=0; i<6; i++){
139  if(s->mb_num-1 <= ff_mba_max[i]) break;
140  }
141  mb_pos= get_bits(&s->gb, ff_mba_length[i]);
142  s->mb_x= mb_pos % s->mb_width;
143  s->mb_y= mb_pos / s->mb_width;
144 
145  return mb_pos;
146 }
147 
148 /**
149  * Decode the group of blocks header or slice header.
150  * @return <0 if an error occurred
151  */
153 {
154  unsigned int val, gob_number;
155  int left;
156 
157  /* Check for GOB Start Code */
158  val = show_bits(&s->gb, 16);
159  if(val)
160  return -1;
161 
162  /* We have a GBSC probably with GSTUFF */
163  skip_bits(&s->gb, 16); /* Drop the zeros */
164  left= get_bits_left(&s->gb);
165  //MN: we must check the bits left or we might end in a infinite loop (or segfault)
166  for(;left>13; left--){
167  if(get_bits1(&s->gb)) break; /* Seek the '1' bit */
168  }
169  if(left<=13)
170  return -1;
171 
172  if(s->h263_slice_structured){
173  if(get_bits1(&s->gb)==0)
174  return -1;
175 
177 
178  if(s->mb_num > 1583)
179  if(get_bits1(&s->gb)==0)
180  return -1;
181 
182  s->qscale = get_bits(&s->gb, 5); /* SQUANT */
183  if(get_bits1(&s->gb)==0)
184  return -1;
185  skip_bits(&s->gb, 2); /* GFID */
186  }else{
187  gob_number = get_bits(&s->gb, 5); /* GN */
188  s->mb_x= 0;
189  s->mb_y= s->gob_index* gob_number;
190  skip_bits(&s->gb, 2); /* GFID */
191  s->qscale = get_bits(&s->gb, 5); /* GQUANT */
192  }
193 
194  if(s->mb_y >= s->mb_height)
195  return -1;
196 
197  if(s->qscale==0)
198  return -1;
199 
200  return 0;
201 }
202 
203 /**
204  * Find the next resync_marker.
205  * @param p pointer to buffer to scan
206  * @param end pointer to the end of the buffer
207  * @return pointer to the next resync_marker, or end if none was found
208  */
210 {
211  av_assert2(p < end);
212 
213  end-=2;
214  p++;
215  if(s->resync_marker){
216  int prefix_len = ff_mpeg4_get_video_packet_prefix_length(s);
217  for(;p<end; p+=2){
218  if(!*p){
219  if (!p[-1] && ((p[1] >> (23-prefix_len)) == 1)) return p - 1;
220  else if (!p[ 1] && ((p[2] >> (23-prefix_len)) == 1)) return p;
221  }
222  }
223  }
224  return end+2;
225 }
226 
227 /**
228  * Decode the group of blocks / video packet header.
229  * @return bit position of the resync_marker, or <0 if none was found
230  */
232  int left, pos, ret;
233 
234  if(s->codec_id==AV_CODEC_ID_MPEG4){
235  skip_bits1(&s->gb);
236  align_get_bits(&s->gb);
237  }
238 
239  if(show_bits(&s->gb, 16)==0){
240  pos= get_bits_count(&s->gb);
243  else
244  ret= h263_decode_gob_header(s);
245  if(ret>=0)
246  return pos;
247  }
248  //OK, it's not where it is supposed to be ...
249  s->gb= s->last_resync_gb;
250  align_get_bits(&s->gb);
251  left= get_bits_left(&s->gb);
252 
253  for(;left>16+1+5+5; left-=8){
254  if(show_bits(&s->gb, 16)==0){
255  GetBitContext bak= s->gb;
256 
257  pos= get_bits_count(&s->gb);
260  else
261  ret= h263_decode_gob_header(s);
262  if(ret>=0)
263  return pos;
264 
265  s->gb= bak;
266  }
267  skip_bits(&s->gb, 8);
268  }
269 
270  return -1;
271 }
272 
274 {
275  int code, val, sign, shift;
276  code = get_vlc2(&s->gb, mv_vlc.table, MV_VLC_BITS, 2);
277 
278  if (code == 0)
279  return pred;
280  if (code < 0)
281  return 0xffff;
282 
283  sign = get_bits1(&s->gb);
284  shift = f_code - 1;
285  val = code;
286  if (shift) {
287  val = (val - 1) << shift;
288  val |= get_bits(&s->gb, shift);
289  val++;
290  }
291  if (sign)
292  val = -val;
293  val += pred;
294 
295  /* modulo decoding */
296  if (!s->h263_long_vectors) {
297  val = sign_extend(val, 5 + f_code);
298  } else {
299  /* horrible h263 long vector mode */
300  if (pred < -31 && val < -63)
301  val += 64;
302  if (pred > 32 && val > 63)
303  val -= 64;
304 
305  }
306  return val;
307 }
308 
309 
310 /* Decode RVLC of H.263+ UMV */
312 {
313  int code = 0, sign;
314 
315  if (get_bits1(&s->gb)) /* Motion difference = 0 */
316  return pred;
317 
318  code = 2 + get_bits1(&s->gb);
319 
320  while (get_bits1(&s->gb))
321  {
322  code <<= 1;
323  code += get_bits1(&s->gb);
324  }
325  sign = code & 1;
326  code >>= 1;
327 
328  code = (sign) ? (pred - code) : (pred + code);
329  av_dlog(s->avctx,"H.263+ UMV Motion = %d\n", code);
330  return code;
331 
332 }
333 
334 /**
335  * read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
336  */
338  GetBitContext gb= s->gb;
339 
340  int cbpc, i, pred_x, pred_y, mx, my;
341  int16_t *mot_val;
342  const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
343  const int stride= s->b8_stride*2;
344 
345  for(i=0; i<4; i++)
346  s->block_index[i]+= 2;
347  for(i=4; i<6; i++)
348  s->block_index[i]+= 1;
349  s->mb_x++;
350 
352 
353  do{
354  if (get_bits1(&s->gb)) {
355  /* skip mb */
356  mot_val = s->current_picture.motion_val[0][s->block_index[0]];
357  mot_val[0 ]= mot_val[2 ]=
358  mot_val[0+stride]= mot_val[2+stride]= 0;
359  mot_val[1 ]= mot_val[3 ]=
360  mot_val[1+stride]= mot_val[3+stride]= 0;
361 
363  goto end;
364  }
365  cbpc = get_vlc2(&s->gb, ff_h263_inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
366  }while(cbpc == 20);
367 
368  if(cbpc & 4){
370  }else{
371  get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1);
372  if (cbpc & 8) {
373  if(s->modified_quant){
374  if(get_bits1(&s->gb)) skip_bits(&s->gb, 1);
375  else skip_bits(&s->gb, 5);
376  }else
377  skip_bits(&s->gb, 2);
378  }
379 
380  if ((cbpc & 16) == 0) {
382  /* 16x16 motion prediction */
383  mot_val= ff_h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
384  if (s->umvplus)
385  mx = h263p_decode_umotion(s, pred_x);
386  else
387  mx = ff_h263_decode_motion(s, pred_x, 1);
388 
389  if (s->umvplus)
390  my = h263p_decode_umotion(s, pred_y);
391  else
392  my = ff_h263_decode_motion(s, pred_y, 1);
393 
394  mot_val[0 ]= mot_val[2 ]=
395  mot_val[0+stride]= mot_val[2+stride]= mx;
396  mot_val[1 ]= mot_val[3 ]=
397  mot_val[1+stride]= mot_val[3+stride]= my;
398  } else {
400  for(i=0;i<4;i++) {
401  mot_val = ff_h263_pred_motion(s, i, 0, &pred_x, &pred_y);
402  if (s->umvplus)
403  mx = h263p_decode_umotion(s, pred_x);
404  else
405  mx = ff_h263_decode_motion(s, pred_x, 1);
406 
407  if (s->umvplus)
408  my = h263p_decode_umotion(s, pred_y);
409  else
410  my = ff_h263_decode_motion(s, pred_y, 1);
411  if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
412  skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
413  mot_val[0] = mx;
414  mot_val[1] = my;
415  }
416  }
417  }
418 end:
419 
420  for(i=0; i<4; i++)
421  s->block_index[i]-= 2;
422  for(i=4; i<6; i++)
423  s->block_index[i]-= 1;
424  s->mb_x--;
425 
426  s->gb= gb;
427 }
428 
430  static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
431 
432  if(s->modified_quant){
433  if(get_bits1(&s->gb))
435  else
436  s->qscale= get_bits(&s->gb, 5);
437  }else
438  s->qscale += quant_tab[get_bits(&s->gb, 2)];
439  ff_set_qscale(s, s->qscale);
440 }
441 
442 static int h263_decode_block(MpegEncContext * s, int16_t * block,
443  int n, int coded)
444 {
445  int code, level, i, j, last, run;
446  RLTable *rl = &ff_h263_rl_inter;
447  const uint8_t *scan_table;
448  GetBitContext gb= s->gb;
449 
450  scan_table = s->intra_scantable.permutated;
451  if (s->h263_aic && s->mb_intra) {
452  rl = &ff_rl_intra_aic;
453  i = 0;
454  if (s->ac_pred) {
455  if (s->h263_aic_dir)
456  scan_table = s->intra_v_scantable.permutated; /* left */
457  else
458  scan_table = s->intra_h_scantable.permutated; /* top */
459  }
460  } else if (s->mb_intra) {
461  /* DC coef */
462  if(s->codec_id == AV_CODEC_ID_RV10){
463 #if CONFIG_RV10_DECODER
464  if (s->rv10_version == 3 && s->pict_type == AV_PICTURE_TYPE_I) {
465  int component, diff;
466  component = (n <= 3 ? 0 : n - 4 + 1);
467  level = s->last_dc[component];
468  if (s->rv10_first_dc_coded[component]) {
469  diff = ff_rv_decode_dc(s, n);
470  if (diff == 0xffff)
471  return -1;
472  level += diff;
473  level = level & 0xff; /* handle wrap round */
474  s->last_dc[component] = level;
475  } else {
476  s->rv10_first_dc_coded[component] = 1;
477  }
478  } else {
479  level = get_bits(&s->gb, 8);
480  if (level == 255)
481  level = 128;
482  }
483 #endif
484  }else{
485  level = get_bits(&s->gb, 8);
486  if((level&0x7F) == 0){
487  av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", level, s->mb_x, s->mb_y);
489  return -1;
490  }
491  if (level == 255)
492  level = 128;
493  }
494  block[0] = level;
495  i = 1;
496  } else {
497  i = 0;
498  }
499  if (!coded) {
500  if (s->mb_intra && s->h263_aic)
501  goto not_coded;
502  s->block_last_index[n] = i - 1;
503  return 0;
504  }
505 retry:
506  for(;;) {
507  code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2);
508  if (code < 0){
509  av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y);
510  return -1;
511  }
512  if (code == rl->n) {
513  /* escape */
514  if (CONFIG_FLV_DECODER && s->h263_flv > 1) {
515  ff_flv2_decode_ac_esc(&s->gb, &level, &run, &last);
516  } else {
517  last = get_bits1(&s->gb);
518  run = get_bits(&s->gb, 6);
519  level = (int8_t)get_bits(&s->gb, 8);
520  if(level == -128){
521  if (s->codec_id == AV_CODEC_ID_RV10) {
522  /* XXX: should patch encoder too */
523  level = get_sbits(&s->gb, 12);
524  }else{
525  level = get_bits(&s->gb, 5);
526  level |= get_sbits(&s->gb, 6)<<5;
527  }
528  }
529  }
530  } else {
531  run = rl->table_run[code];
532  level = rl->table_level[code];
533  last = code >= rl->last;
534  if (get_bits1(&s->gb))
535  level = -level;
536  }
537  i += run;
538  if (i >= 64){
539  if(s->alt_inter_vlc && rl == &ff_h263_rl_inter && !s->mb_intra){
540  //Looks like a hack but no, it's the way it is supposed to work ...
541  rl = &ff_rl_intra_aic;
542  i = 0;
543  s->gb= gb;
544  s->dsp.clear_block(block);
545  goto retry;
546  }
547  av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d i:%d\n", s->mb_x, s->mb_y, s->mb_intra);
548  return -1;
549  }
550  j = scan_table[i];
551  block[j] = level;
552  if (last)
553  break;
554  i++;
555  }
556 not_coded:
557  if (s->mb_intra && s->h263_aic) {
558  ff_h263_pred_acdc(s, block, n);
559  i = 63;
560  }
561  s->block_last_index[n] = i;
562  return 0;
563 }
564 
565 static int h263_skip_b_part(MpegEncContext *s, int cbp)
566 {
567  LOCAL_ALIGNED_16(int16_t, dblock, [64]);
568  int i, mbi;
569  int bli[6];
570 
571  /* we have to set s->mb_intra to zero to decode B-part of PB-frame correctly
572  * but real value should be restored in order to be used later (in OBMC condition)
573  */
574  mbi = s->mb_intra;
575  memcpy(bli, s->block_last_index, sizeof(bli));
576  s->mb_intra = 0;
577  for (i = 0; i < 6; i++) {
578  if (h263_decode_block(s, dblock, i, cbp&32) < 0)
579  return -1;
580  cbp+=cbp;
581  }
582  s->mb_intra = mbi;
583  memcpy(s->block_last_index, bli, sizeof(bli));
584  return 0;
585 }
586 
587 static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb)
588 {
589  int c, mv = 1;
590 
591  if (pb_frame < 3) { // h.263 Annex G and i263 PB-frame
592  c = get_bits1(gb);
593  if (pb_frame == 2 && c)
594  mv = !get_bits1(gb);
595  } else { // h.263 Annex M improved PB-frame
596  mv = get_unary(gb, 0, 4) + 1;
597  c = mv & 1;
598  mv = !!(mv & 2);
599  }
600  if(c)
601  *cbpb = get_bits(gb, 6);
602  return mv;
603 }
604 
606  int16_t block[6][64])
607 {
608  int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
609  int16_t *mot_val;
610  const int xy= s->mb_x + s->mb_y * s->mb_stride;
611  int cbpb = 0, pb_mv_count = 0;
612 
613  av_assert2(!s->h263_pred);
614 
615  if (s->pict_type == AV_PICTURE_TYPE_P) {
616  do{
617  if (get_bits1(&s->gb)) {
618  /* skip mb */
619  s->mb_intra = 0;
620  for(i=0;i<6;i++)
621  s->block_last_index[i] = -1;
622  s->mv_dir = MV_DIR_FORWARD;
623  s->mv_type = MV_TYPE_16X16;
625  s->mv[0][0][0] = 0;
626  s->mv[0][0][1] = 0;
627  s->mb_skipped = !(s->obmc | s->loop_filter);
628  goto end;
629  }
630  cbpc = get_vlc2(&s->gb, ff_h263_inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
631  if (cbpc < 0){
632  av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
633  return -1;
634  }
635  }while(cbpc == 20);
636 
637  s->dsp.clear_blocks(s->block[0]);
638 
639  dquant = cbpc & 8;
640  s->mb_intra = ((cbpc & 4) != 0);
641  if (s->mb_intra) goto intra;
642 
643  if(s->pb_frame && get_bits1(&s->gb))
644  pb_mv_count = h263_get_modb(&s->gb, s->pb_frame, &cbpb);
645  cbpy = get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1);
646 
647  if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
648  cbpy ^= 0xF;
649 
650  cbp = (cbpc & 3) | (cbpy << 2);
651  if (dquant) {
653  }
654 
655  s->mv_dir = MV_DIR_FORWARD;
656  if ((cbpc & 16) == 0) {
658  /* 16x16 motion prediction */
659  s->mv_type = MV_TYPE_16X16;
660  ff_h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
661  if (s->umvplus)
662  mx = h263p_decode_umotion(s, pred_x);
663  else
664  mx = ff_h263_decode_motion(s, pred_x, 1);
665 
666  if (mx >= 0xffff)
667  return -1;
668 
669  if (s->umvplus)
670  my = h263p_decode_umotion(s, pred_y);
671  else
672  my = ff_h263_decode_motion(s, pred_y, 1);
673 
674  if (my >= 0xffff)
675  return -1;
676  s->mv[0][0][0] = mx;
677  s->mv[0][0][1] = my;
678 
679  if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
680  skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
681  } else {
683  s->mv_type = MV_TYPE_8X8;
684  for(i=0;i<4;i++) {
685  mot_val = ff_h263_pred_motion(s, i, 0, &pred_x, &pred_y);
686  if (s->umvplus)
687  mx = h263p_decode_umotion(s, pred_x);
688  else
689  mx = ff_h263_decode_motion(s, pred_x, 1);
690  if (mx >= 0xffff)
691  return -1;
692 
693  if (s->umvplus)
694  my = h263p_decode_umotion(s, pred_y);
695  else
696  my = ff_h263_decode_motion(s, pred_y, 1);
697  if (my >= 0xffff)
698  return -1;
699  s->mv[0][i][0] = mx;
700  s->mv[0][i][1] = my;
701  if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
702  skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
703  mot_val[0] = mx;
704  mot_val[1] = my;
705  }
706  }
707  } else if(s->pict_type==AV_PICTURE_TYPE_B) {
708  int mb_type;
709  const int stride= s->b8_stride;
710  int16_t *mot_val0 = s->current_picture.motion_val[0][2 * (s->mb_x + s->mb_y * stride)];
711  int16_t *mot_val1 = s->current_picture.motion_val[1][2 * (s->mb_x + s->mb_y * stride)];
712 // const int mv_xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
713 
714  //FIXME ugly
715  mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*stride]= mot_val0[2+2*stride]=
716  mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*stride]= mot_val0[3+2*stride]=
717  mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*stride]= mot_val1[2+2*stride]=
718  mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*stride]= mot_val1[3+2*stride]= 0;
719 
720  do{
721  mb_type= get_vlc2(&s->gb, h263_mbtype_b_vlc.table, H263_MBTYPE_B_VLC_BITS, 2);
722  if (mb_type < 0){
723  av_log(s->avctx, AV_LOG_ERROR, "b mb_type damaged at %d %d\n", s->mb_x, s->mb_y);
724  return -1;
725  }
726 
727  mb_type= h263_mb_type_b_map[ mb_type ];
728  }while(!mb_type);
729 
730  s->mb_intra = IS_INTRA(mb_type);
731  if(HAS_CBP(mb_type)){
732  s->dsp.clear_blocks(s->block[0]);
733  cbpc = get_vlc2(&s->gb, cbpc_b_vlc.table, CBPC_B_VLC_BITS, 1);
734  if(s->mb_intra){
735  dquant = IS_QUANT(mb_type);
736  goto intra;
737  }
738 
739  cbpy = get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1);
740 
741  if (cbpy < 0){
742  av_log(s->avctx, AV_LOG_ERROR, "b cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
743  return -1;
744  }
745 
746  if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
747  cbpy ^= 0xF;
748 
749  cbp = (cbpc & 3) | (cbpy << 2);
750  }else
751  cbp=0;
752 
753  av_assert2(!s->mb_intra);
754 
755  if(IS_QUANT(mb_type)){
757  }
758 
759  if(IS_DIRECT(mb_type)){
761  mb_type |= ff_mpeg4_set_direct_mv(s, 0, 0);
762  }else{
763  s->mv_dir = 0;
765 //FIXME UMV
766 
767  if(USES_LIST(mb_type, 0)){
768  int16_t *mot_val= ff_h263_pred_motion(s, 0, 0, &mx, &my);
769  s->mv_dir = MV_DIR_FORWARD;
770 
771  mx = ff_h263_decode_motion(s, mx, 1);
772  my = ff_h263_decode_motion(s, my, 1);
773 
774  s->mv[0][0][0] = mx;
775  s->mv[0][0][1] = my;
776  mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
777  mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
778  }
779 
780  if(USES_LIST(mb_type, 1)){
781  int16_t *mot_val= ff_h263_pred_motion(s, 0, 1, &mx, &my);
782  s->mv_dir |= MV_DIR_BACKWARD;
783 
784  mx = ff_h263_decode_motion(s, mx, 1);
785  my = ff_h263_decode_motion(s, my, 1);
786 
787  s->mv[1][0][0] = mx;
788  s->mv[1][0][1] = my;
789  mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
790  mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
791  }
792  }
793 
794  s->current_picture.mb_type[xy] = mb_type;
795  } else { /* I-Frame */
796  do{
797  cbpc = get_vlc2(&s->gb, ff_h263_intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
798  if (cbpc < 0){
799  av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
800  return -1;
801  }
802  }while(cbpc == 8);
803 
804  s->dsp.clear_blocks(s->block[0]);
805 
806  dquant = cbpc & 4;
807  s->mb_intra = 1;
808 intra:
810  if (s->h263_aic) {
811  s->ac_pred = get_bits1(&s->gb);
812  if(s->ac_pred){
814 
815  s->h263_aic_dir = get_bits1(&s->gb);
816  }
817  }else
818  s->ac_pred = 0;
819 
820  if(s->pb_frame && get_bits1(&s->gb))
821  pb_mv_count = h263_get_modb(&s->gb, s->pb_frame, &cbpb);
822  cbpy = get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1);
823  if(cbpy<0){
824  av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
825  return -1;
826  }
827  cbp = (cbpc & 3) | (cbpy << 2);
828  if (dquant) {
830  }
831 
832  pb_mv_count += !!s->pb_frame;
833  }
834 
835  while(pb_mv_count--){
836  ff_h263_decode_motion(s, 0, 1);
837  ff_h263_decode_motion(s, 0, 1);
838  }
839 
840  /* decode each block */
841  for (i = 0; i < 6; i++) {
842  if (h263_decode_block(s, block[i], i, cbp&32) < 0)
843  return -1;
844  cbp+=cbp;
845  }
846 
847  if(s->pb_frame && h263_skip_b_part(s, cbpb) < 0)
848  return -1;
849  if(s->obmc && !s->mb_intra){
850  if(s->pict_type == AV_PICTURE_TYPE_P && s->mb_x+1<s->mb_width && s->mb_num_left != 1)
851  preview_obmc(s);
852  }
853 end:
854 
855  /* per-MB end of slice check */
856  {
857  int v= show_bits(&s->gb, 16);
858 
859  if (get_bits_left(&s->gb) < 16) {
860  v >>= 16 - get_bits_left(&s->gb);
861  }
862 
863  if(v==0)
864  return SLICE_END;
865  }
866 
867  return SLICE_OK;
868 }
869 
870 /* most is hardcoded. should extend to handle all h263 streams */
872 {
873  int format, width, height, i;
874  uint32_t startcode;
875 
876  align_get_bits(&s->gb);
877 
878  startcode= get_bits(&s->gb, 22-8);
879 
880  for(i= get_bits_left(&s->gb); i>24; i-=8) {
881  startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
882 
883  if(startcode == 0x20)
884  break;
885  }
886 
887  if (startcode != 0x20) {
888  av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
889  return -1;
890  }
891  /* temporal reference */
892  i = get_bits(&s->gb, 8); /* picture timestamp */
893  if( (s->picture_number&~0xFF)+i < s->picture_number)
894  i+= 256;
896  s->picture_number= (s->picture_number&~0xFF) + i;
897 
898  /* PTYPE starts here */
899  if (get_bits1(&s->gb) != 1) {
900  /* marker */
901  av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
902  return -1;
903  }
904  if (get_bits1(&s->gb) != 0) {
905  av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
906  return -1; /* h263 id */
907  }
908  skip_bits1(&s->gb); /* split screen off */
909  skip_bits1(&s->gb); /* camera off */
910  skip_bits1(&s->gb); /* freeze picture release off */
911 
912  format = get_bits(&s->gb, 3);
913  /*
914  0 forbidden
915  1 sub-QCIF
916  10 QCIF
917  7 extended PTYPE (PLUSPTYPE)
918  */
919 
920  if (format != 7 && format != 6) {
921  s->h263_plus = 0;
922  /* H.263v1 */
923  width = ff_h263_format[format][0];
924  height = ff_h263_format[format][1];
925  if (!width)
926  return -1;
927 
929 
930  s->h263_long_vectors = get_bits1(&s->gb);
931 
932  if (get_bits1(&s->gb) != 0) {
933  av_log(s->avctx, AV_LOG_ERROR, "H263 SAC not supported\n");
934  return -1; /* SAC: off */
935  }
936  s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
937  s->unrestricted_mv = s->h263_long_vectors || s->obmc;
938 
939  s->pb_frame = get_bits1(&s->gb);
940  s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
941  skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
942 
943  s->width = width;
944  s->height = height;
945  s->avctx->sample_aspect_ratio= (AVRational){12,11};
946  s->avctx->time_base= (AVRational){1001, 30000};
947  } else {
948  int ufep;
949 
950  /* H.263v2 */
951  s->h263_plus = 1;
952  ufep = get_bits(&s->gb, 3); /* Update Full Extended PTYPE */
953 
954  /* ufep other than 0 and 1 are reserved */
955  if (ufep == 1) {
956  /* OPPTYPE */
957  format = get_bits(&s->gb, 3);
958  av_dlog(s->avctx, "ufep=1, format: %d\n", format);
959  s->custom_pcf= get_bits1(&s->gb);
960  s->umvplus = get_bits1(&s->gb); /* Unrestricted Motion Vector */
961  if (get_bits1(&s->gb) != 0) {
962  av_log(s->avctx, AV_LOG_ERROR, "Syntax-based Arithmetic Coding (SAC) not supported\n");
963  }
964  s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
965  s->h263_aic = get_bits1(&s->gb); /* Advanced Intra Coding (AIC) */
966  s->loop_filter= get_bits1(&s->gb);
967  s->unrestricted_mv = s->umvplus || s->obmc || s->loop_filter;
968  if(s->avctx->lowres)
969  s->loop_filter = 0;
970 
972  if (get_bits1(&s->gb) != 0) {
973  av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n");
974  }
975  if (get_bits1(&s->gb) != 0) {
976  av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n");
977  }
978  s->alt_inter_vlc= get_bits1(&s->gb);
979  s->modified_quant= get_bits1(&s->gb);
980  if(s->modified_quant)
982 
983  skip_bits(&s->gb, 1); /* Prevent start code emulation */
984 
985  skip_bits(&s->gb, 3); /* Reserved */
986  } else if (ufep != 0) {
987  av_log(s->avctx, AV_LOG_ERROR, "Bad UFEP type (%d)\n", ufep);
988  return -1;
989  }
990 
991  /* MPPTYPE */
992  s->pict_type = get_bits(&s->gb, 3);
993  switch(s->pict_type){
994  case 0: s->pict_type= AV_PICTURE_TYPE_I;break;
995  case 1: s->pict_type= AV_PICTURE_TYPE_P;break;
996  case 2: s->pict_type= AV_PICTURE_TYPE_P;s->pb_frame = 3;break;
997  case 3: s->pict_type= AV_PICTURE_TYPE_B;break;
998  case 7: s->pict_type= AV_PICTURE_TYPE_I;break; //ZYGO
999  default:
1000  return -1;
1001  }
1002  skip_bits(&s->gb, 2);
1003  s->no_rounding = get_bits1(&s->gb);
1004  skip_bits(&s->gb, 4);
1005 
1006  /* Get the picture dimensions */
1007  if (ufep) {
1008  if (format == 6) {
1009  /* Custom Picture Format (CPFMT) */
1010  s->aspect_ratio_info = get_bits(&s->gb, 4);
1011  av_dlog(s->avctx, "aspect: %d\n", s->aspect_ratio_info);
1012  /* aspect ratios:
1013  0 - forbidden
1014  1 - 1:1
1015  2 - 12:11 (CIF 4:3)
1016  3 - 10:11 (525-type 4:3)
1017  4 - 16:11 (CIF 16:9)
1018  5 - 40:33 (525-type 16:9)
1019  6-14 - reserved
1020  */
1021  width = (get_bits(&s->gb, 9) + 1) * 4;
1022  skip_bits1(&s->gb);
1023  height = get_bits(&s->gb, 9) * 4;
1024  av_dlog(s->avctx, "\nH.263+ Custom picture: %dx%d\n",width,height);
1026  /* aspected dimensions */
1027  s->avctx->sample_aspect_ratio.num= get_bits(&s->gb, 8);
1028  s->avctx->sample_aspect_ratio.den= get_bits(&s->gb, 8);
1029  }else{
1031  }
1032  } else {
1033  width = ff_h263_format[format][0];
1034  height = ff_h263_format[format][1];
1035  s->avctx->sample_aspect_ratio= (AVRational){12,11};
1036  }
1037  if ((width == 0) || (height == 0))
1038  return -1;
1039  s->width = width;
1040  s->height = height;
1041 
1042  if(s->custom_pcf){
1043  int gcd;
1044  s->avctx->time_base.den= 1800000;
1045  s->avctx->time_base.num= 1000 + get_bits1(&s->gb);
1046  s->avctx->time_base.num*= get_bits(&s->gb, 7);
1047  if(s->avctx->time_base.num == 0){
1048  av_log(s, AV_LOG_ERROR, "zero framerate\n");
1049  return -1;
1050  }
1051  gcd= av_gcd(s->avctx->time_base.den, s->avctx->time_base.num);
1052  s->avctx->time_base.den /= gcd;
1053  s->avctx->time_base.num /= gcd;
1054  }else{
1055  s->avctx->time_base= (AVRational){1001, 30000};
1056  }
1057  }
1058 
1059  if(s->custom_pcf){
1060  skip_bits(&s->gb, 2); //extended Temporal reference
1061  }
1062 
1063  if (ufep) {
1064  if (s->umvplus) {
1065  if(get_bits1(&s->gb)==0) /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
1066  skip_bits1(&s->gb);
1067  }
1068  if(s->h263_slice_structured){
1069  if (get_bits1(&s->gb) != 0) {
1070  av_log(s->avctx, AV_LOG_ERROR, "rectangular slices not supported\n");
1071  }
1072  if (get_bits1(&s->gb) != 0) {
1073  av_log(s->avctx, AV_LOG_ERROR, "unordered slices not supported\n");
1074  }
1075  }
1076  }
1077 
1078  s->qscale = get_bits(&s->gb, 5);
1079  }
1080 
1081  if (s->width == 0 || s->height == 0) {
1082  av_log(s->avctx, AV_LOG_ERROR, "dimensions 0\n");
1083  return -1;
1084  }
1085  s->mb_width = (s->width + 15) / 16;
1086  s->mb_height = (s->height + 15) / 16;
1087  s->mb_num = s->mb_width * s->mb_height;
1088 
1089  if (s->pb_frame) {
1090  skip_bits(&s->gb, 3); /* Temporal reference for B-pictures */
1091  if (s->custom_pcf)
1092  skip_bits(&s->gb, 2); //extended Temporal reference
1093  skip_bits(&s->gb, 2); /* Quantization information for B-pictures */
1094  }
1095 
1096  if (s->pict_type!=AV_PICTURE_TYPE_B) {
1097  s->time = s->picture_number;
1098  s->pp_time = s->time - s->last_non_b_time;
1099  s->last_non_b_time = s->time;
1100  }else{
1101  s->time = s->picture_number;
1102  s->pb_time = s->pp_time - (s->last_non_b_time - s->time);
1103  if (s->pp_time <=s->pb_time ||
1104  s->pp_time <= s->pp_time - s->pb_time ||
1105  s->pp_time <= 0){
1106  s->pp_time = 2;
1107  s->pb_time = 1;
1108  }
1110  }
1111 
1112  /* PEI */
1113  while (get_bits1(&s->gb) != 0) {
1114  skip_bits(&s->gb, 8);
1115  }
1116 
1117  if(s->h263_slice_structured){
1118  if (get_bits1(&s->gb) != 1) {
1119  av_log(s->avctx, AV_LOG_ERROR, "SEPB1 marker missing\n");
1120  return -1;
1121  }
1122 
1123  ff_h263_decode_mba(s);
1124 
1125  if (get_bits1(&s->gb) != 1) {
1126  av_log(s->avctx, AV_LOG_ERROR, "SEPB2 marker missing\n");
1127  return -1;
1128  }
1129  }
1130  s->f_code = 1;
1131 
1132  if(s->h263_aic){
1133  s->y_dc_scale_table=
1135  }else{
1136  s->y_dc_scale_table=
1138  }
1139 
1141  if (s->pict_type == AV_PICTURE_TYPE_I && s->codec_tag == AV_RL32("ZYGO") && get_bits_left(&s->gb) >= 85 + 13*3*16 + 50){
1142  int i,j;
1143  for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
1144  av_log(s->avctx, AV_LOG_DEBUG, "\n");
1145  for(i=0; i<13; i++){
1146  for(j=0; j<3; j++){
1147  int v= get_bits(&s->gb, 8);
1148  v |= get_sbits(&s->gb, 8)<<8;
1149  av_log(s->avctx, AV_LOG_DEBUG, " %5d", v);
1150  }
1151  av_log(s->avctx, AV_LOG_DEBUG, "\n");
1152  }
1153  for(i=0; i<50; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
1154  }
1155 
1156  return 0;
1157 }
int rv10_first_dc_coded[3]
Definition: mpegvideo.h:621
int last
number of values for last = 0
Definition: rl.h:40
#define MB_TYPE_SKIP
float v
int aspect_ratio_info
Definition: mpegvideo.h:585
int picture_number
Definition: mpegvideo.h:275
const char * s
Definition: avisynth_c.h:668
ScanTable intra_v_scantable
Definition: mpegvideo.h:298
const uint8_t ff_cbpc_b_tab[4][2]
Definition: h263data.h:78
static int h263_decode_gob_header(MpegEncContext *s)
Decode the group of blocks header or slice header.
Definition: ituh263dec.c:152
static int shift(int a, int b)
Definition: sonic.c:86
VLC ff_h263_inter_MCBPC_vlc
Definition: ituh263dec.c:94
#define CBPY_VLC_BITS
Definition: h263.h:35
const uint8_t * y_dc_scale_table
qscale -> y_dc_scale table
Definition: mpegvideo.h:351
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
RLTable ff_h263_rl_inter
Definition: h263data.h:162
const uint8_t ff_h263_intra_MCBPC_code[9]
Definition: h263data.h:36
const uint8_t ff_h263_cbpy_tab[16][2]
Definition: h263data.h:85
int num
numerator
Definition: rational.h:44
#define MB_TYPE_INTRA4x4
enum AVCodecID codec_id
Definition: mpegvideo.h:257
void ff_init_rl(RLTable *rl, uint8_t static_store[2][2 *MAX_RUN+MAX_LEVEL+3])
Definition: mpegvideo.c:1304
int obmc
overlapped block motion compensation
Definition: mpegvideo.h:538
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
static int h263_decode_block(MpegEncContext *s, int16_t *block, int n, int coded)
Definition: ituh263dec.c:442
#define MB_TYPE_QUANT
mpegvideo header.
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
uint8_t permutated[64]
Definition: dsputil.h:116
const int8_t * table_level
Definition: rl.h:43
uint8_t run
Definition: svq3.c:136
const uint16_t ff_h263_format[8][2]
Definition: h263data.h:239
#define SLICE_OK
Definition: mpegvideo.h:703
int mb_num
number of MBs of a picture
Definition: mpegvideo.h:282
void(* clear_block)(int16_t *block)
Definition: dsputil.h:145
int stride
Definition: mace.c:144
RLTable.
Definition: rl.h:38
int qscale
QP.
Definition: mpegvideo.h:369
const uint8_t ff_modified_quant_tab[2][32]
Definition: h263data.h:253
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:225
int h263_aic
Advanded INTRA Coding (AIC)
Definition: mpegvideo.h:292
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
Definition: h263.c:315
#define USES_LIST(a, list)
does this mb use listX, note does not work if subMBs
Definition: mpegvideo.h:156
#define HAS_CBP(a)
Definition: mpegvideo.h:157
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
int modified_quant
Definition: mpegvideo.h:550
int alt_inter_vlc
alternative inter vlc
Definition: mpegvideo.h:549
int mb_num_left
number of MBs left in this video packet (for partitioned Slices only)
Definition: mpegvideo.h:530
int64_t time
time of current frame
Definition: mpegvideo.h:558
#define MB_TYPE_INTRA
Definition: mpegvideo.h:134
#define MV_DIRECT
bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4) ...
Definition: mpegvideo.h:419
uint8_t
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:63
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
Definition: get_bits.h:445
const uint8_t ff_h263_intra_MCBPC_bits[9]
Definition: h263data.h:37
const uint8_t ff_mvtab[33][2]
Definition: h263data.h:91
end end
static VLC h263_mbtype_b_vlc
Definition: ituh263dec.c:97
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:159
int no_rounding
apply no rounding to motion compensation (MPEG4, msmpeg4, ...) for b-frames rounding mode is always 0...
Definition: mpegvideo.h:439
const uint8_t ff_h263_inter_MCBPC_bits[28]
Definition: h263data.h:50
int resync_marker
could this stream contain resync markers
Definition: mpegvideo.h:591
Picture current_picture
copy of the current picture structure.
Definition: mpegvideo.h:343
GetBitContext last_resync_gb
used to search for the next resync marker
Definition: mpegvideo.h:529
#define IS_QUANT(a)
Definition: mpegvideo.h:154
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
RLTable ff_rl_intra_aic
Definition: h263data.h:231
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
#define av_restrict
Definition: config.h:9
uint16_t pp_time
time distance between the last 2 p,s,i frames
Definition: mpegvideo.h:560
int mb_height
number of MBs horizontally & vertically
Definition: mpegvideo.h:277
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size
static int h263_skip_b_part(MpegEncContext *s, int cbp)
Definition: ituh263dec.c:565
int codec_tag
internal codec_tag upper case converted from avctx codec_tag
Definition: mpegvideo.h:267
const AVRational ff_h263_pixel_aspect[16]
Definition: h263data.h:280
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
Definition: mpegvideo.c:3300
const uint8_t ff_mba_length[7]
Definition: h263data.h:271
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
#define H263_MBTYPE_B_VLC_BITS
Definition: ituh263dec.c:50
int h263_plus
h263 plus headers
Definition: mpegvideo.h:254
int last_dc[3]
last DC values for MPEG1
Definition: mpegvideo.h:348
int mb_skipped
MUST BE SET only during DECODING.
Definition: mpegvideo.h:358
int unrestricted_mv
mv can point outside of the coded picture
Definition: mpegvideo.h:388
int ff_h263_decode_motion(MpegEncContext *s, int pred, int f_code)
Definition: ituh263dec.c:273
static const int h263_mb_type_b_map[15]
Definition: ituh263dec.c:53
int h263_slice_structured
Definition: mpegvideo.h:548
#define INTER_MCBPC_VLC_BITS
Definition: h263.h:34
void(* clear_blocks)(int16_t *blocks)
Definition: dsputil.h:146
int64_t av_gcd(int64_t a, int64_t b)
Return the greatest common divisor of a and b.
Definition: mathematics.c:55
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
void ff_mpeg4_init_direct_mv(MpegEncContext *s)
Definition: mpeg4video.c:78
#define IS_INTRA(a)
Definition: mpegvideo.h:138
static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb)
Definition: ituh263dec.c:587
GetBitContext gb
Definition: mpegvideo.h:649
VLC vlc
decoding only deprecated FIXME remove
Definition: rl.h:47
#define INIT_VLC_RL(rl, static_size)
Definition: rl.h:59
external API header
Definition: get_bits.h:63
common internal API header
struct AVRational AVRational
rational number numerator/denominator
int n
number of entries of table_vlc minus 1
Definition: rl.h:39
int err_recognition
Definition: mpegvideo.h:532
#define CONFIG_MPEG4_DECODER
Definition: config.h:530
#define MB_TYPE_DIRECT2
int umvplus
== H263+ && unrestricted_mv
Definition: mpegvideo.h:546
ret
Definition: avfilter.c:821
int16_t(*[2] motion_val)[2]
Definition: mpegvideo.h:105
Picture * current_picture_ptr
pointer to the current picture
Definition: mpegvideo.h:347
int size_in_bits
Definition: get_bits.h:57
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer 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
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:255
const int8_t * table_run
Definition: rl.h:42
#define MB_TYPE_L0L1
const uint16_t ff_mba_max[6]
Definition: h263data.h:267
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:524
#define AV_RL32
int block_last_index[12]
last non zero coefficient in block
Definition: mpegvideo.h:291
int pb_frame
PB frame mode (0 = none, 1 = base, 2 = improved)
Definition: mpegvideo.h:251
#define MB_TYPE_ACPRED
#define diff(a, as, b, bs)
Definition: vf_phase.c:80
VLC ff_h263_cbpy_vlc
Definition: ituh263dec.c:95
#define MB_TYPE_L1
const uint8_t ff_aic_dc_scale_table[32]
Definition: h263data.h:248
int ff_h263_decode_mba(MpegEncContext *s)
Definition: ituh263dec.c:134
FIXME Range Coding of cr are level
Definition: snow.txt:367
const uint8_t ff_h263_inter_MCBPC_code[28]
Definition: h263data.h:41
static int h263p_decode_umotion(MpegEncContext *s, int pred)
Definition: ituh263dec.c:311
int block_index[6]
index to current MB in block based arrays with edges
Definition: mpegvideo.h:465
static const float pred[4]
Definition: siprdata.h:259
static const int8_t mv[256][2]
#define MV_TYPE_16X16
1 vector for the whole mb
Definition: mpegvideo.h:421
#define MV_VLC_BITS
Definition: ituh263dec.c:49
void ff_h263_decode_init_vlc(void)
Definition: ituh263dec.c:103
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
#define MV_DIR_BACKWARD
Definition: mpegvideo.h:418
static int width
Definition: tests/utils.c:158
int64_t last_non_b_time
Definition: mpegvideo.h:559
int h263_flv
use flv h263 header
Definition: mpegvideo.h:255
uint8_t ff_h263_static_rl_table_store[2][2][2 *MAX_RUN+MAX_LEVEL+3]
Definition: h263.c:45
ScanTable intra_scantable
Definition: mpegvideo.h:296
int height
picture size. must be a multiple of 16
Definition: mpegvideo.h:245
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
const uint8_t ff_mpeg1_dc_scale_table[128]
Definition: mpegvideo.c:72
#define SLICE_END
end marker found
Definition: mpegvideo.h:705
VLC ff_h263_intra_MCBPC_vlc
Definition: ituh263dec.c:93
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:298
ScanTable intra_h_scantable
Definition: mpegvideo.h:297
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:265
#define TEX_VLC_BITS
Definition: dvdata.h:96
synthesis window for stochastic i
#define CBPC_B_VLC_BITS
Definition: ituh263dec.c:51
#define MB_TYPE_16x16
#define CONFIG_FLV_DECODER
Definition: config.h:492
DSPContext dsp
pointers for accelerated dsp functions
Definition: mpegvideo.h:391
static VLC mv_vlc
Definition: ituh263dec.c:96
int ff_h263_resync(MpegEncContext *s)
Decode the group of blocks / video packet header.
Definition: ituh263dec.c:231
int f_code
forward MV resolution
Definition: mpegvideo.h:395
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)
Definition: mpeg4video.c:121
int ff_h263_decode_picture_header(MpegEncContext *s)
Definition: ituh263dec.c:871
#define MV_DIR_FORWARD
Definition: mpegvideo.h:417
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
Definition: mpegvideo.h:377
const uint8_t ff_h263_mbtype_b_tab[15][2]
Definition: h263data.h:60
static av_const int sign_extend(int val, unsigned bits)
Definition: mathops.h:123
static void h263_decode_dquant(MpegEncContext *s)
Definition: ituh263dec.c:429
int h263_pred
use mpeg4/h263 ac/dc predictions
Definition: mpegvideo.h:250
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s)
Definition: mpeg4video.c:29
const uint8_t * c_dc_scale_table
qscale -> c_dc_scale table
Definition: mpegvideo.h:352
#define FF_ASPECT_EXTENDED
#define FF_DEBUG_PICT_INFO
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second " : depend...
Definition: mpegvideo.h:431
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing
Definition: mpegvideo.h:279
MpegEncContext.
Definition: mpegvideo.h:241
struct AVCodecContext * avctx
Definition: mpegvideo.h:243
#define MB_TYPE_CBP
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
Definition: mpegvideo.h:278
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
void ff_h263_pred_acdc(MpegEncContext *s, int16_t *block, int n)
Definition: h263.c:228
const uint8_t ff_h263_chroma_qscale_table[32]
Definition: h263data.h:262
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
Definition: unary.h:33
static double c[64]
#define MB_TYPE_8x8
int ff_rv_decode_dc(MpegEncContext *s, int n)
Definition: rv10.c:190
Bi-dir predicted.
Definition: avutil.h:218
#define AV_EF_BITSTREAM
int den
denominator
Definition: rational.h:45
const uint8_t * chroma_qscale_table
qscale -> chroma_qscale (h263)
Definition: mpegvideo.h:353
static VLC cbpc_b_vlc
Definition: ituh263dec.c:98
void ff_h263_show_pict_info(MpegEncContext *s)
Print picture info if FF_DEBUG_PICT_INFO is set.
Definition: ituh263dec.c:71
#define IS_DIRECT(a)
Definition: mpegvideo.h:143
int16_t(* block)[64]
points to one of the following blocks
Definition: mpegvideo.h:700
VLC_TYPE(* table)[2]
code, bits
Definition: get_bits.h:65
#define AV_EF_COMPLIANT
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:418
int chroma_qscale
chroma QP
Definition: mpegvideo.h:370
struct AVFrame f
Definition: mpegvideo.h:98
static void preview_obmc(MpegEncContext *s)
read the next MVs for OBMC.
Definition: ituh263dec.c:337
uint32_t * mb_type
Definition: mpegvideo.h:108
#define LOCAL_ALIGNED_16(t, v,...)
int rv10_version
RV10 version: 0 or 3.
Definition: mpegvideo.h:620
int ff_mpeg4_decode_video_packet_header(MpegEncContext *s)
Decode the next video packet.
int h263_long_vectors
use horrible h263v1 long vector mode
Definition: mpegvideo.h:389
#define MV_TYPE_8X8
4 vectors (h263, mpeg4 4MV)
Definition: mpegvideo.h:422
int h263_aic_dir
AIC direction: 0 = left, 1 = top.
Definition: mpegvideo.h:547
void ff_flv2_decode_ac_esc(GetBitContext *gb, int *level, int *run, int *last)
const uint8_t * ff_h263_find_resync_marker(MpegEncContext *s, const uint8_t *av_restrict p, const uint8_t *av_restrict end)
Find the next resync_marker.
Definition: ituh263dec.c:209
int ff_h263_decode_mb(MpegEncContext *s, int16_t block[6][64])
Definition: ituh263dec.c:605
#define MB_TYPE_L0
Predicted.
Definition: avutil.h:217
#define INTRA_MCBPC_VLC_BITS
Definition: h263.h:33
uint16_t pb_time
time distance between the last b and p,s,i frame
Definition: mpegvideo.h:561