示例#1
0
/*
 * Compression: void *ptr is a struct of AvgDCT to be filled with the
 * calculations preformed on the AvgDCTScalled array in the closure. 
 */
void applyCompToAvgDCTScaled(int col, int row, A2 toBeFilled, void* ptr,
                              void* cl) {
    (void) toBeFilled;
    struct Closure* mycl = cl;
    struct AvgDCTScaled* toBeSet = ptr;
    struct AvgDCT* original = mycl->methods->at(mycl->array, col, row);
    toBeSet->pb = Arith40_index_of_chroma(original->pb);
    toBeSet->pr = Arith40_index_of_chroma(original->pr);
    toBeSet->a = (unsigned)(original->a * 511);
    toBeSet->b = convertToScaledInt(original->b);
    toBeSet->c = convertToScaledInt(original->c);
    toBeSet->d = convertToScaledInt(original->d);
}
示例#2
0
文件: pack40.c 项目: byung01/arith
 */
static bitWord initialize_bitWord(UArray_T block)
{
        bitWord word = malloc(sizeof(*word));
        word = set_chroma_index(block, word);
        word = cosine_transform(block, word);
        return word;
}

static bitWord set_chroma_index(UArray_T block, bitWord word)
{
        Average average = {.Pba = 0.0, .Pra = 0.0};

        average = find_average(block, average);

        unsigned Pba_chroma = Arith40_index_of_chroma(average.Pba);
        unsigned Pra_chroma = Arith40_index_of_chroma(average.Pra);
        
        word->Pba = Pba_chroma;
        word->Pra = Pra_chroma;

        return word;
}

static Average find_average(UArray_T block, Average average)
{
        for (int i = 0; i < UArray_length(block); i++) {
                CV temp = (CV)UArray_at(block, i);
                (average.Pba) += temp->Pb;
                (average.Pra) += temp->Pr;
        }
示例#3
0
/* Takes the average chroma value (Pb or Pr) and returns the quantized
 * representation of the given value
 */
unsigned getIndex(float x)
{
       return Arith40_index_of_chroma(x); 
}