Commit c44091a9 authored by Ronald S. Bultje's avatar Ronald S. Bultje

snow: refactor code to work around a compiler bug in MSVC.

This fixes the compiler error "cannot convert from 'BlockNode' to
'int16_t'".
parent a794600c
...@@ -1005,10 +1005,18 @@ static av_always_inline int check_block_inter(SnowContext *s, int mb_x, int mb_y ...@@ -1005,10 +1005,18 @@ static av_always_inline int check_block_inter(SnowContext *s, int mb_x, int mb_y
static av_always_inline int check_4block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int ref, int *best_rd){ static av_always_inline int check_4block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int ref, int *best_rd){
const int b_stride= s->b_width << s->block_max_depth; const int b_stride= s->b_width << s->block_max_depth;
BlockNode *block= &s->block[mb_x + mb_y * b_stride]; BlockNode *block= &s->block[mb_x + mb_y * b_stride];
BlockNode backup[4]= {block[0], block[1], block[b_stride], block[b_stride+1]}; BlockNode backup[4];
unsigned value; unsigned value;
int rd, index; int rd, index;
/* We don't initialize backup[] during variable declaration, because
* that fails to compile on MSVC: "cannot convert from 'BlockNode' to
* 'int16_t'". */
backup[0] = block[0];
backup[1] = block[1];
backup[2] = block[b_stride];
backup[3] = block[b_stride + 1];
assert(mb_x>=0 && mb_y>=0); assert(mb_x>=0 && mb_y>=0);
assert(mb_x<b_stride); assert(mb_x<b_stride);
assert(((mb_x|mb_y)&1) == 0); assert(((mb_x|mb_y)&1) == 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment