diff --git a/libde265/sao.cc b/libde265/sao.cc index f7eff1590..f93fc02a2 100644 --- a/libde265/sao.cc +++ b/libde265/sao.cc @@ -211,11 +211,14 @@ void apply_sao_internal(de265_image* img, int xCtb,int yCtb, continue; } - int bandIdx = bandTable[ in_img[xC+i+(yC+j)*in_stride]>>bandShift ]; - // Shifts are a strange thing. On x86, >>x actually computes >>(x%64). // So we have to take care of large bandShifts. - if (bandShift>=8) { bandIdx=0; } + int bandIdx; + if (bandShift >= 8) { + bandIdx = 0; + } else { + bandIdx = bandTable[ in_img[xC+i+(yC+j)*in_stride]>>bandShift ]; + } if (bandIdx>0) { int offset = saoinfo->saoOffsetVal[cIdx][bandIdx-1]; @@ -237,10 +240,13 @@ void apply_sao_internal(de265_image* img, int xCtb,int yCtb, for (int j=0;j>bandShift ]; - // see above - if (bandShift>=8) { bandIdx=0; } + int bandIdx; + if (bandShift >= 8) { + bandIdx = 0; + } else { + bandIdx = bandTable[ in_img[xC+i+(yC+j)*in_stride]>>bandShift ]; + } if (bandIdx>0) { int offset = saoinfo->saoOffsetVal[cIdx][bandIdx-1];