# HG changeset patch # User iive # Date 1019149688 0 # Node ID 47daf6075bc6329bce48aad0e0a6128bdb386c8b # Parent 588237bcd14c562cb2b15b0d354ac80fbd28754f fixed block artefacts and speedup at the same time diff -r 588237bcd14c -r 47daf6075bc6 libmpcodecs/native/roqav.c --- a/libmpcodecs/native/roqav.c Thu Apr 18 16:45:25 2002 +0000 +++ b/libmpcodecs/native/roqav.c Thu Apr 18 17:08:08 2002 +0000 @@ -64,6 +64,7 @@ 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 @@ (roqvideo_info *)calloc(sizeof(roqvideo_info), 1); info->prev_frame = NULL; + info->numframe=0; return info; } @@ -386,9 +388,11 @@ 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 @@ } // save the current frame as the previous frame for the next iteration + info->numframe++; info->prev_frame = mpi; }