ref: ffa3a3c4418ab69f000dacb5fd631922af01307a
parent: 98dbf31c877c1388c5776aba249f879cda3b2969
parent: 5a40c8fde11bf82cccb5bd2f57c46ab5e6262cbf
author: Jerome Jiang <jianj@google.com>
date: Wed Oct 4 10:48:03 EDT 2017
Merge "Fix image width alignment. Enable ImageSizeSetting test."
--- a/test/encode_api_test.cc
+++ b/test/encode_api_test.cc
@@ -80,7 +80,7 @@
}
#if CONFIG_VP8_ENCODER
-TEST(EncodeAPI, DISABLED_ImageSizeSetting) {
+TEST(EncodeAPI, ImageSizeSetting) {
const int width = 711;
const int height = 360;
const int bps = 12;
--- a/vpx/src/vpx_image.c
+++ b/vpx/src/vpx_image.c
@@ -88,11 +88,10 @@
default: ycs = 0; break;
}
- /* Calculate storage sizes given the chroma subsampling */
- align = (1 << xcs) - 1;
- w = (d_w + align) & ~align;
- align = (1 << ycs) - 1;
- h = (d_h + align) & ~align;
+ /* Calculate storage sizes. If the buffer was allocated externally, the width
+ * and height shouldn't be adjusted. */
+ w = d_w;
+ h = d_h;
s = (fmt & VPX_IMG_FMT_PLANAR) ? w : bps * w / 8;
s = (s + stride_align - 1) & ~(stride_align - 1);
stride_in_bytes = (fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? s * 2 : s;
@@ -111,9 +110,18 @@
img->img_data = img_data;
if (!img_data) {
- const uint64_t alloc_size = (fmt & VPX_IMG_FMT_PLANAR)
- ? (uint64_t)h * s * bps / 8
- : (uint64_t)h * s;
+ uint64_t alloc_size;
+ /* Calculate storage sizes given the chroma subsampling */
+ align = xcs ? (1 << xcs) - 1 : 1;
+ w = (d_w + align - 1) & ~(align - 1);
+ align = ycs ? (1 << ycs) - 1 : 1;
+ h = (d_h + align - 1) & ~(align - 1);
+
+ s = (fmt & VPX_IMG_FMT_PLANAR) ? w : bps * w / 8;
+ s = (s + stride_align - 1) & ~(stride_align - 1);
+ stride_in_bytes = (fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? s * 2 : s;
+ alloc_size = (fmt & VPX_IMG_FMT_PLANAR) ? (uint64_t)h * s * bps / 8
+ : (uint64_t)h * s;
if (alloc_size != (size_t)alloc_size) goto fail;