예제 #1
0
        template <bool align> void BgrToYuv420p(const uint8_t * bgr, size_t width, size_t height, size_t bgrStride, uint8_t * y, size_t yStride,
            uint8_t * u, size_t uStride, uint8_t * v, size_t vStride)
        {
            assert((width % 2 == 0) && (height % 2 == 0) && (width >= DA) && (height >= 2));
            if (align)
            {
                assert(Aligned(y) && Aligned(yStride) && Aligned(u) && Aligned(uStride));
                assert(Aligned(v) && Aligned(vStride) && Aligned(bgr) && Aligned(bgrStride));
            }

            size_t alignedWidth = AlignLo(width, DA);
            const size_t A6 = A * 6;
            for (size_t row = 0; row < height; row += 2)
            {
                Storer<align> _y0(y), _y1(y + yStride), _u(u), _v(v);
                BgrToYuv420p<align, true>(bgr, bgrStride, _y0, _y1, _u, _v);
                for (size_t col = DA, colBgr = A6; col < alignedWidth; col += DA, colBgr += A6)
                    BgrToYuv420p<align, false>(bgr + colBgr, bgrStride, _y0, _y1, _u, _v);
                Flush(_y0, _y1, _u, _v);
                if (width != alignedWidth)
                {
                    size_t offset = width - DA;
                    Storer<false> _y0(y + offset), _y1(y + offset + yStride), _u(u + offset / 2), _v(v + offset / 2);
                    BgrToYuv420p<false, true>(bgr + offset * 3, bgrStride, _y0, _y1, _u, _v);
                    Flush(_y0, _y1, _u, _v);
                }
                y += 2 * yStride;
                u += uStride;
                v += vStride;
                bgr += 2 * bgrStride;
            }
        }
예제 #2
0
void test_y0(void)
{
    ieee_double tested;
    ieee_double expected;
    ieee_double result;

    expected.l = 0;

    errno = 0xDEADBEEF;
    tested.l = 0xFFFFFFFFFFFFFFFFLL;
    expected.l = 0xFFFFFFFFFFFFFFFFLL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0xFFF8000000000001LL;
    expected.l = 0xFFF8000000000001LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0xFFF8000000000000LL;
    expected.l = 0xFFF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0xFFF7FFFFFFFFFFFFLL;
    expected.l = 0xFFFFFFFFFFFFFFFFLL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0xFFF0000000000001LL;
    expected.l = 0xFFF8000000000001LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0xFFF0000000000000LL;
    expected.l = 0xFFF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0xFFEFFFFFFFFFFFFFLL;
    expected.l = 0xFFF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x8010000000000000LL;
    expected.l = 0xFFF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x800FFFFFFFFFFFFFLL;
    expected.l = 0xFFF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x8000000000000001LL;
    expected.l = 0xFFF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x8000000000000000LL;
    expected.l = 0xFFF0000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == ERANGE, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x0000000000000000LL;
    expected.l = 0xFFF0000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == ERANGE, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x0000000000000001LL;
    expected.l = 0xC07D9FFC3469E1B3LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x000FFFFFFFFFFFFFLL;
    expected.l = 0xC07C30D8F820740ELL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x0010000000000000LL;
    expected.l = 0xC07C30D8F820740ELL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x7FEFFFFFFFFFFFFFLL;
    expected.l = 0x9FD5A36F8428F58BLL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x7FF0000000000000LL;
    expected.l = 0xFFF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x7FF0000000000001LL;
    expected.l = 0x7FF8000000000001LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x7FF7FFFFFFFFFFFFLL;
    expected.l = 0x7FFFFFFFFFFFFFFFLL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x7FF8000000000000LL;
    expected.l = 0x7FF8000000000000LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);
    errno = 0xDEADBEEF;
    tested.l = 0x7FFFFFFFFFFFFFFFLL;
    expected.l = 0x7FFFFFFFFFFFFFFFLL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == EDOM, "errno: %d\n", errno);

    /* MSDN example */
    errno = 0xDEADBEEF;
    tested.d = 2.387000;
    expected.l = 0x3FE05FB1B1E49E66LL;
    result.d =  _y0(tested.d);
    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
}