| OLD | NEW |
| 1 // Copyright 2012 Google Inc. All Rights Reserved. | 1 // Copyright 2012 Google Inc. All Rights Reserved. |
| 2 // | 2 // |
| 3 // Use of this source code is governed by a BSD-style license | 3 // Use of this source code is governed by a BSD-style license |
| 4 // that can be found in the COPYING file in the root of the source | 4 // that can be found in the COPYING file in the root of the source |
| 5 // tree. An additional intellectual property rights grant can be found | 5 // tree. An additional intellectual property rights grant can be found |
| 6 // in the file PATENTS. All contributing project authors may | 6 // in the file PATENTS. All contributing project authors may |
| 7 // be found in the AUTHORS file in the root of the source tree. | 7 // be found in the AUTHORS file in the root of the source tree. |
| 8 // ----------------------------------------------------------------------------- | 8 // ----------------------------------------------------------------------------- |
| 9 // | 9 // |
| 10 // Rescaling functions | 10 // Rescaling functions |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 wrk->x_add = wrk->x_expand ? (x_sub - 1) : x_add; | 41 wrk->x_add = wrk->x_expand ? (x_sub - 1) : x_add; |
| 42 wrk->x_sub = wrk->x_expand ? (x_add - 1) : x_sub; | 42 wrk->x_sub = wrk->x_expand ? (x_add - 1) : x_sub; |
| 43 if (!wrk->x_expand) { // fx_scale is not used otherwise | 43 if (!wrk->x_expand) { // fx_scale is not used otherwise |
| 44 wrk->fx_scale = WEBP_RESCALER_FRAC(1, wrk->x_sub); | 44 wrk->fx_scale = WEBP_RESCALER_FRAC(1, wrk->x_sub); |
| 45 } | 45 } |
| 46 // vertical scaling parameters | 46 // vertical scaling parameters |
| 47 wrk->y_add = wrk->y_expand ? y_add - 1 : y_add; | 47 wrk->y_add = wrk->y_expand ? y_add - 1 : y_add; |
| 48 wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub; | 48 wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub; |
| 49 wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add; | 49 wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add; |
| 50 if (!wrk->y_expand) { | 50 if (!wrk->y_expand) { |
| 51 // this is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast. | 51 // This is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast. |
| 52 // Its value is <= WEBP_RESCALER_ONE, because dst_height <= wrk->y_add, and |
| 53 // wrk->x_add >= 1; |
| 52 const uint64_t ratio = | 54 const uint64_t ratio = |
| 53 (uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add); | 55 (uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add); |
| 54 if (ratio != (uint32_t)ratio) { | 56 if (ratio != (uint32_t)ratio) { |
| 55 // We can't represent the ratio with the current fixed-point precision. | 57 // When ratio == WEBP_RESCALER_ONE, we can't represent the ratio with the |
| 58 // current fixed-point precision. This happens when src_height == |
| 59 // wrk->y_add (which == src_height), and wrk->x_add == 1. |
| 56 // => We special-case fxy_scale = 0, in WebPRescalerExportRow(). | 60 // => We special-case fxy_scale = 0, in WebPRescalerExportRow(). |
| 57 wrk->fxy_scale = 0; | 61 wrk->fxy_scale = 0; |
| 58 } else { | 62 } else { |
| 59 wrk->fxy_scale = (uint32_t)ratio; | 63 wrk->fxy_scale = (uint32_t)ratio; |
| 60 } | 64 } |
| 61 wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->y_sub); | 65 wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->y_sub); |
| 62 } else { | 66 } else { |
| 63 wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->x_add); | 67 wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->x_add); |
| 64 // wrk->fxy_scale is unused here. | 68 // wrk->fxy_scale is unused here. |
| 65 } | 69 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 int WebPRescalerExport(WebPRescaler* const rescaler) { | 137 int WebPRescalerExport(WebPRescaler* const rescaler) { |
| 134 int total_exported = 0; | 138 int total_exported = 0; |
| 135 while (WebPRescalerHasPendingOutput(rescaler)) { | 139 while (WebPRescalerHasPendingOutput(rescaler)) { |
| 136 WebPRescalerExportRow(rescaler); | 140 WebPRescalerExportRow(rescaler); |
| 137 ++total_exported; | 141 ++total_exported; |
| 138 } | 142 } |
| 139 return total_exported; | 143 return total_exported; |
| 140 } | 144 } |
| 141 | 145 |
| 142 //------------------------------------------------------------------------------ | 146 //------------------------------------------------------------------------------ |
| OLD | NEW |