ref: 566716e3ae351bd83688ef097629d32fd2247fdb
parent: 8e5fa0aa0507b79f2f33b5b89d403999832f9b24
parent: 0a2b25dcb9e3a2ad6f4d8f1bbb9a192429f32831
author: Yaowu Xu <yaowu@google.com>
date: Thu Aug 7 03:16:39 EDT 2014
Merge "configure: add --enable-coefficient-range-checking"
--- a/configure
+++ b/configure
@@ -46,6 +46,9 @@
${toggle_realtime_only} enable this option while building for real-time encoding
${toggle_onthefly_bitpacking} enable on-the-fly bitpacking in real-time encoding
${toggle_error_concealment} enable this option to get a decoder which is able to conceal losses
+ ${toggle_coefficient_range_checking}
+ enable decoder to check if intermediate
+ transform coefficients are in valid range
${toggle_runtime_cpu_detect} runtime cpu detection
${toggle_shared} shared library support
${toggle_static} static library support
@@ -327,6 +330,7 @@
encode_perf_tests
multi_res_encoding
temporal_denoising
+ coefficient_range_checking
experimental
size_limit
${EXPERIMENT_LIST}
@@ -384,6 +388,7 @@
encode_perf_tests
multi_res_encoding
temporal_denoising
+ coefficient_range_checking
experimental
"
--- a/vp9/common/vp9_idct.h
+++ b/vp9/common/vp9_idct.h
@@ -81,6 +81,16 @@
static INLINE int dct_const_round_shift(int input) {
int rv = ROUND_POWER_OF_TWO(input, DCT_CONST_BITS);
+#if CONFIG_COEFFICIENT_RANGE_CHECKING
+ // For valid VP9 input streams, intermediate stage coefficients should always
+ // stay within the range of a signed 16 bit integer. Coefficients can go out
+ // of this range for invalid/corrupt VP9 streams. However, strictly checking
+ // this range for every intermediate coefficient can burdensome for a decoder,
+ // therefore the following assertion is only enabled when configured with
+ // --enable-coefficient-range-checking.
+ assert(INT16_MIN <= rv);
+ assert(rv <= INT16_MAX);
+#endif
return (int16_t)rv;
}
--
⑨