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