Mercurial > libavcodec.hg
comparison motion_est.c @ 608:98e39397636b libavcodec
better scene change detection
author | michaelni |
---|---|
date | Thu, 22 Aug 2002 19:41:06 +0000 |
parents | 4d41fe7eb780 |
children | c0005de2be59 |
comparison
equal
deleted
inserted
replaced
607:5762b2d659d2 | 608:98e39397636b |
---|---|
1181 sum = pix_sum(pix, s->linesize); | 1181 sum = pix_sum(pix, s->linesize); |
1182 | 1182 |
1183 sum= (sum+8)>>4; | 1183 sum= (sum+8)>>4; |
1184 varc = (pix_norm1(pix, s->linesize) - sum*sum + 500 + 128)>>8; | 1184 varc = (pix_norm1(pix, s->linesize) - sum*sum + 500 + 128)>>8; |
1185 vard = (pix_norm(pix, ppix, s->linesize)+128)>>8; | 1185 vard = (pix_norm(pix, ppix, s->linesize)+128)>>8; |
1186 | |
1186 //printf("%d %d %d %X %X %X\n", s->mb_width, mb_x, mb_y,(int)s, (int)s->mb_var, (int)s->mc_mb_var); fflush(stdout); | 1187 //printf("%d %d %d %X %X %X\n", s->mb_width, mb_x, mb_y,(int)s, (int)s->mb_var, (int)s->mc_mb_var); fflush(stdout); |
1187 s->mb_var [s->mb_width * mb_y + mb_x] = varc; | 1188 s->mb_var [s->mb_width * mb_y + mb_x] = varc; |
1188 s->mc_mb_var[s->mb_width * mb_y + mb_x] = vard; | 1189 s->mc_mb_var[s->mb_width * mb_y + mb_x] = vard; |
1189 s->mb_var_sum += varc; | 1190 s->mb_var_sum += varc; |
1190 s->mc_mb_var_sum += vard; | 1191 s->mc_mb_var_sum += vard; |
1193 #if 0 | 1194 #if 0 |
1194 printf("varc=%4d avg_var=%4d (sum=%4d) vard=%4d mx=%2d my=%2d\n", | 1195 printf("varc=%4d avg_var=%4d (sum=%4d) vard=%4d mx=%2d my=%2d\n", |
1195 varc, s->avg_mb_var, sum, vard, mx - xx, my - yy); | 1196 varc, s->avg_mb_var, sum, vard, mx - xx, my - yy); |
1196 #endif | 1197 #endif |
1197 if(s->flags&CODEC_FLAG_HQ){ | 1198 if(s->flags&CODEC_FLAG_HQ){ |
1199 if (vard <= 64 || vard < varc) | |
1200 s->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc); | |
1201 else | |
1202 s->scene_change_score+= 20; | |
1203 | |
1198 if (vard*2 + 200 > varc) | 1204 if (vard*2 + 200 > varc) |
1199 mb_type|= MB_TYPE_INTRA; | 1205 mb_type|= MB_TYPE_INTRA; |
1200 if (varc*2 + 200 > vard){ | 1206 if (varc*2 + 200 > vard){ |
1201 mb_type|= MB_TYPE_INTER; | 1207 mb_type|= MB_TYPE_INTER; |
1202 if(s->me_method >= ME_EPZS) | 1208 if(s->me_method >= ME_EPZS) |
1219 set_p_mv_tables(s, mx, my, 0); | 1225 set_p_mv_tables(s, mx, my, 0); |
1220 }else | 1226 }else |
1221 set_p_mv_tables(s, mx, my, 1); | 1227 set_p_mv_tables(s, mx, my, 1); |
1222 }else{ | 1228 }else{ |
1223 if (vard <= 64 || vard < varc) { | 1229 if (vard <= 64 || vard < varc) { |
1230 s->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc); | |
1224 mb_type|= MB_TYPE_INTER; | 1231 mb_type|= MB_TYPE_INTER; |
1225 if (s->me_method != ME_ZERO) { | 1232 if (s->me_method != ME_ZERO) { |
1226 if(s->me_method >= ME_EPZS) | 1233 if(s->me_method >= ME_EPZS) |
1227 dmin= fast_halfpel_motion_search(s, &mx, &my, dmin, rel_xmin, rel_ymin, rel_xmax, rel_ymax, | 1234 dmin= fast_halfpel_motion_search(s, &mx, &my, dmin, rel_xmin, rel_ymin, rel_xmax, rel_ymax, |
1228 pred_x, pred_y, ref_picture, pix_abs16x16_x2, pix_abs16x16_y2, | 1235 pred_x, pred_y, ref_picture, pix_abs16x16_x2, pix_abs16x16_y2, |
1249 fprintf(stderr,"\nEarly skip: %d vard: %2d varc: %5d dmin: %d", | 1256 fprintf(stderr,"\nEarly skip: %d vard: %2d varc: %5d dmin: %d", |
1250 skip, vard, varc, dmin); | 1257 skip, vard, varc, dmin); |
1251 } | 1258 } |
1252 #endif | 1259 #endif |
1253 }else{ | 1260 }else{ |
1261 s->scene_change_score+= 20; | |
1254 mb_type|= MB_TYPE_INTRA; | 1262 mb_type|= MB_TYPE_INTRA; |
1255 mx = 0; | 1263 mx = 0; |
1256 my = 0; | 1264 my = 0; |
1257 } | 1265 } |
1258 } | 1266 } |