Beispiel #1
0
void VP8CalculateLevelCosts(VP8EncProba* const proba) {
    int ctype, band, ctx;

    if (!proba->dirty_) return;  // nothing to do.

    for (ctype = 0; ctype < NUM_TYPES; ++ctype) {
        int n;
        for (band = 0; band < NUM_BANDS; ++band) {
            for (ctx = 0; ctx < NUM_CTX; ++ctx) {
                const uint8_t* const p = proba->coeffs_[ctype][band][ctx];
                uint16_t* const table = proba->level_cost_[ctype][band][ctx];
                const int cost0 = (ctx > 0) ? VP8BitCost(1, p[0]) : 0;
                const int cost_base = VP8BitCost(1, p[1]) + cost0;
                int v;
                table[0] = VP8BitCost(0, p[1]) + cost0;
                for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) {
                    table[v] = cost_base + VariableLevelCost(v, p);
                }
                // Starting at level 67 and up, the variable part of the cost is
                // actually constant.
            }
        }
        for (n = 0; n < 16; ++n) {    // replicate bands. We don't need to sentinel.
            for (ctx = 0; ctx < NUM_CTX; ++ctx) {
                proba->remapped_costs_[ctype][n][ctx] =
                    proba->level_cost_[ctype][VP8EncBands[n]][ctx];
            }
        }
    }
    proba->dirty_ = 0;
}
Beispiel #2
0
void VP8CalculateLevelCosts(VP8Proba* const proba) {
  int ctype, band, ctx;
  for (ctype = 0; ctype < NUM_TYPES; ++ctype) {
    for (band = 0; band < NUM_BANDS; ++band) {
      for(ctx = 0; ctx < NUM_CTX; ++ctx) {
        const uint8_t* const p = proba->coeffs_[ctype][band][ctx];
        uint16_t* const table = proba->level_cost_[ctype][band][ctx];
        const int cost_base = VP8BitCost(1, p[1]);
        int v;
        table[0] = VP8BitCost(0, p[1]);
        for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) {
          table[v] = cost_base + VariableLevelCost(v, p);
        }
        // Starting at level 67 and up, the variable part of the cost is
        // actually constant.
      }
    }
  }
}