void image_chroma_optimize(IMAGE * img, int width, int height, int edged_width) { int x,y; int pixels = 0; for (y = 1; y < height/2 - 1; y++) for (x = 1; x < width/2 - 1; x++) { #define IS_PURE(a) ((a)<=16||(a)>=235) #define IMG_Y(Y,X) img->y[(Y)*edged_width + (X)] #define IMG_U(Y,X) img->u[(Y)*edged_width/2 + (X)] #define IMG_V(Y,X) img->v[(Y)*edged_width/2 + (X)] if (IS_PURE(IMG_Y(y*2 ,x*2 )) && IS_PURE(IMG_Y(y*2 ,x*2+1)) && IS_PURE(IMG_Y(y*2+1,x*2 )) && IS_PURE(IMG_Y(y*2+1,x*2+1))) { IMG_U(y,x) = (IMG_U(y,x-1) + IMG_U(y-1, x) + IMG_U(y, x+1) + IMG_U(y+1, x)) / 4; IMG_V(y,x) = (IMG_V(y,x-1) + IMG_V(y-1, x) + IMG_V(y, x+1) + IMG_V(y+1, x)) / 4; pixels++; } #undef IS_PURE #undef IMG_Y #undef IMG_U #undef IMG_V } DPRINTF(H264_DEBUG_DEBUG,"chroma_optimized_pixels = %i/%i\n", pixels, width*height/4); }
static void optimize(te_expr *n) { /* Evaluates as much as possible. */ if (n->type == TE_CONSTANT) return; if (n->type == TE_VARIABLE) return; /* Only optimize out functions flagged as pure. */ if (IS_PURE(n->type)) { const int arity = ARITY(n->type); int known = 1; int i; for (i = 0; i < arity; ++i) { optimize(n->parameters[i]); if (((te_expr*)(n->parameters[i]))->type != TE_CONSTANT) { known = 0; } } if (known) { const double value = te_eval(n); te_free_parameters(n); n->type = TE_CONSTANT; n->value = value; } } }