diff options
author | Thomas Hellström <totte67@users.sourceforge.net> | 2005-01-30 18:01:25 +0000 |
---|---|---|
committer | Thomas Hellström <totte67@users.sourceforge.net> | 2005-01-30 18:01:25 +0000 |
commit | 204bc7799afd8ea60e34036d94a9051703e4848f (patch) | |
tree | 18c8e9e72b27b454d527edc5986b5b33ab254d2b /src/libmpeg2/slice_xvmc_vld.c | |
parent | 8277e17065942e71e3d9edc8cea27cd014209e5e (diff) | |
download | xine-lib-204bc7799afd8ea60e34036d94a9051703e4848f.tar.gz xine-lib-204bc7799afd8ea60e34036d94a9051703e4848f.tar.bz2 |
**BUGFIX**
Bug 1092411
Makes XvMC handle cases where each slice is split into more than two parts.
This got broken on IDCT / MOCOMP with a previous commit to fix a search
segfault. Has never worked before with VLD.
Still IDCT / MOCOMP exhibit bad picture quality in this case but not worse
than before it got broken.
CVS patchset: 7375
CVS date: 2005/01/30 18:01:25
Diffstat (limited to 'src/libmpeg2/slice_xvmc_vld.c')
-rw-r--r-- | src/libmpeg2/slice_xvmc_vld.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libmpeg2/slice_xvmc_vld.c b/src/libmpeg2/slice_xvmc_vld.c index 006aea275..f099bc22a 100644 --- a/src/libmpeg2/slice_xvmc_vld.c +++ b/src/libmpeg2/slice_xvmc_vld.c @@ -192,7 +192,8 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture, int code, } } - if ((code == mpeg2dec->xvmc_last_slice_code + 1) && + if (((code == mpeg2dec->xvmc_last_slice_code + 1) || + (code == mpeg2dec->xvmc_last_slice_code)) && code <= mpeg2dec->xxmc_mb_pic_height) { /* @@ -220,6 +221,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture, int code, * went well, tell libmpeg2 that we are ready. */ + mpeg2dec->xvmc_last_slice_code = code; mpeg2_xxmc_vld_frame_complete(mpeg2dec,picture,code); return; } else { @@ -228,7 +230,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture, int code, * Keep track of slices. */ - mpeg2dec->xvmc_last_slice_code++; + mpeg2dec->xvmc_last_slice_code = code; } } else { @@ -259,7 +261,6 @@ void mpeg2_xxmc_vld_frame_complete(mpeg2dec_t *mpeg2dec, picture_t *picture, int return; } xxmc->decoded = 1; - mpeg2dec->xvmc_last_slice_code++; if (picture->picture_structure == 3 || picture->second_field) { if (xxmc->result == 0) frame->bad_frame = 0; |