1/* 2 * Copyright (c) 2017 James Almer 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License along 17 * with FFmpeg; if not, write to the Free Software Foundation, Inc., 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 */ 20 21#include <string.h> 22 23#include "checkasm.h" 24#include "libavcodec/avcodec.h" 25#include "libavcodec/exrdsp.h" 26#include "libavutil/intreadwrite.h" 27#include "libavutil/mem_internal.h" 28 29#define BUF_SIZE 5120 30#define PADDED_BUF_SIZE BUF_SIZE+AV_INPUT_BUFFER_PADDING_SIZE*2 31 32#define randomize_buffers() \ 33 do { \ 34 int i; \ 35 for (i = 0; i < BUF_SIZE; i += 4) { \ 36 uint32_t r = rnd(); \ 37 AV_WN32A(src + i, r); \ 38 } \ 39 } while (0) 40 41static void check_reorder_pixels(void) { 42 LOCAL_ALIGNED_32(uint8_t, src, [PADDED_BUF_SIZE]); 43 LOCAL_ALIGNED_32(uint8_t, dst_ref, [PADDED_BUF_SIZE]); 44 LOCAL_ALIGNED_32(uint8_t, dst_new, [PADDED_BUF_SIZE]); 45 46 declare_func(void, uint8_t *dst, const uint8_t *src, ptrdiff_t size); 47 48 memset(src, 0, PADDED_BUF_SIZE); 49 memset(dst_ref, 0, PADDED_BUF_SIZE); 50 memset(dst_new, 0, PADDED_BUF_SIZE); 51 randomize_buffers(); 52 call_ref(dst_ref, src, BUF_SIZE); 53 call_new(dst_new, src, BUF_SIZE); 54 if (memcmp(dst_ref, dst_new, BUF_SIZE)) 55 fail(); 56 bench_new(dst_new, src, BUF_SIZE); 57} 58 59static void check_predictor(void) { 60 LOCAL_ALIGNED_32(uint8_t, src, [PADDED_BUF_SIZE]); 61 LOCAL_ALIGNED_32(uint8_t, dst_ref, [PADDED_BUF_SIZE]); 62 LOCAL_ALIGNED_32(uint8_t, dst_new, [PADDED_BUF_SIZE]); 63 64 declare_func(void, uint8_t *src, ptrdiff_t size); 65 66 memset(src, 0, PADDED_BUF_SIZE); 67 randomize_buffers(); 68 memcpy(dst_ref, src, PADDED_BUF_SIZE); 69 memcpy(dst_new, src, PADDED_BUF_SIZE); 70 call_ref(dst_ref, BUF_SIZE); 71 call_new(dst_new, BUF_SIZE); 72 if (memcmp(dst_ref, dst_new, BUF_SIZE)) 73 fail(); 74 bench_new(dst_new, BUF_SIZE); 75} 76 77void checkasm_check_exrdsp(void) 78{ 79 ExrDSPContext h; 80 81 ff_exrdsp_init(&h); 82 83 if (check_func(h.reorder_pixels, "reorder_pixels")) 84 check_reorder_pixels(); 85 86 report("reorder_pixels"); 87 88 if (check_func(h.predictor, "predictor")) 89 check_predictor(); 90 91 report("predictor"); 92} 93