1 /* 2 * Copyright (c) 2017 Ronald S. Bultje <rsbultje@gmail.com> 3 * Copyright (c) 2017 Ashish Pratap Singh <ashk43712@gmail.com> 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22 #ifndef AVFILTER_VMAF_MOTION_H 23 #define AVFILTER_VMAF_MOTION_H 24 25 #include <stddef.h> 26 #include <stdint.h> 27 #include "video.h" 28 29 typedef struct VMAFMotionDSPContext { 30 uint64_t (*sad)(const uint16_t *img1, const uint16_t *img2, int w, int h, 31 ptrdiff_t img1_stride, ptrdiff_t img2_stride); 32 void (*convolution_x)(const uint16_t *filter, int filt_w, const uint16_t *src, 33 uint16_t *dst, int w, int h, ptrdiff_t src_stride, 34 ptrdiff_t dst_stride); 35 void (*convolution_y)(const uint16_t *filter, int filt_w, const uint8_t *src, 36 uint16_t *dst, int w, int h, ptrdiff_t src_stride, 37 ptrdiff_t dst_stride); 38 } VMAFMotionDSPContext; 39 40 void ff_vmafmotion_init_x86(VMAFMotionDSPContext *dsp); 41 42 typedef struct VMAFMotionData { 43 uint16_t filter[5]; 44 int width; 45 int height; 46 ptrdiff_t stride; 47 uint16_t *blur_data[2 /* cur, prev */]; 48 uint16_t *temp_data; 49 double motion_sum; 50 uint64_t nb_frames; 51 VMAFMotionDSPContext vmafdsp; 52 } VMAFMotionData; 53 54 int ff_vmafmotion_init(VMAFMotionData *data, int w, int h, enum AVPixelFormat fmt); 55 double ff_vmafmotion_process(VMAFMotionData *data, AVFrame *frame); 56 double ff_vmafmotion_uninit(VMAFMotionData *data); 57 58 #endif /* AVFILTER_VMAF_MOTION_H */ 59