Mercurial > libavcodec.hg
changeset 3053:2991dc513726 libavcodec
detect when iterative_me fails to converge, and stop searching
author | lorenm |
---|---|
date | Thu, 19 Jan 2006 09:21:39 +0000 |
parents | 6c3f87300378 |
children | d640e46c69ea |
files | snow.c |
diffstat | 1 files changed, 16 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/snow.c Thu Jan 19 00:19:15 2006 +0000 +++ b/snow.c Thu Jan 19 09:21:39 2006 +0000 @@ -25,6 +25,8 @@ #include "mpegvideo.h" +#include <zlib.h> + #undef NDEBUG #include <assert.h> @@ -3301,6 +3303,8 @@ const int b_height= s->b_height << s->block_max_depth; const int b_stride= b_width; int color[3]; + const int first_crc_pass= 12; + uint32_t crcs[50]; for(pass=0; pass<50; pass++){ int change= 0; @@ -3435,6 +3439,18 @@ } } av_log(NULL, AV_LOG_ERROR, "pass:%d changed:%d\n", pass, change); + + if(pass >= first_crc_pass){ + int i; + //FIXME can we hash just the blocks that were analysed? + crcs[pass]= crc32(crc32(0,NULL,0), (void*)s->block, b_stride*b_height*sizeof(BlockNode)); + for(i=pass-1; i>=first_crc_pass; i--){ + if(crcs[i] == crcs[pass]){ + change= 0; + break; + } + } + } if(!change) break; }