#include "include/define.h" void lpf(pel_t **res[3],int height[3],int width[3]){ /* loop filter */ int comp,m,n,mprime,nprime,size; pel_t temp[_MB_SIZE_][_MB_SIZE_]; //Step through Y,U,V for(comp = _Y_; comp <= _V_; comp++){ size = ( comp==_Y_ ? _MB_SIZE_ : _BLOCK_SIZE_); //Step through the MB for(m = 0; m < height[comp]; m += size) for(n = 0; n < width[comp]; n += size){ //Convolve Row-wise for(mprime = 0; mprime < size; mprime++) for(nprime = 0; nprime < size; nprime++) if((nprime == 0) || (nprime == (size-1))) temp[mprime][nprime] = res[comp][m+mprime][n+nprime]; else temp[mprime][nprime] = 0.25*res[comp][m+mprime][n+nprime-1]+ 0.5*res[comp][m+mprime][n+nprime]+ 0.25*res[comp][m+mprime][n+nprime+1]; //Convolve Collumn-wise for(mprime = 0; mprime < size; mprime++) for(nprime = 0; nprime < size; nprime++){ if((mprime == 0) || (mprime == (size-1))) res[comp][m+mprime][n+nprime] = temp[mprime][nprime]; else res[comp][m+mprime][n+nprime] = 0.25*temp[mprime-1][nprime]+ 0.5*temp[mprime][nprime]+ 0.25*temp[mprime+1][nprime]; } }//for n }//for comp //round to nearest int for(comp = _Y_; comp <= _V_; comp++) for(m = 0; m < height[comp]; m++) for(n = 0; n < width[comp]; n++) res[comp][m][n]=(int)(res[comp][m][n]+0.5); }