From 9a1a85ec2efc945e577cd21f0ed28605cb04cd2d Mon Sep 17 00:00:00 2001 From: iive Date: Thu, 18 Apr 2002 17:08:08 +0000 Subject: fixed block artefacts and speedup at the same time git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5685 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/native/roqav.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'libmpcodecs/native') diff --git a/libmpcodecs/native/roqav.c b/libmpcodecs/native/roqav.c index a32bdade20..dfc41a92cb 100644 --- a/libmpcodecs/native/roqav.c +++ b/libmpcodecs/native/roqav.c @@ -64,6 +64,7 @@ typedef struct roq_v2_codebook v2[MAX_ROQ_CODEBOOK_SIZE]; roq_v4_codebook v4[MAX_ROQ_CODEBOOK_SIZE]; mp_image_t *prev_frame; + uint32_t numframe; } roqvideo_info; @@ -232,6 +233,7 @@ void *roq_decode_video_init(void) (roqvideo_info *)calloc(sizeof(roqvideo_info), 1); info->prev_frame = NULL; + info->numframe=0; return info; } @@ -386,9 +388,11 @@ void roq_decode_video(void *context, unsigned char *encoded, mean_motion_y = encoded[stream_ptr++]; mean_motion_x = encoded[stream_ptr++]; - // start by copying entire previous frame - if (info->prev_frame) + //RoQ reuses its buffers so a transparent block keeps content + //from 2 frames ago. The only exception is 2'd frame (#1) + if(info->numframe==1) { + CHECK_PREV_FRAME(); memcpy(mpi->planes[0], info->prev_frame->planes[0], mpi->width * mpi->height); memcpy(mpi->planes[1], info->prev_frame->planes[1], @@ -606,6 +610,7 @@ void roq_decode_video(void *context, unsigned char *encoded, } // save the current frame as the previous frame for the next iteration + info->numframe++; info->prev_frame = mpi; } -- cgit v1.2.3