FFmpeg
deshake.h
1 /*
2  * Copyright (C) 2013 Wei Gao <weigao@multicorewareinc.com>
3  * Copyright (C) 2013 Lenny Wang
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_DESHAKE_H
23 #define AVFILTER_DESHAKE_H
24 
25 #include "config.h"
26 #include "avfilter.h"
27 #include "transform.h"
28 #include "libavutil/pixelutils.h"
29 
30 
31 enum SearchMethod {
32  EXHAUSTIVE,
33  SMART_EXHAUSTIVE,
34  SEARCH_COUNT
35 };
36 
37 typedef struct IntMotionVector {
38  int x;
39  int y;
41 
42 typedef struct MotionVector {
43  double x;
44  double y;
45 } MotionVector;
46 
47 typedef struct Transform {
49  double angle;
50  double zoom;
51 } Transform;
52 
53 #define MAX_R 64
54 
55 typedef struct DeshakeContext {
56  const AVClass *class;
57  int counts[2*MAX_R+1][2*MAX_R+1];
58  double *angles;
59  unsigned angles_size;
61  int rx;
62  int ry;
63  int edge;
64  int blocksize;
65  int contrast;
66  int search;
67  av_pixelutils_sad_fn sad;
69  int refcount;
70  FILE *fp;
71  Transform avg;
72  int cw;
73  int ch;
74  int cx;
75  int cy;
76  char *filename;
77  int opencl;
78  int (* transform)(AVFilterContext *ctx, int width, int height, int cw, int ch,
79  const float *matrix_y, const float *matrix_uv, enum InterpolateMethod interpolate,
80  enum FillMethod fill, AVFrame *in, AVFrame *out);
82 
83 #endif /* AVFILTER_DESHAKE_H */
This structure describes decoded (raw) audio or video data.
Definition: frame.h:218
int ry
Maximum vertical shift.
Definition: deshake.h:62
Main libavfilter public API header.
int y
Vertical shift.
Definition: deshake.h:39
double angle
Angle of rotation.
Definition: deshake.h:49
Definition: deshake.h:42
double zoom
Zoom percentage.
Definition: deshake.h:50
int blocksize
Size of blocks to compare.
Definition: deshake.h:64
int refcount
Number of reference frames (defines averaging window)
Definition: deshake.h:69
int rx
Maximum horizontal shift.
Definition: deshake.h:61
Definition: deshake.h:37
char * filename
Motion search detailed log filename.
Definition: deshake.h:76
double x
Horizontal shift.
Definition: deshake.h:43
av_pixelutils_sad_fn sad
Sum of the absolute difference function.
Definition: deshake.h:67
int contrast
Contrast threshold.
Definition: deshake.h:65
int edge
Edge fill method.
Definition: deshake.h:63
int search
Motion search method.
Definition: deshake.h:66
transform input video
double y
Vertical shift.
Definition: deshake.h:44
double * angles
< Scratch buffer for motion search
Definition: deshake.h:58
AVFrame * ref
Previous frame.
Definition: deshake.h:60
Describe the class of an AVClass context structure.
Definition: log.h:67
Definition: deshake.h:47
int cw
Crop motion search to this box.
Definition: deshake.h:72
Transform last
Transform from last frame.
Definition: deshake.h:68
int x
Horizontal shift.
Definition: deshake.h:38
MotionVector vec
Motion vector.
Definition: deshake.h:48
An instance of a filter.
Definition: avfilter.h:338
Definition: deshake.h:55