Commit 148c8e88 authored by Ashish Singh's avatar Ashish Singh Committed by Ronald S. Bultje

avfilter: add vmafmotion filter

Signed-off-by: 's avatarAshish Singh <ashk43712@gmail.com>
Signed-off-by: 's avatarRonald S. Bultje <rsbultje@gmail.com>
parent 450cee52
......@@ -51,6 +51,7 @@ version <next>:
- CUDA thumbnail filter
- V4L2 mem2mem HW assisted codecs
- Rockchip MPP hardware decoding
- vmafmotion video filter
version 3.3:
......
......@@ -15570,6 +15570,20 @@ vignette='PI/4+random(1)*PI/50':eval=frame
@end itemize
@section vmafmotion
Obtain the average vmaf motion score of a video.
It is one of the component filters of VMAF.
The obtained average motion score is printed through the logging system.
In the below example the input file @file{ref.mpg} is being processed and score
is computed.
@example
ffmpeg -i ref.mpg -lavfi vmafmotion -f null -
@end example
@section vstack
Stack input videos vertically.
......
......@@ -331,6 +331,7 @@ OBJS-$(CONFIG_VFLIP_FILTER) += vf_vflip.o
OBJS-$(CONFIG_VIDSTABDETECT_FILTER) += vidstabutils.o vf_vidstabdetect.o
OBJS-$(CONFIG_VIDSTABTRANSFORM_FILTER) += vidstabutils.o vf_vidstabtransform.o
OBJS-$(CONFIG_VIGNETTE_FILTER) += vf_vignette.o
OBJS-$(CONFIG_VMAFMOTION_FILTER) += vf_vmafmotion.o framesync.o
OBJS-$(CONFIG_VSTACK_FILTER) += vf_stack.o framesync.o
OBJS-$(CONFIG_W3FDIF_FILTER) += vf_w3fdif.o
OBJS-$(CONFIG_WAVEFORM_FILTER) += vf_waveform.o
......
......@@ -342,6 +342,7 @@ static void register_all(void)
REGISTER_FILTER(VIDSTABDETECT, vidstabdetect, vf);
REGISTER_FILTER(VIDSTABTRANSFORM, vidstabtransform, vf);
REGISTER_FILTER(VIGNETTE, vignette, vf);
REGISTER_FILTER(VMAFMOTION, vmafmotion, vf);
REGISTER_FILTER(VSTACK, vstack, vf);
REGISTER_FILTER(W3FDIF, w3fdif, vf);
REGISTER_FILTER(WAVEFORM, waveform, vf);
......
This diff is collapsed.
/*
* Copyright (c) 2017 Ronald S. Bultje <rsbultje@gmail.com>
* Copyright (c) 2017 Ashish Pratap Singh <ashk43712@gmail.com>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVFILTER_VMAFMOTION_H
#define AVFILTER_VMAFMOTION_H
#include <stddef.h>
#include <stdint.h>
#include "video.h"
typedef struct VMAFMotionDSPContext {
uint64_t (*sad)(const uint16_t *img1, const uint16_t *img2, int w, int h,
ptrdiff_t img1_stride, ptrdiff_t img2_stride);
void (*convolution_x)(const uint16_t *filter, int filt_w, const uint16_t *src,
uint16_t *dst, int w, int h, ptrdiff_t src_stride,
ptrdiff_t dst_stride);
void (*convolution_y)(const uint16_t *filter, int filt_w, const uint8_t *src,
uint16_t *dst, int w, int h, ptrdiff_t src_stride,
ptrdiff_t dst_stride);
} VMAFMotionDSPContext;
void ff_vmafmotion_init_x86(VMAFMotionDSPContext *dsp);
typedef struct VMAFMotionData {
uint16_t filter[5];
int width;
int height;
ptrdiff_t stride;
uint16_t *blur_data[2 /* cur, prev */];
uint16_t *temp_data;
double motion_sum;
uint64_t nb_frames;
VMAFMotionDSPContext vmafdsp;
} VMAFMotionData;
int ff_vmafmotion_init(VMAFMotionData *data, int w, int h, enum AVPixelFormat fmt);
double ff_vmafmotion_process(VMAFMotionData *data, AVFrame *frame);
double ff_vmafmotion_uninit(VMAFMotionData *data);
#endif /* AVFILTER_VMAFMOTION_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment