summaryrefslogtreecommitdiff
path: root/src/libmpeg2/slice_xvmc_vld.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmpeg2/slice_xvmc_vld.c')
-rw-r--r--src/libmpeg2/slice_xvmc_vld.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/libmpeg2/slice_xvmc_vld.c b/src/libmpeg2/slice_xvmc_vld.c
index 3c177d97a..3647c7386 100644
--- a/src/libmpeg2/slice_xvmc_vld.c
+++ b/src/libmpeg2/slice_xvmc_vld.c
@@ -146,7 +146,6 @@ void mpeg2_xxmc_slice( mpeg2dec_accel_t *accel, picture_t *picture,
vft->backward_reference_frame = picture->backward_reference_frame;
xxmc->proc_xxmc_begin( frame );
if (xxmc->result != 0) {
- xxmc->proc_xxmc_flush( frame );
accel->xvmc_last_slice_code=-1;
}
}
@@ -164,9 +163,9 @@ void mpeg2_xxmc_slice( mpeg2dec_accel_t *accel, picture_t *picture,
xxmc->slice_data = chunk_buffer;
xxmc->slice_code = code;
- xxmc->proc_xxmc_slice( frame );
+ xxmc->proc_xxmc_slice( frame );
+
if (xxmc->result != 0) {
- xxmc->proc_xxmc_flush( frame );
accel->xvmc_last_slice_code=-1;
return;
}
@@ -188,7 +187,6 @@ void mpeg2_xxmc_slice( mpeg2dec_accel_t *accel, picture_t *picture,
lprintf("libmpeg2: VLD XvMC: Slice error.\n");
accel->xvmc_last_slice_code = -1;
- xxmc->proc_xxmc_flush( frame );
return;
}
}
@@ -200,7 +198,11 @@ void mpeg2_xxmc_vld_frame_complete(mpeg2dec_accel_t *accel, picture_t *picture,
xine_xxmc_t
*xxmc = (xine_xxmc_t *) frame->accel_data;
- if (xxmc->decoded || (accel->xvmc_last_slice_code == -1)) return;
+ if (xxmc->decoded) return;
+ if (accel->xvmc_last_slice_code == -1) {
+ xxmc->proc_xxmc_flush( frame );
+ return;
+ }
if ((code != 0xff) || ((accel->xvmc_last_slice_code ==
accel->xxmc_mb_pic_height) &&