shift the bsse[] member of the macroblock struct to the front to avoid
an incorrect offset (0) to the upper half of bsse[0] which leads to a
negative resulting in a crash. restrict this to visual studio versions
before 2015 (the bug was observed with 2013, fixed in 2015) to avoid any
potential cache impact on other platforms.
https://connect.microsoft.com/VisualStudio/feedback/details/
2396360/bad-structure-offset-in-32-bit-code
BUG=webm:1054
Change-Id: I40f68a1d421ccc503cc712192263bab4f7dde076
typedef struct macroblock MACROBLOCK;
struct macroblock {
+// cf. https://bugs.chromium.org/p/webm/issues/detail?id=1054
+#if defined(_MSC_VER) && _MSC_VER < 1900
+ int64_t bsse[MAX_MB_PLANE << 2];
+#endif
+
struct macroblock_plane plane[MAX_MB_PLANE];
MACROBLOCKD e_mbd;
#define SKIP_TXFM_AC_DC 1
#define SKIP_TXFM_AC_ONLY 2
+// cf. https://bugs.chromium.org/p/webm/issues/detail?id=1054
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
int64_t bsse[MAX_MB_PLANE << 2];
+#endif
// Used to store sub partition's choices.
MV pred_mv[MAX_REF_FRAMES];