mirror of
				https://github.com/webmproject/libwebp.git
				synced 2025-10-31 18:35:41 +01:00 
			
		
		
		
	Speedup to HuffmanCostCombinedCount
~3% speedup for lossless encoding Improves compression ratio by ~0.03% Change-Id: Ic6d05fb0b1099b5ca56689b92b1c6515d54a5d6b
This commit is contained in:
		| @@ -1143,24 +1143,18 @@ static VP8LStreaks HuffmanCostCombinedCount(const uint32_t* X, | ||||
|                                             const uint32_t* Y, int length) { | ||||
|   int i; | ||||
|   int streak = 0; | ||||
|   uint32_t xy_prev = 0xffffffff; | ||||
|   VP8LStreaks stats; | ||||
|   memset(&stats, 0, sizeof(stats)); | ||||
|   for (i = 0; i < length - 1; ++i) { | ||||
|     const int xy = X[i] + Y[i]; | ||||
|     const int xy_next = X[i + 1] + Y[i + 1]; | ||||
|   for (i = 0; i < length; ++i) { | ||||
|     const uint32_t xy = X[i] + Y[i]; | ||||
|     ++streak; | ||||
|     if (xy == xy_next) { | ||||
|       continue; | ||||
|     } | ||||
|     if (xy != xy_prev) { | ||||
|     stats.counts[xy != 0] += (streak > 3); | ||||
|     stats.streaks[xy != 0][(streak > 3)] += streak; | ||||
|     streak = 0; | ||||
|       xy_prev = xy; | ||||
|   } | ||||
|   { | ||||
|     const int xy = X[i] + Y[i]; | ||||
|     ++streak; | ||||
|     stats.counts[xy != 0] += (streak > 3); | ||||
|     stats.streaks[xy != 0][(streak > 3)] += streak; | ||||
|   } | ||||
|   return stats; | ||||
| } | ||||
|   | ||||
| @@ -245,29 +245,22 @@ static VP8LStreaks HuffmanCostCombinedCount(const uint32_t* X, | ||||
|                                             const uint32_t* Y, int length) { | ||||
|   int i; | ||||
|   int streak = 0; | ||||
|   uint32_t xy_prev = 0xffffffff; | ||||
|   VP8LStreaks stats; | ||||
|   int* const pstreaks = &stats.streaks[0][0]; | ||||
|   int* const pcnts = &stats.counts[0]; | ||||
|   int temp0, temp1, temp2, temp3; | ||||
|   memset(&stats, 0, sizeof(stats)); | ||||
|   for (i = 0; i < length - 1; ++i) { | ||||
|   for (i = 0; i < length; ++i) { | ||||
|     const uint32_t xy = X[i] + Y[i]; | ||||
|     const uint32_t xy_next = X[i + 1] + Y[i + 1]; | ||||
|     ++streak; | ||||
|     if (xy == xy_next) { | ||||
|       continue; | ||||
|     } | ||||
|     if (xy != xy_prev) { | ||||
|       temp0 = (xy != 0); | ||||
|       HUFFMAN_COST_PASS | ||||
|       streak = 0; | ||||
|       xy_prev = xy; | ||||
|   } | ||||
|   { | ||||
|     const uint32_t xy = X[i] + Y[i]; | ||||
|     ++streak; | ||||
|     temp0 = (xy != 0); | ||||
|     HUFFMAN_COST_PASS | ||||
|   } | ||||
|  | ||||
|   return stats; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user