Sto lavorando/rivedendo un progetto sviluppato da una softwarehouse scritto in c#. Ora senza andare nei particolari questo programma riceve dei forogrammi da diverse telecamere USB ad alta risoluzione (2000 x 3000), gli elabora per trovare la larghezza di un materiale che passa sotto la telecamera. In pratica, nel fotogramma, rileva due fronti, ne calcola la distanza in pixel e ne ricava poi la misura. Ora una parte dell'elaborazione, dove viene passato il frame ed eleborato, la fa una dll scritta in C++ (di cui ho il sorgente ovviamente) ma non capisco cosa faccia esattamente.
Qualcuno me la può interpretare?

codice:
  __declspec(dllexport) void pcBuildProfiles(unsigned char * pImage,int iWidth, int iHeight,int iWidthStep, int iLaserOrientation,int threshold, float * fvCentroids,float * fvWeights,int iVectorDim)
  {
		unsigned int *ivCentr;
		unsigned int *ivWeight;
		unsigned int *ivCentrRun;
		unsigned int *ivWeightRun;

		CleanVector(fvCentroids,iVectorDim);
		CleanVector(fvWeights,iVectorDim);
        ivCentr =(unsigned int *)malloc(iVectorDim*sizeof(unsigned int));
        ivWeight =(unsigned int *)malloc(iVectorDim*sizeof(float));
		memset(ivCentr,0,iVectorDim*sizeof(unsigned int));
		memset(ivWeight,0,iVectorDim*sizeof(unsigned int)
            int x;
            int y;
            unsigned char * pPixel;
            unsigned char Pixel;

			ivCentrRun=ivCentr;
			ivWeightRun=ivWeight;

            for (y = 0; y < iHeight; y++)
            {
				pPixel= pImage;
                pPixel +=iWidthStep* y;
                for (x = 0; x < iWidth; x++, pPixel++)
                {
                    Pixel = *pPixel;
                    if (Pixel > threshold)
                    {
                        Pixel -= threshold;
                        *ivCentrRun += (Pixel * x);
                        *ivWeightRun +=  Pixel;
                    }
                }
                if (ivWeightRun > 0)
                {
                    fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
                    fvWeights[y] = (float)*ivWeightRun;
                }
				ivCentrRun++;
				ivWeightRun++;
            }
       		free(ivCentr);
		free(ivWeight);
  }