ControlSeqParser::~ControlSeqParser() { if (m_values != NULL) { free(m_values); } freeLookup(); }
void makeLookup(int bitspersamp, int firstSampleIsMSB, int isSigned) { unsigned char bitmask; int negVal; int negConv; int i, j, k; int x; if (lookupTableValid[bitspersamp]) { freeLookup(bitspersamp); } // make the lookup table... switch (bitspersamp) { case 1: bitmask = 0x01; negVal = 1; negConv = 2; break; case 2: bitmask = 0x03; negVal = 2; negConv = 4; break; case 4: bitmask = 0x0F; negVal = 8; negConv = 16; break; case 8: bitmask = 0xFF; negVal = 128; negConv = 256; break; default: fprintf(stderr,"phx: Cannot deal with %d bit data!\n",bitspersamp); exit(9); } x = 8/(bitspersamp) - 1; lookupTable[bitspersamp] = malloc(sizeof(float*)* 8/(bitspersamp)); for (i = 0; i < 8/(bitspersamp); i++) { lookupTable[bitspersamp][i] = malloc(256*sizeof(float)); for (j = 0; j < 256; j++) {//=bitspersamp){ k = j; if (firstSampleIsMSB) k = k >> ((x-i)*bitspersamp); else k = k >> ((i)*bitspersamp); k = k & bitmask; if (isSigned && k >= negVal) k = k - negConv; lookupTable[bitspersamp][i][j] = (float)k; //printf("%02x\t%02x\t%d %d\n",i,j, k,negVal); } }
/** * newLookup * Initializes the lookup-table **/ void newLookup( int n, int m ) { int i, j; if ( lookup != NULL ) freeLookup(); lookup = (int **) malloc( (lookup_n = n) * sizeof(int *)); for ( i = 0; i < lookup_n; i++ ) { lookup[i] = (int *) malloc( m * sizeof(int) ); for ( j = 0; j < m; j++ ) lookup[i][j] = -1; } lookup[0][0] = pointDistance(0, 0); for ( j = 1; j < m; j++ ) lookup[0][j] = lookup[0][j-1] + pointDistance(0, j); for ( i = 1; i < n; i++ ) lookup[i][0] = lookup[i-1][0] + pointDistance(i, 0); }