Mercurial > libavcodec.hg
comparison h263.c @ 9104:fd301ba2cbba libavcodec
Enable PB-frames decoding for H.263
author | kostya |
---|---|
date | Tue, 03 Mar 2009 05:18:39 +0000 |
parents | b626fed816d7 |
children | a031926f7d6b |
comparison
equal
deleted
inserted
replaced
9103:b626fed816d7 | 9104:fd301ba2cbba |
---|---|
5102 return -1; /* SAC: off */ | 5102 return -1; /* SAC: off */ |
5103 } | 5103 } |
5104 s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */ | 5104 s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */ |
5105 s->unrestricted_mv = s->h263_long_vectors || s->obmc; | 5105 s->unrestricted_mv = s->h263_long_vectors || s->obmc; |
5106 | 5106 |
5107 if (get_bits1(&s->gb) != 0) { | 5107 s->pb_frame = get_bits1(&s->gb); |
5108 av_log(s->avctx, AV_LOG_ERROR, "H263 PB frame not supported\n"); | |
5109 return -1; /* not PB frame */ | |
5110 } | |
5111 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5); | 5108 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5); |
5112 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ | 5109 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ |
5113 | 5110 |
5114 s->width = width; | 5111 s->width = width; |
5115 s->height = height; | 5112 s->height = height; |
5160 /* MPPTYPE */ | 5157 /* MPPTYPE */ |
5161 s->pict_type = get_bits(&s->gb, 3); | 5158 s->pict_type = get_bits(&s->gb, 3); |
5162 switch(s->pict_type){ | 5159 switch(s->pict_type){ |
5163 case 0: s->pict_type= FF_I_TYPE;break; | 5160 case 0: s->pict_type= FF_I_TYPE;break; |
5164 case 1: s->pict_type= FF_P_TYPE;break; | 5161 case 1: s->pict_type= FF_P_TYPE;break; |
5162 case 2: s->pict_type= FF_P_TYPE;s->pb_frame = 3;break; | |
5165 case 3: s->pict_type= FF_B_TYPE;break; | 5163 case 3: s->pict_type= FF_B_TYPE;break; |
5166 case 7: s->pict_type= FF_I_TYPE;break; //ZYGO | 5164 case 7: s->pict_type= FF_I_TYPE;break; //ZYGO |
5167 default: | 5165 default: |
5168 return -1; | 5166 return -1; |
5169 } | 5167 } |
5248 } | 5246 } |
5249 | 5247 |
5250 s->mb_width = (s->width + 15) / 16; | 5248 s->mb_width = (s->width + 15) / 16; |
5251 s->mb_height = (s->height + 15) / 16; | 5249 s->mb_height = (s->height + 15) / 16; |
5252 s->mb_num = s->mb_width * s->mb_height; | 5250 s->mb_num = s->mb_width * s->mb_height; |
5251 | |
5252 if (s->pb_frame) { | |
5253 skip_bits(&s->gb, 3); /* Temporal reference for B-pictures */ | |
5254 if (s->custom_pcf) | |
5255 skip_bits(&s->gb, 2); //extended Temporal reference | |
5256 skip_bits(&s->gb, 2); /* Quantization information for B-pictures */ | |
5257 } | |
5253 | 5258 |
5254 /* PEI */ | 5259 /* PEI */ |
5255 while (get_bits1(&s->gb) != 0) { | 5260 while (get_bits1(&s->gb) != 0) { |
5256 skip_bits(&s->gb, 8); | 5261 skip_bits(&s->gb, 8); |
5257 } | 5262 } |