Index: third_party/libwebp/utils/rescaler.h |
diff --git a/third_party/libwebp/utils/rescaler.h b/third_party/libwebp/utils/rescaler.h |
index 8244cfeb41f194a8e2271006c829b398499bf24d..98b01a76d077dd775e5f8d86f33c7ddf80c4c405 100644 |
--- a/third_party/libwebp/utils/rescaler.h |
+++ b/third_party/libwebp/utils/rescaler.h |
@@ -20,9 +20,15 @@ extern "C" { |
#include "../webp/types.h" |
+#define WEBP_RESCALER_RFIX 32 // fixed-point precision for multiplies |
+#define WEBP_RESCALER_ONE (1ull << WEBP_RESCALER_RFIX) |
+#define WEBP_RESCALER_FRAC(x, y) \ |
+ ((uint32_t)(((uint64_t)(x) << WEBP_RESCALER_RFIX) / (y))) |
+ |
// Structure used for on-the-fly rescaling |
typedef uint32_t rescaler_t; // type for side-buffer |
-typedef struct { |
+typedef struct WebPRescaler WebPRescaler; |
+struct WebPRescaler { |
int x_expand; // true if we're expanding in the x direction |
int y_expand; // true if we're expanding in the y direction |
int num_channels; // bytes to jump between pixels |
@@ -38,7 +44,7 @@ typedef struct { |
uint8_t* dst; |
int dst_stride; |
rescaler_t* irow, *frow; // work buffer |
-} WebPRescaler; |
+}; |
// Initialize a rescaler given scratch area 'work' and dimensions of src & dst. |
void WebPRescalerInit(WebPRescaler* const rescaler, |
@@ -48,6 +54,14 @@ void WebPRescalerInit(WebPRescaler* const rescaler, |
int num_channels, |
rescaler_t* const work); |
+// If either 'scaled_width' or 'scaled_height' (but not both) is 0 the value |
+// will be calculated preserving the aspect ratio, otherwise the values are |
+// left unmodified. Returns true on success, false if either value is 0 after |
+// performing the scaling calculation. |
+int WebPRescalerGetScaledDimensions(int src_width, int src_height, |
+ int* const scaled_width, |
+ int* const scaled_height); |
+ |
// Returns the number of input lines needed next to produce one output line, |
// considering that the maximum available input lines are 'max_num_lines'. |
int WebPRescaleNeededLines(const WebPRescaler* const rescaler, |
@@ -60,10 +74,6 @@ int WebPRescalerImport(WebPRescaler* const rescaler, int num_rows, |
// Export as many rows as possible. Return the numbers of rows written. |
int WebPRescalerExport(WebPRescaler* const rescaler); |
-void WebPRescalerImportRow(WebPRescaler* const wrk, |
- const uint8_t* src); |
-// Export one row (starting at x_out position) from rescaler. |
-void WebPRescalerExportRow(WebPRescaler* const wrk); |
// Return true if input is finished |
static WEBP_INLINE |