FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavfilter
deshake.h
Go to the documentation of this file.
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
#if CONFIG_OPENCL
30
#include "
libavutil/opencl.h
"
31
#endif
32
33
34
enum
SearchMethod
{
35
EXHAUSTIVE
,
///< Search all possible positions
36
SMART_EXHAUSTIVE
,
///< Search most possible positions (faster)
37
SEARCH_COUNT
38
};
39
40
typedef
struct
{
41
int
x
;
///< Horizontal shift
42
int
y
;
///< Vertical shift
43
}
IntMotionVector
;
44
45
typedef
struct
{
46
double
x
;
///< Horizontal shift
47
double
y
;
///< Vertical shift
48
}
MotionVector
;
49
50
typedef
struct
{
51
MotionVector
vector
;
///< Motion vector
52
double
angle
;
///< Angle of rotation
53
double
zoom
;
///< Zoom percentage
54
}
Transform
;
55
56
#if CONFIG_OPENCL
57
58
typedef
struct
{
59
cl_command_queue command_queue;
60
cl_program program;
61
cl_kernel kernel_luma;
62
cl_kernel kernel_chroma;
63
int
in_plane_size[8];
64
int
out_plane_size[8];
65
int
plane_num;
66
cl_mem cl_inbuf;
67
size_t
cl_inbuf_size;
68
cl_mem cl_outbuf;
69
size_t
cl_outbuf_size;
70
} DeshakeOpenclContext;
71
72
#endif
73
74
#define MAX_R 64
75
76
typedef
struct
{
77
const
AVClass
*
class
;
78
int
counts[2*
MAX_R
+1][2*
MAX_R
+1];
/// < Scratch buffer for motion search
79
double
*
angles
;
///< Scratch buffer for block angles
80
unsigned
angles_size
;
81
AVFrame
*
ref
;
///< Previous frame
82
int
rx
;
///< Maximum horizontal shift
83
int
ry
;
///< Maximum vertical shift
84
int
edge
;
///< Edge fill method
85
int
blocksize
;
///< Size of blocks to compare
86
int
contrast
;
///< Contrast threshold
87
int
search
;
///< Motion search method
88
av_pixelutils_sad_fn
sad
;
///< Sum of the absolute difference function
89
Transform
last
;
///< Transform from last frame
90
int
refcount
;
///< Number of reference frames (defines averaging window)
91
FILE *
fp
;
92
Transform
avg
;
93
int
cw
;
///< Crop motion search to this box
94
int
ch
;
95
int
cx
;
96
int
cy
;
97
char
*
filename
;
///< Motion search detailed log filename
98
int
opencl
;
99
#if CONFIG_OPENCL
100
DeshakeOpenclContext
opencl_ctx
;
101
#endif
102
int (*
transform
)(
AVFilterContext
*ctx,
int
width
,
int
height
,
int
cw,
int
ch,
103
const
float
*matrix_y,
const
float
*matrix_uv,
enum
InterpolateMethod
interpolate
,
104
enum
FillMethod
fill,
AVFrame
*
in
,
AVFrame
*
out
);
105
}
DeshakeContext
;
106
107
#endif
/* AVFILTER_DESHAKE_H */
Generated on Sun Sep 14 2014 18:56:09 for FFmpeg by
1.8.2