+ for( int j = 0, k = 0; j < w * cn; j += 2 * cn, k++ )
+ {
+ int r00 = row0[2-bIdx + j]; int g00 = row0[1 + j]; int b00 = row0[bIdx + j];
+ int r01 = row0[2-bIdx + cn + j]; int g01 = row0[1 + cn + j]; int b01 = row0[bIdx + cn + j];
+ int r10 = row1[2-bIdx + j]; int g10 = row1[1 + j]; int b10 = row1[bIdx + j];
+ int r11 = row1[2-bIdx + cn + j]; int g11 = row1[1 + cn + j]; int b11 = row1[bIdx + cn + j];
+
+ const int shifted16 = (16 << ITUR_BT_601_SHIFT);
+ const int halfShift = (1 << (ITUR_BT_601_SHIFT - 1));
+ int y00 = ITUR_BT_601_CRY * r00 + ITUR_BT_601_CGY * g00 + ITUR_BT_601_CBY * b00 + halfShift + shifted16;
+ int y01 = ITUR_BT_601_CRY * r01 + ITUR_BT_601_CGY * g01 + ITUR_BT_601_CBY * b01 + halfShift + shifted16;
+ int y10 = ITUR_BT_601_CRY * r10 + ITUR_BT_601_CGY * g10 + ITUR_BT_601_CBY * b10 + halfShift + shifted16;
+ int y11 = ITUR_BT_601_CRY * r11 + ITUR_BT_601_CGY * g11 + ITUR_BT_601_CBY * b11 + halfShift + shifted16;
+
+ y[2*k + 0] = saturate_cast<uchar>(y00 >> ITUR_BT_601_SHIFT);
+ y[2*k + 1] = saturate_cast<uchar>(y01 >> ITUR_BT_601_SHIFT);
+ y[2*k + dst_->step + 0] = saturate_cast<uchar>(y10 >> ITUR_BT_601_SHIFT);
+ y[2*k + dst_->step + 1] = saturate_cast<uchar>(y11 >> ITUR_BT_601_SHIFT);
+
+ const int shifted128 = (128 << ITUR_BT_601_SHIFT);
+ int u00 = ITUR_BT_601_CRU * r00 + ITUR_BT_601_CGU * g00 + ITUR_BT_601_CBU * b00 + halfShift + shifted128;
+ int v00 = ITUR_BT_601_CBU * r00 + ITUR_BT_601_CGV * g00 + ITUR_BT_601_CBV * b00 + halfShift + shifted128;
+
+ u[k] = saturate_cast<uchar>(u00 >> ITUR_BT_601_SHIFT);
+ v[k] = saturate_cast<uchar>(v00 >> ITUR_BT_601_SHIFT);
+ }