Improve sort_modes.

- When encoding with fast enough settings this function can use up to 5%
  of the cpu time, so I tried to optimize it a little bit.
This commit is contained in:
Ari Koivula 2015-02-04 14:27:38 +02:00
parent 5fa6438b25
commit 1c2129fdcb

View file

@ -1306,16 +1306,23 @@ static int8_t search_intra_chroma(encoder_state * const encoder_state,
} }
static void sort_modes(int8_t *modes, double *costs, int length) /**
* \brief Sort modes and costs to ascending order according to costs.
*/
static void sort_modes(int8_t *modes, double *costs, uint8_t length)
{ {
int i, j; // Length is usually 5-23, so just use insertion sort.
for (i = 0; i < length; ++i) { for (uint8_t i = 1; i < length; ++i) {
j = i; const double cur_cost = costs[i];
while (j > 0 && costs[j] < costs[j - 1]) { const int8_t cur_mode = modes[i];
SWAP(costs[j], costs[j - 1], double); uint8_t j = i;
SWAP(modes[j], modes[j - 1], int8_t); while (j > 0 && cur_cost < costs[j - 1]) {
costs[j] = costs[j - 1];
modes[j] = modes[j - 1];
--j; --j;
} }
costs[j] = cur_cost;
modes[j] = cur_mode;
} }
} }