summaryrefslogtreecommitdiff
path: root/libavcodec/h263.c
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2009-03-03 05:18:39 +0000
committerKostya Shishkov <kostya.shishkov@gmail.com>2009-03-03 05:18:39 +0000
commitc978997a88267d046c752fb2c0599de81f38f4ae (patch)
tree84d04cfeb625933eebf3f5b853e93d893e9e52da /libavcodec/h263.c
parent685502cf3dce8c48aa530001c58ed37bad59d74a (diff)
Enable PB-frames decoding for H.263
Originally committed as revision 17746 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263.c')
-rw-r--r--libavcodec/h263.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index 4a1f8496ec..b2adae6e8a 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -5104,10 +5104,7 @@ int h263_decode_picture_header(MpegEncContext *s)
s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
s->unrestricted_mv = s->h263_long_vectors || s->obmc;
- if (get_bits1(&s->gb) != 0) {
- av_log(s->avctx, AV_LOG_ERROR, "H263 PB frame not supported\n");
- return -1; /* not PB frame */
- }
+ s->pb_frame = get_bits1(&s->gb);
s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
@@ -5162,6 +5159,7 @@ int h263_decode_picture_header(MpegEncContext *s)
switch(s->pict_type){
case 0: s->pict_type= FF_I_TYPE;break;
case 1: s->pict_type= FF_P_TYPE;break;
+ case 2: s->pict_type= FF_P_TYPE;s->pb_frame = 3;break;
case 3: s->pict_type= FF_B_TYPE;break;
case 7: s->pict_type= FF_I_TYPE;break; //ZYGO
default:
@@ -5251,6 +5249,13 @@ int h263_decode_picture_header(MpegEncContext *s)
s->mb_height = (s->height + 15) / 16;
s->mb_num = s->mb_width * s->mb_height;
+ if (s->pb_frame) {
+ skip_bits(&s->gb, 3); /* Temporal reference for B-pictures */
+ if (s->custom_pcf)
+ skip_bits(&s->gb, 2); //extended Temporal reference
+ skip_bits(&s->gb, 2); /* Quantization information for B-pictures */
+ }
+
/* PEI */
while (get_bits1(&s->gb) != 0) {
skip_bits(&s->gb, 8);