blob: 0c8a4d9f0b9905b56d0ffd15aad8ca5b5f4fedec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/*
* Warning: this filter is deprecated.
*/
#ifndef VF_DLOPEN_H
#define VF_DLOPEN_H
// when doing a two-way compatible change, don't change these
// when doing a backwards compatible change, bump minor version
// when doing an incompatible change, bump major version and zero minor version
#define VF_DLOPEN_MAJOR_VERSION 1
#define VF_DLOPEN_MINOR_VERSION 0
#if VF_DLOPEN_MINOR_VERSION > 0
# define VF_DLOPEN_CHECK_VERSION(ctx) \
do { \
if (ctx->major_version != VF_DLOPEN_MAJOR_VERSION || \
ctx->minor_version < VF_DLOPEN_MINOR_VERSION) \
return -1; \
} while (0)
#else
// workaround for "comparison is always false" warning
# define VF_DLOPEN_CHECK_VERSION(ctx) \
do { \
if (ctx->major_version != VF_DLOPEN_MAJOR_VERSION) \
return -1; \
} while (0)
#endif
// some common valid pixel format names:
// "gray": 8 bit grayscale
// "yuv420p": planar YUV, U and V planes have an xshift and yshift of 1
// "rgb24": packed RGB24
struct vf_dlopen_formatpair {
const char *from;
const char *to; // if NULL, this means identical format as source
};
#define FILTER_MAX_OUTCNT 16
struct vf_dlopen_picdata {
unsigned int planes;
unsigned char *plane[4];
signed int planestride[4];
unsigned int planewidth[4];
unsigned int planeheight[4];
unsigned int planexshift[4];
unsigned int planeyshift[4];
double pts;
};
struct vf_dlopen_context {
unsigned short major_version;
unsigned short minor_version;
void *priv;
struct vf_dlopen_formatpair *format_mapping;
// {NULL, NULL} terminated list of supported format pairs
// if NULL, anything goes
int (*config)(struct vf_dlopen_context *ctx); // -1 = error
// image config is put into the in_* members before calling this
// fills in the out_* members (which are preinitialized for an identity vf_dlopen_context)
int (*put_image)(struct vf_dlopen_context *ctx); // returns number of images written, or negative on error
// before this is called, inpic_* and outpic_* are filled
void (*uninit)(struct vf_dlopen_context *ctx);
unsigned int in_width;
unsigned int in_height;
unsigned int in_d_width;
unsigned int in_d_height;
const char *in_fmt;
unsigned int out_width;
unsigned int out_height;
unsigned int out_d_width;
unsigned int out_d_height;
const char *out_fmt;
unsigned int out_cnt;
struct vf_dlopen_picdata inpic;
char *inpic_qscale;
unsigned int inpic_qscalestride;
unsigned int inpic_qscaleshift;
struct vf_dlopen_picdata outpic[FILTER_MAX_OUTCNT];
};
typedef int (vf_dlopen_getcontext_func)(struct vf_dlopen_context *ctx, int argc, const char **argv); // negative on error
vf_dlopen_getcontext_func vf_dlopen_getcontext;
#endif
|