xref: /third_party/ffmpeg/tests/checkasm/v210dec.c (revision cabdff1a)
1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2019 James Darnley
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * This file is part of FFmpeg.
5cabdff1aSopenharmony_ci *
6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or modify
7cabdff1aSopenharmony_ci * it under the terms of the GNU General Public License as published by
8cabdff1aSopenharmony_ci * the Free Software Foundation; either version 2 of the License, or
9cabdff1aSopenharmony_ci * (at your option) any later version.
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14cabdff1aSopenharmony_ci * GNU General Public License for more details.
15cabdff1aSopenharmony_ci *
16cabdff1aSopenharmony_ci * You should have received a copy of the GNU General Public License along
17cabdff1aSopenharmony_ci * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
18cabdff1aSopenharmony_ci * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19cabdff1aSopenharmony_ci */
20cabdff1aSopenharmony_ci
21cabdff1aSopenharmony_ci#include <string.h>
22cabdff1aSopenharmony_ci#include "checkasm.h"
23cabdff1aSopenharmony_ci#include "libavcodec/v210dec_init.h"
24cabdff1aSopenharmony_ci
25cabdff1aSopenharmony_cistatic uint32_t get_v210(void)
26cabdff1aSopenharmony_ci{
27cabdff1aSopenharmony_ci    uint32_t t0 = rnd() & 0x3ff,
28cabdff1aSopenharmony_ci             t1 = rnd() & 0x3ff,
29cabdff1aSopenharmony_ci             t2 = rnd() & 0x3ff;
30cabdff1aSopenharmony_ci    uint32_t value =  t0
31cabdff1aSopenharmony_ci                   | (t1 << 10)
32cabdff1aSopenharmony_ci                   | (t2 << 20);
33cabdff1aSopenharmony_ci    return value;
34cabdff1aSopenharmony_ci}
35cabdff1aSopenharmony_ci
36cabdff1aSopenharmony_ci#define NUM_SAMPLES 2048
37cabdff1aSopenharmony_ci
38cabdff1aSopenharmony_cistatic void randomize_buffers(uint32_t *src0, uint32_t *src1, int len)
39cabdff1aSopenharmony_ci{
40cabdff1aSopenharmony_ci    for (int i = 0; i < len; i++) {
41cabdff1aSopenharmony_ci        uint32_t value = get_v210();
42cabdff1aSopenharmony_ci        src0[i] = value;
43cabdff1aSopenharmony_ci        src1[i] = value;
44cabdff1aSopenharmony_ci    }
45cabdff1aSopenharmony_ci}
46cabdff1aSopenharmony_ci
47cabdff1aSopenharmony_civoid checkasm_check_v210dec(void)
48cabdff1aSopenharmony_ci{
49cabdff1aSopenharmony_ci    V210DecContext h;
50cabdff1aSopenharmony_ci
51cabdff1aSopenharmony_ci    h.aligned_input = 0;
52cabdff1aSopenharmony_ci    ff_v210dec_init(&h);
53cabdff1aSopenharmony_ci
54cabdff1aSopenharmony_ci    if (check_func(h.unpack_frame, "v210_unpack")) {
55cabdff1aSopenharmony_ci        uint32_t src0[NUM_SAMPLES/3];
56cabdff1aSopenharmony_ci        uint32_t src1[NUM_SAMPLES/3];
57cabdff1aSopenharmony_ci        uint16_t y0[NUM_SAMPLES/2];
58cabdff1aSopenharmony_ci        uint16_t y1[NUM_SAMPLES/2];
59cabdff1aSopenharmony_ci        uint16_t u0[NUM_SAMPLES/4];
60cabdff1aSopenharmony_ci        uint16_t u1[NUM_SAMPLES/4];
61cabdff1aSopenharmony_ci        uint16_t v0[NUM_SAMPLES/4];
62cabdff1aSopenharmony_ci        uint16_t v1[NUM_SAMPLES/4];
63cabdff1aSopenharmony_ci        declare_func(void, const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width);
64cabdff1aSopenharmony_ci        const int pixels = NUM_SAMPLES / 2 / 6 * 6;
65cabdff1aSopenharmony_ci
66cabdff1aSopenharmony_ci        randomize_buffers(src0, src1, NUM_SAMPLES/3);
67cabdff1aSopenharmony_ci        call_ref(src0, y0, u0, v0, pixels);
68cabdff1aSopenharmony_ci        call_new(src1, y1, u1, v1, pixels);
69cabdff1aSopenharmony_ci        if (memcmp(src0, src1, NUM_SAMPLES/3 * sizeof src0[0])
70cabdff1aSopenharmony_ci                || memcmp(y0, y1, pixels * sizeof y0[0])
71cabdff1aSopenharmony_ci                || memcmp(u0, u1, pixels/2 * sizeof u0[0])
72cabdff1aSopenharmony_ci                || memcmp(v0, v1, pixels/2 * sizeof v0[0]))
73cabdff1aSopenharmony_ci            fail();
74cabdff1aSopenharmony_ci        bench_new(src1, y1, u1, v1, pixels);
75cabdff1aSopenharmony_ci    }
76cabdff1aSopenharmony_ci    report("v210_unpack");
77cabdff1aSopenharmony_ci}
78