Example #1
0
 SIMD_INLINE void BgrToYuv444p(const uint8_t * bgr, uint8_t * y, uint8_t * u, uint8_t * v)
 {
     const int blue = bgr[0], green = bgr[1], red = bgr[2];
     y[0] = BgrToY(blue, green, red);
     u[0] = BgrToU(blue, green, red);
     v[0] = BgrToV(blue, green, red);
 }
 template <bool align, bool first> SIMD_INLINE void BgrToYuv444p(const uint8_t * bgr,
     Storer<align> & y, Storer<align> & u, Storer<align> & v)
 {
     v128_u8 blue, green, red;
     LoadBgr<align>(bgr, blue, green, red);
     Store<align, first>(y, BgrToY(blue, green, red));
     Store<align, first>(u, BgrToU(blue, green, red));
     Store<align, first>(v, BgrToV(blue, green, red));
 }
Example #3
0
        SIMD_INLINE void BgrToYuv422p(const uint8_t * bgr, uint8_t * y, uint8_t * u, uint8_t * v)
        {
            y[0] = BgrToY(bgr[0], bgr[1], bgr[2]);
            y[1] = BgrToY(bgr[3], bgr[4], bgr[5]);

            int blue = Average(bgr[0], bgr[3]);
            int green = Average(bgr[1], bgr[4]);
            int red = Average(bgr[2], bgr[5]);

            u[0] = BgrToU(blue, green, red);
            v[0] = BgrToV(blue, green, red);
        }
Example #4
0
		SIMD_INLINE void BgrToYuv420p(const uint8_t * bgr0, size_t bgrStride, uint8_t * y0, size_t yStride, uint8_t * u, uint8_t * v)
		{
            const uint8_t * bgr1 = bgr0 + bgrStride;
            uint8_t * y1 = y0 + yStride;

            y0[0] = BgrToY(bgr0[0], bgr0[1], bgr0[2]);
            y0[1] = BgrToY(bgr0[3], bgr0[4], bgr0[5]);
            y1[0] = BgrToY(bgr1[0], bgr1[1], bgr1[2]);
            y1[1] = BgrToY(bgr1[3], bgr1[4], bgr1[5]);

            int blue = Average(bgr0[0], bgr0[3], bgr1[0], bgr1[3]);
            int green = Average(bgr0[1], bgr0[4], bgr1[1], bgr1[4]);
            int red = Average(bgr0[2], bgr0[5], bgr1[2], bgr1[5]);

			u[0] = BgrToU(blue, green, red);
			v[0] = BgrToV(blue, green, red);
		}
        template <bool align, bool first> SIMD_INLINE void BgrToYuv422p(const uint8_t * bgr, Storer<align> & y, Storer<align> & u, Storer<align> & v)
        {
            v128_u8 blue[2], green[2], red[2];
            LoadBgr<align>(bgr, blue[0], green[0], red[0]);
            Store<align, first>(y, BgrToY(blue[0], green[0], red[0]));
            LoadBgr<align>(bgr + 3 * A, blue[1], green[1], red[1]);
            Store<align, false>(y, BgrToY(blue[1], green[1], red[1]));

            v128_s16 blueAvg[2], greenAvg[2], redAvg[2];
            blueAvg[0] = Average(blue[0]);
            blueAvg[1] = Average(blue[1]);
            greenAvg[0] = Average(green[0]);
            greenAvg[1] = Average(green[1]);
            redAvg[0] = Average(red[0]);
            redAvg[1] = Average(red[1]);
            Store<align, first>(u, vec_pack(BgrToU(blueAvg[0], greenAvg[0], redAvg[0]), BgrToU(blueAvg[1], greenAvg[1], redAvg[1])));
            Store<align, first>(v, vec_pack(BgrToV(blueAvg[0], greenAvg[0], redAvg[0]), BgrToV(blueAvg[1], greenAvg[1], redAvg[1])));
        }
        template <bool align, bool first> SIMD_INLINE void BgrToYuv420p(const uint8_t * bgr0, size_t bgrStride,
            Storer<align> & y0, Storer<align> & y1, Storer<align> & u, Storer<align> & v)
        {
            const uint8_t * bgr1 = bgr0 + bgrStride;
            v128_u8 blue[2][2], green[2][2], red[2][2];
            LoadBgr<align>(bgr0, blue[0][0], green[0][0], red[0][0]);
            Store<align, first>(y0, BgrToY(blue[0][0], green[0][0], red[0][0]));
            LoadBgr<align>(bgr0 + 3 * A, blue[0][1], green[0][1], red[0][1]);
            Store<align, false>(y0, BgrToY(blue[0][1], green[0][1], red[0][1]));
            LoadBgr<align>(bgr1, blue[1][0], green[1][0], red[1][0]);
            Store<align, first>(y1, BgrToY(blue[1][0], green[1][0], red[1][0]));
            LoadBgr<align>(bgr1 + 3 * A, blue[1][1], green[1][1], red[1][1]);
            Store<align, false>(y1, BgrToY(blue[1][1], green[1][1], red[1][1]));

            v128_s16 blueAvg[2], greenAvg[2], redAvg[2];
            blueAvg[0] = Average(blue[0][0], blue[1][0]);
            blueAvg[1] = Average(blue[0][1], blue[1][1]);
            greenAvg[0] = Average(green[0][0], green[1][0]);
            greenAvg[1] = Average(green[0][1], green[1][1]);
            redAvg[0] = Average(red[0][0], red[1][0]);
            redAvg[1] = Average(red[0][1], red[1][1]);
            Store<align, first>(u, vec_pack(BgrToU(blueAvg[0], greenAvg[0], redAvg[0]), BgrToU(blueAvg[1], greenAvg[1], redAvg[1])));
            Store<align, first>(v, vec_pack(BgrToV(blueAvg[0], greenAvg[0], redAvg[0]), BgrToV(blueAvg[1], greenAvg[1], redAvg[1])));
        }