av1_superres_unscaled: Make it more accurate.
Handle the corner cases when frame may be unscaled even though scale
numerator and denominator don't match.
BUG=aomedia:1330
Change-Id: I59d23c7f17cd16cf33d9fbc3cc581a3e5270c967
diff --git a/av1/common/resize.c b/av1/common/resize.c
index afb91a0..8b57346 100644
--- a/av1/common/resize.c
+++ b/av1/common/resize.c
@@ -1201,9 +1201,8 @@
}
}
-// Calculates scaled dimensions given original dimensions and the scale
-// denominator. If 'scale_height' is 1, both width and height are scaled;
-// otherwise, only the width is scaled.
+// Calculates the scaled dimension given the original dimension and the scale
+// denominator.
static void calculate_scaled_size_helper(int *dim, int denom) {
if (denom != SCALE_NUMERATOR) {
// Use this version if we need *dim to be even
diff --git a/av1/common/resize.h b/av1/common/resize.h
index 18a7712..b156a80 100644
--- a/av1/common/resize.h
+++ b/av1/common/resize.h
@@ -96,7 +96,10 @@
// Returns 1 if a superres upscaled frame is unscaled and 0 otherwise.
static INLINE int av1_superres_unscaled(const AV1_COMMON *cm) {
- return (cm->superres_scale_denominator == SCALE_NUMERATOR);
+ // Note: for some corner cases (e.g. cm->width of 1), there may be no scaling
+ // required even though cm->superres_scale_denominator != SCALE_NUMERATOR.
+ // So, the following check is more accurate.
+ return (cm->width == cm->superres_upscaled_width);
}
#endif // CONFIG_HORZONLY_FRAME_SUPERRES