aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/h263.c
diff options
context:
space:
mode:
authorJuanjo <pulento@users.sourceforge.net>2001-11-13 01:21:35 +0000
committerJuanjo <pulento@users.sourceforge.net>2001-11-13 01:21:35 +0000
commit8547282b6c4b3a0e23ba98640d7e3c1d49dd8af5 (patch)
tree2f4fffb4b5718dbff7a1f82fe465148174783b4f /libavcodec/h263.c
parent102d39088bb9cfb08cc9f78d8e6eca62ed39bded (diff)
downloadffmpeg-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.c44
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) {