Alpha encoding: never filter in case of NO_COMPRESSION

This is because, filtering would never affect compression density for
this case.

Change-Id: I4bb14d3eb7da0a3805fda140eb1dfbf9ccc134f5
This commit is contained in:
Urvang Joshi 2013-06-14 13:32:51 -07:00
parent 86daf77c47
commit 8cf0701eb0

View File

@ -217,6 +217,8 @@ static void InitFilterTrial(FilterTrial* const score) {
VP8BitWriterInit(&score->bw, 0); VP8BitWriterInit(&score->bw, 0);
} }
// TODO(urvang): This method name is misleading. Should be renamed to
// ApplyFiltersAndEncode() perhaps.
static int ApplyFilters(const uint8_t* alpha, int width, int height, static int ApplyFilters(const uint8_t* alpha, int width, int height,
size_t data_size, int method, int filter, size_t data_size, int method, int filter,
int reduce_levels, int effort_level, int reduce_levels, int effort_level,
@ -224,8 +226,11 @@ static int ApplyFilters(const uint8_t* alpha, int width, int height,
WebPAuxStats* const stats) { WebPAuxStats* const stats) {
int ok = 1; int ok = 1;
uint8_t* filtered_alpha = NULL; uint8_t* filtered_alpha = NULL;
uint32_t try_map = GetFilterMap(alpha, width, height, filter, effort_level); uint32_t try_map =
GetFilterMap(alpha, width, height, filter, effort_level);
// TODO(urvang): In case of no filtering, this malloc is unnecessary. Also,
// the whole loop below should be avoided in that case.
filtered_alpha = (uint8_t*)malloc(data_size); filtered_alpha = (uint8_t*)malloc(data_size);
ok = (filtered_alpha != NULL); ok = (filtered_alpha != NULL);
@ -296,6 +301,11 @@ static int EncodeAlpha(VP8Encoder* const enc,
return 0; return 0;
} }
if (method == ALPHA_NO_COMPRESSION) {
// Don't filter, as filtering will make no impact on compressed size.
filter = WEBP_FILTER_NONE;
}
quant_alpha = (uint8_t*)malloc(data_size); quant_alpha = (uint8_t*)malloc(data_size);
if (quant_alpha == NULL) { if (quant_alpha == NULL) {
return 0; return 0;