diff options
author | Juanjo <pulento@users.sourceforge.net> | 2001-11-13 01:21:35 +0000 |
---|---|---|
committer | Juanjo <pulento@users.sourceforge.net> | 2001-11-13 01:21:35 +0000 |
commit | 8547282b6c4b3a0e23ba98640d7e3c1d49dd8af5 (patch) | |
tree | 2f4fffb4b5718dbff7a1f82fe465148174783b4f /libavcodec/h263.c | |
parent | 102d39088bb9cfb08cc9f78d8e6eca62ed39bded (diff) | |
download | ffmpeg-8547282b6c4b3a0e23ba98640d7e3c1d49dd8af5.tar.gz |
- Bug fix on MV prediction for MPEG4 caused by new H.263 GOB code.
Originally committed as revision 215 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263.c')
-rw-r--r-- | libavcodec/h263.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c index 91d9629ae8..b22f4ab560 100644 --- a/libavcodec/h263.c +++ b/libavcodec/h263.c @@ -782,29 +782,32 @@ int h263_decode_mb(MpegEncContext *s, unsigned int gfid; /* Check for GOB Start Code */ - val = show_bits(&s->gb, 16); - - if (val == 0) { - /* We have a GBSC probably with GSTUFF */ - //skip_bits(&s->gb, 16); /* Drop the zeros */ - while (get_bits1(&s->gb) == 0); /* Seek the '1' bit */ + if (s->mb_x == 0) { + val = show_bits(&s->gb, 16); + if (val == 0) { + /* We have a GBSC probably with GSTUFF */ + skip_bits(&s->gb, 16); /* Drop the zeros */ + while (get_bits1(&s->gb) == 0); /* Seek the '1' bit */ #ifdef DEBUG - fprintf(stderr,"\nGOB Start Code at MB %d\n", - (s->mb_y * s->mb_width) + s->mb_x); + fprintf(stderr,"\nGOB Start Code at MB %d\n", + (s->mb_y * s->mb_width) + s->mb_x); #endif - s->gob_number = get_bits(&s->gb, 5); /* GN */ - gfid = get_bits(&s->gb, 2); /* GFID */ - s->qscale = get_bits(&s->gb, 5); /* GQUANT */ + s->gob_number = get_bits(&s->gb, 5); /* GN */ + gfid = get_bits(&s->gb, 2); /* GFID */ + s->qscale = get_bits(&s->gb, 5); /* GQUANT */ #ifdef DEBUG - fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", gn, gfid, s->qscale); + fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", gn, gfid, s->qscale); #endif + } } - - if (s->mb_y == s->gob_number) - s->first_gob_line = 1; - else - s->first_gob_line = 0; - + /* FIXME: In the future H.263+ will have intra prediction */ + /* and we are gonna need another way to detect MPEG4 */ + if (!s->h263_pred) { + if (s->mb_y == s->gob_number) + s->first_gob_line = 1; + else + s->first_gob_line = 0; + } if (s->pict_type == P_TYPE) { if (get_bits1(&s->gb)) { /* skip mb */ @@ -1215,10 +1218,9 @@ int h263_decode_picture_header(MpegEncContext *s) skip_bits1(&s->gb); /* camera off */ skip_bits1(&s->gb); /* freeze picture release off */ - /* Reset GOB data */ + /* Reset GOB number */ s->gob_number = 0; - s->first_gob_line = 0; - + format = get_bits(&s->gb, 3); if (format != 7) { |