Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
0ca5c4da
Commit
0ca5c4da
authored
Jan 26, 2015
by
Stefano Sabatini
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi/mp: drop mp=eq and mp=eq2
mp=eq2 was ported to a native libavfilter filter in commit
4c38e960
.
parent
7ccd625a
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1 addition
and
778 deletions
+1
-778
filters.texi
doc/filters.texi
+0
-12
Makefile
libavfilter/Makefile
+0
-2
vf_eq.c
libavfilter/libmpcodecs/vf_eq.c
+0
-240
vf_eq2.c
libavfilter/libmpcodecs/vf_eq2.c
+0
-519
version.h
libavfilter/version.h
+1
-1
vf_mp.c
libavfilter/vf_mp.c
+0
-4
No files found.
doc/filters.texi
View file @
0ca5c4da
...
...
@@ -6279,8 +6279,6 @@ the named filter.
The list of the currently supported filters follows:
@table @var
@item eq2
@item eq
@item softpulldown
@end table
...
...
@@ -6288,16 +6286,6 @@ The parameter syntax and behavior for the listed filters are the same
of the corresponding MPlayer filters. For detailed instructions check
the "VIDEO FILTERS" section in the MPlayer manual.
@subsection Examples
@itemize
@item
Adjust gamma, brightness, contrast:
@example
mp=eq2=1.0:2:0.5
@end example
@end itemize
See also mplayer(1), @url{http://www.mplayerhq.hu/}.
@section mpdecimate
...
...
libavfilter/Makefile
View file @
0ca5c4da
...
...
@@ -228,8 +228,6 @@ OBJS-$(CONFIG_NULLSINK_FILTER) += vsink_nullsink.o
OBJS-$(CONFIG_MP_FILTER)
+=
libmpcodecs/mp_image.o
OBJS-$(CONFIG_MP_FILTER)
+=
libmpcodecs/img_format.o
OBJS-$(CONFIG_MP_FILTER)
+=
libmpcodecs/vf_eq2.o
OBJS-$(CONFIG_MP_FILTER)
+=
libmpcodecs/vf_eq.o
OBJS-$(CONFIG_MP_FILTER)
+=
libmpcodecs/vf_softpulldown.o
# multimedia filters
...
...
libavfilter/libmpcodecs/vf_eq.c
deleted
100644 → 0
View file @
7ccd625a
/*
* This file is part of MPlayer.
*
* MPlayer is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MPlayer 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include "config.h"
#include "mp_msg.h"
#include "cpudetect.h"
#include "img_format.h"
#include "mp_image.h"
#include "vf.h"
#include "libvo/video_out.h"
struct
vf_priv_s
{
unsigned
char
*
buf
;
int
brightness
;
int
contrast
;
};
#if HAVE_MMX_INLINE && HAVE_6REGS
static
void
process_MMX
(
unsigned
char
*
dest
,
int
dstride
,
unsigned
char
*
src
,
int
sstride
,
int
w
,
int
h
,
int
brightness
,
int
contrast
)
{
int
i
;
int
pel
;
int
dstep
=
dstride
-
w
;
int
sstep
=
sstride
-
w
;
short
brvec
[
4
];
short
contvec
[
4
];
contrast
=
((
contrast
+
100
)
*
256
*
16
)
/
100
;
brightness
=
((
brightness
+
100
)
*
511
)
/
200
-
128
-
contrast
/
32
;
brvec
[
0
]
=
brvec
[
1
]
=
brvec
[
2
]
=
brvec
[
3
]
=
brightness
;
contvec
[
0
]
=
contvec
[
1
]
=
contvec
[
2
]
=
contvec
[
3
]
=
contrast
;
while
(
h
--
)
{
__asm__
volatile
(
"movq (%5), %%mm3
\n\t
"
"movq (%6), %%mm4
\n\t
"
"pxor %%mm0, %%mm0
\n\t
"
"movl %4, %%eax
\n\t
"
ASMALIGN
(
4
)
"1:
\n\t
"
"movq (%0), %%mm1
\n\t
"
"movq (%0), %%mm2
\n\t
"
"punpcklbw %%mm0, %%mm1
\n\t
"
"punpckhbw %%mm0, %%mm2
\n\t
"
"psllw $4, %%mm1
\n\t
"
"psllw $4, %%mm2
\n\t
"
"pmulhw %%mm4, %%mm1
\n\t
"
"pmulhw %%mm4, %%mm2
\n\t
"
"paddw %%mm3, %%mm1
\n\t
"
"paddw %%mm3, %%mm2
\n\t
"
"packuswb %%mm2, %%mm1
\n\t
"
"add $8, %0
\n\t
"
"movq %%mm1, (%1)
\n\t
"
"add $8, %1
\n\t
"
"decl %%eax
\n\t
"
"jnz 1b
\n\t
"
:
"=r"
(
src
),
"=r"
(
dest
)
:
"0"
(
src
),
"1"
(
dest
),
"r"
(
w
>>
3
),
"r"
(
brvec
),
"r"
(
contvec
)
:
"%eax"
);
for
(
i
=
w
&
7
;
i
;
i
--
)
{
pel
=
((
*
src
++*
contrast
)
>>
12
)
+
brightness
;
if
(
pel
&
768
)
pel
=
(
-
pel
)
>>
31
;
*
dest
++
=
pel
;
}
src
+=
sstep
;
dest
+=
dstep
;
}
__asm__
volatile
(
"emms
\n\t
"
:::
"memory"
);
}
#endif
static
void
process_C
(
unsigned
char
*
dest
,
int
dstride
,
unsigned
char
*
src
,
int
sstride
,
int
w
,
int
h
,
int
brightness
,
int
contrast
)
{
int
i
;
int
pel
;
int
dstep
=
dstride
-
w
;
int
sstep
=
sstride
-
w
;
contrast
=
((
contrast
+
100
)
*
256
*
256
)
/
100
;
brightness
=
((
brightness
+
100
)
*
511
)
/
200
-
128
-
contrast
/
512
;
while
(
h
--
)
{
for
(
i
=
w
;
i
;
i
--
)
{
pel
=
((
*
src
++*
contrast
)
>>
16
)
+
brightness
;
if
(
pel
&
768
)
pel
=
(
-
pel
)
>>
31
;
*
dest
++
=
pel
;
}
src
+=
sstep
;
dest
+=
dstep
;
}
}
static
void
(
*
process
)(
unsigned
char
*
dest
,
int
dstride
,
unsigned
char
*
src
,
int
sstride
,
int
w
,
int
h
,
int
brightness
,
int
contrast
);
/* FIXME: add packed yuv version of process */
static
int
put_image
(
struct
vf_instance
*
vf
,
mp_image_t
*
mpi
,
double
pts
)
{
mp_image_t
*
dmpi
;
dmpi
=
ff_vf_get_image
(
vf
->
next
,
mpi
->
imgfmt
,
MP_IMGTYPE_EXPORT
,
0
,
mpi
->
w
,
mpi
->
h
);
dmpi
->
stride
[
0
]
=
mpi
->
stride
[
0
];
dmpi
->
planes
[
1
]
=
mpi
->
planes
[
1
];
dmpi
->
planes
[
2
]
=
mpi
->
planes
[
2
];
dmpi
->
stride
[
1
]
=
mpi
->
stride
[
1
];
dmpi
->
stride
[
2
]
=
mpi
->
stride
[
2
];
if
(
!
vf
->
priv
->
buf
)
vf
->
priv
->
buf
=
malloc
(
mpi
->
stride
[
0
]
*
mpi
->
h
);
if
((
vf
->
priv
->
brightness
==
0
)
&&
(
vf
->
priv
->
contrast
==
0
))
dmpi
->
planes
[
0
]
=
mpi
->
planes
[
0
];
else
{
dmpi
->
planes
[
0
]
=
vf
->
priv
->
buf
;
process
(
dmpi
->
planes
[
0
],
dmpi
->
stride
[
0
],
mpi
->
planes
[
0
],
mpi
->
stride
[
0
],
mpi
->
w
,
mpi
->
h
,
vf
->
priv
->
brightness
,
vf
->
priv
->
contrast
);
}
return
ff_vf_next_put_image
(
vf
,
dmpi
,
pts
);
}
static
int
control
(
struct
vf_instance
*
vf
,
int
request
,
void
*
data
)
{
vf_equalizer_t
*
eq
;
switch
(
request
)
{
case
VFCTRL_SET_EQUALIZER
:
eq
=
data
;
if
(
!
strcmp
(
eq
->
item
,
"brightness"
))
{
vf
->
priv
->
brightness
=
eq
->
value
;
return
CONTROL_TRUE
;
}
else
if
(
!
strcmp
(
eq
->
item
,
"contrast"
))
{
vf
->
priv
->
contrast
=
eq
->
value
;
return
CONTROL_TRUE
;
}
break
;
case
VFCTRL_GET_EQUALIZER
:
eq
=
data
;
if
(
!
strcmp
(
eq
->
item
,
"brightness"
))
{
eq
->
value
=
vf
->
priv
->
brightness
;
return
CONTROL_TRUE
;
}
else
if
(
!
strcmp
(
eq
->
item
,
"contrast"
))
{
eq
->
value
=
vf
->
priv
->
contrast
;
return
CONTROL_TRUE
;
}
break
;
}
return
ff_vf_next_control
(
vf
,
request
,
data
);
}
static
int
query_format
(
struct
vf_instance
*
vf
,
unsigned
int
fmt
)
{
switch
(
fmt
)
{
case
IMGFMT_YVU9
:
case
IMGFMT_IF09
:
case
IMGFMT_YV12
:
case
IMGFMT_I420
:
case
IMGFMT_IYUV
:
case
IMGFMT_CLPL
:
case
IMGFMT_Y800
:
case
IMGFMT_Y8
:
case
IMGFMT_NV12
:
case
IMGFMT_NV21
:
case
IMGFMT_444P
:
case
IMGFMT_422P
:
case
IMGFMT_411P
:
return
ff_vf_next_query_format
(
vf
,
fmt
);
}
return
0
;
}
static
void
uninit
(
struct
vf_instance
*
vf
)
{
free
(
vf
->
priv
->
buf
);
free
(
vf
->
priv
);
}
static
int
vf_open
(
vf_instance_t
*
vf
,
char
*
args
)
{
vf
->
control
=
control
;
vf
->
query_format
=
query_format
;
vf
->
put_image
=
put_image
;
vf
->
uninit
=
uninit
;
vf
->
priv
=
malloc
(
sizeof
(
struct
vf_priv_s
));
memset
(
vf
->
priv
,
0
,
sizeof
(
struct
vf_priv_s
));
if
(
args
)
sscanf
(
args
,
"%d:%d"
,
&
vf
->
priv
->
brightness
,
&
vf
->
priv
->
contrast
);
process
=
process_C
;
#if HAVE_MMX_INLINE && HAVE_6REGS
if
(
ff_gCpuCaps
.
hasMMX
)
process
=
process_MMX
;
#endif
return
1
;
}
const
vf_info_t
ff_vf_info_eq
=
{
"soft video equalizer"
,
"eq"
,
"Richard Felker"
,
""
,
vf_open
,
};
libavfilter/libmpcodecs/vf_eq2.c
deleted
100644 → 0
View file @
7ccd625a
/*
* Software equalizer (brightness, contrast, gamma, saturation)
*
* Hampa Hug <hampa@hampa.ch> (original LUT gamma/contrast/brightness filter)
* Daniel Moreno <comac@comac.darktech.org> (saturation, R/G/B gamma support)
* Richard Felker (original MMX contrast/brightness code (vf_eq.c))
* Michael Niedermayer <michalni@gmx.at> (LUT16)
*
* This file is part of MPlayer.
*
* MPlayer is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MPlayer 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <inttypes.h>
#include "config.h"
#include "mp_msg.h"
#include "cpudetect.h"
#include "img_format.h"
#include "mp_image.h"
#include "vf.h"
#define LUT16
/* Per channel parameters */
typedef
struct
eq2_param_t
{
unsigned
char
lut
[
256
];
#ifdef LUT16
uint16_t
lut16
[
256
*
256
];
#endif
int
lut_clean
;
void
(
*
adjust
)
(
struct
eq2_param_t
*
par
,
unsigned
char
*
dst
,
unsigned
char
*
src
,
unsigned
w
,
unsigned
h
,
unsigned
dstride
,
unsigned
sstride
);
double
c
;
double
b
;
double
g
;
double
w
;
}
eq2_param_t
;
typedef
struct
vf_priv_s
{
eq2_param_t
param
[
3
];
double
contrast
;
double
brightness
;
double
saturation
;
double
gamma
;
double
gamma_weight
;
double
rgamma
;
double
ggamma
;
double
bgamma
;
unsigned
buf_w
[
3
];
unsigned
buf_h
[
3
];
unsigned
char
*
buf
[
3
];
}
vf_eq2_t
;
static
void
create_lut
(
eq2_param_t
*
par
)
{
unsigned
i
;
double
g
,
v
;
double
lw
,
gw
;
g
=
par
->
g
;
gw
=
par
->
w
;
lw
=
1
.
0
-
gw
;
if
((
g
<
0
.
001
)
||
(
g
>
1000
.
0
))
{
g
=
1
.
0
;
}
g
=
1
.
0
/
g
;
for
(
i
=
0
;
i
<
256
;
i
++
)
{
v
=
(
double
)
i
/
255
.
0
;
v
=
par
->
c
*
(
v
-
0
.
5
)
+
0
.
5
+
par
->
b
;
if
(
v
<=
0
.
0
)
{
par
->
lut
[
i
]
=
0
;
}
else
{
v
=
v
*
lw
+
pow
(
v
,
g
)
*
gw
;
if
(
v
>=
1
.
0
)
{
par
->
lut
[
i
]
=
255
;
}
else
{
par
->
lut
[
i
]
=
(
unsigned
char
)
(
256
.
0
*
v
);
}
}
}
#ifdef LUT16
for
(
i
=
0
;
i
<
256
*
256
;
i
++
){
par
->
lut16
[
i
]
=
par
->
lut
[
i
&
0xFF
]
+
(
par
->
lut
[
i
>>
8
]
<<
8
);
}
#endif
par
->
lut_clean
=
1
;
}
#if HAVE_MMX_INLINE && HAVE_6REGS
static
void
affine_1d_MMX
(
eq2_param_t
*
par
,
unsigned
char
*
dst
,
unsigned
char
*
src
,
unsigned
w
,
unsigned
h
,
unsigned
dstride
,
unsigned
sstride
)
{
unsigned
i
;
int
contrast
,
brightness
;
unsigned
dstep
,
sstep
;
int
pel
;
short
brvec
[
4
];
short
contvec
[
4
];
// printf("\nmmx: src=%p dst=%p w=%d h=%d ds=%d ss=%d\n",src,dst,w,h,dstride,sstride);
contrast
=
(
int
)
(
par
->
c
*
256
*
16
);
brightness
=
((
int
)
(
100
.
0
*
par
->
b
+
100
.
0
)
*
511
)
/
200
-
128
-
contrast
/
32
;
brvec
[
0
]
=
brvec
[
1
]
=
brvec
[
2
]
=
brvec
[
3
]
=
brightness
;
contvec
[
0
]
=
contvec
[
1
]
=
contvec
[
2
]
=
contvec
[
3
]
=
contrast
;
sstep
=
sstride
-
w
;
dstep
=
dstride
-
w
;
while
(
h
--
>
0
)
{
__asm__
volatile
(
"movq (%5), %%mm3
\n\t
"
"movq (%6), %%mm4
\n\t
"
"pxor %%mm0, %%mm0
\n\t
"
"movl %4, %%eax
\n\t
"
ASMALIGN
(
4
)
"1:
\n\t
"
"movq (%0), %%mm1
\n\t
"
"movq (%0), %%mm2
\n\t
"
"punpcklbw %%mm0, %%mm1
\n\t
"
"punpckhbw %%mm0, %%mm2
\n\t
"
"psllw $4, %%mm1
\n\t
"
"psllw $4, %%mm2
\n\t
"
"pmulhw %%mm4, %%mm1
\n\t
"
"pmulhw %%mm4, %%mm2
\n\t
"
"paddw %%mm3, %%mm1
\n\t
"
"paddw %%mm3, %%mm2
\n\t
"
"packuswb %%mm2, %%mm1
\n\t
"
"add $8, %0
\n\t
"
"movq %%mm1, (%1)
\n\t
"
"add $8, %1
\n\t
"
"decl %%eax
\n\t
"
"jnz 1b
\n\t
"
:
"=r"
(
src
),
"=r"
(
dst
)
:
"0"
(
src
),
"1"
(
dst
),
"r"
(
w
>>
3
),
"r"
(
brvec
),
"r"
(
contvec
)
:
"%eax"
);
for
(
i
=
w
&
7
;
i
>
0
;
i
--
)
{
pel
=
((
*
src
++
*
contrast
)
>>
12
)
+
brightness
;
if
(
pel
&
768
)
{
pel
=
(
-
pel
)
>>
31
;
}
*
dst
++
=
pel
;
}
src
+=
sstep
;
dst
+=
dstep
;
}
__asm__
volatile
(
"emms
\n\t
"
:::
"memory"
);
}
#endif
static
void
apply_lut
(
eq2_param_t
*
par
,
unsigned
char
*
dst
,
unsigned
char
*
src
,
unsigned
w
,
unsigned
h
,
unsigned
dstride
,
unsigned
sstride
)
{
unsigned
i
,
j
,
w2
;
unsigned
char
*
lut
;
uint16_t
*
lut16
;
if
(
!
par
->
lut_clean
)
{
create_lut
(
par
);
}
lut
=
par
->
lut
;
#ifdef LUT16
lut16
=
par
->
lut16
;
w2
=
(
w
>>
3
)
<<
2
;
for
(
j
=
0
;
j
<
h
;
j
++
)
{
uint16_t
*
src16
=
(
uint16_t
*
)
src
;
uint16_t
*
dst16
=
(
uint16_t
*
)
dst
;
for
(
i
=
0
;
i
<
w2
;
i
+=
4
)
{
dst16
[
i
+
0
]
=
lut16
[
src16
[
i
+
0
]];
dst16
[
i
+
1
]
=
lut16
[
src16
[
i
+
1
]];
dst16
[
i
+
2
]
=
lut16
[
src16
[
i
+
2
]];
dst16
[
i
+
3
]
=
lut16
[
src16
[
i
+
3
]];
}
i
<<=
1
;
#else
w2
=
(
w
>>
3
)
<<
3
;
for
(
j
=
0
;
j
<
h
;
j
++
)
{
for
(
i
=
0
;
i
<
w2
;
i
+=
8
)
{
dst
[
i
+
0
]
=
lut
[
src
[
i
+
0
]];
dst
[
i
+
1
]
=
lut
[
src
[
i
+
1
]];
dst
[
i
+
2
]
=
lut
[
src
[
i
+
2
]];
dst
[
i
+
3
]
=
lut
[
src
[
i
+
3
]];
dst
[
i
+
4
]
=
lut
[
src
[
i
+
4
]];
dst
[
i
+
5
]
=
lut
[
src
[
i
+
5
]];
dst
[
i
+
6
]
=
lut
[
src
[
i
+
6
]];
dst
[
i
+
7
]
=
lut
[
src
[
i
+
7
]];
}
#endif
for
(;
i
<
w
;
i
++
)
{
dst
[
i
]
=
lut
[
src
[
i
]];
}
src
+=
sstride
;
dst
+=
dstride
;
}
}
static
int
put_image
(
vf_instance_t
*
vf
,
mp_image_t
*
src
,
double
pts
)
{
unsigned
i
;
vf_eq2_t
*
eq2
;
mp_image_t
*
dst
;
unsigned
long
img_n
,
img_c
;
eq2
=
vf
->
priv
;
if
((
eq2
->
buf_w
[
0
]
!=
src
->
w
)
||
(
eq2
->
buf_h
[
0
]
!=
src
->
h
))
{
eq2
->
buf_w
[
0
]
=
src
->
w
;
eq2
->
buf_h
[
0
]
=
src
->
h
;
eq2
->
buf_w
[
1
]
=
eq2
->
buf_w
[
2
]
=
src
->
w
>>
src
->
chroma_x_shift
;
eq2
->
buf_h
[
1
]
=
eq2
->
buf_h
[
2
]
=
src
->
h
>>
src
->
chroma_y_shift
;
img_n
=
eq2
->
buf_w
[
0
]
*
eq2
->
buf_h
[
0
];
if
(
src
->
num_planes
>
1
){
img_c
=
eq2
->
buf_w
[
1
]
*
eq2
->
buf_h
[
1
];
eq2
->
buf
[
0
]
=
realloc
(
eq2
->
buf
[
0
],
img_n
+
2
*
img_c
);
eq2
->
buf
[
1
]
=
eq2
->
buf
[
0
]
+
img_n
;
eq2
->
buf
[
2
]
=
eq2
->
buf
[
1
]
+
img_c
;
}
else
eq2
->
buf
[
0
]
=
realloc
(
eq2
->
buf
[
0
],
img_n
);
}
dst
=
ff_vf_get_image
(
vf
->
next
,
src
->
imgfmt
,
MP_IMGTYPE_EXPORT
,
0
,
src
->
w
,
src
->
h
);
for
(
i
=
0
;
i
<
((
src
->
num_planes
>
1
)
?
3
:
1
);
i
++
)
{
if
(
eq2
->
param
[
i
].
adjust
)
{
dst
->
planes
[
i
]
=
eq2
->
buf
[
i
];
dst
->
stride
[
i
]
=
eq2
->
buf_w
[
i
];
eq2
->
param
[
i
].
adjust
(
&
eq2
->
param
[
i
],
dst
->
planes
[
i
],
src
->
planes
[
i
],
eq2
->
buf_w
[
i
],
eq2
->
buf_h
[
i
],
dst
->
stride
[
i
],
src
->
stride
[
i
]);
}
else
{
dst
->
planes
[
i
]
=
src
->
planes
[
i
];
dst
->
stride
[
i
]
=
src
->
stride
[
i
];
}
}
return
ff_vf_next_put_image
(
vf
,
dst
,
pts
);
}
static
void
check_values
(
eq2_param_t
*
par
)
{
/* yuck! floating point comparisons... */
if
((
par
->
c
==
1
.
0
)
&&
(
par
->
b
==
0
.
0
)
&&
(
par
->
g
==
1
.
0
))
{
par
->
adjust
=
NULL
;
}
#if HAVE_MMX_INLINE && HAVE_6REGS
else
if
(
par
->
g
==
1
.
0
&&
ff_gCpuCaps
.
hasMMX
)
{
par
->
adjust
=
&
affine_1d_MMX
;
}
#endif
else
{
par
->
adjust
=
&
apply_lut
;
}
}
static
void
print_values
(
vf_eq2_t
*
eq2
)
{
ff_mp_msg
(
MSGT_VFILTER
,
MSGL_V
,
"vf_eq2: c=%.2f b=%.2f g=%.4f s=%.2f
\n
"
,
eq2
->
contrast
,
eq2
->
brightness
,
eq2
->
gamma
,
eq2
->
saturation
);
}
static
void
set_contrast
(
vf_eq2_t
*
eq2
,
double
c
)
{
eq2
->
contrast
=
c
;
eq2
->
param
[
0
].
c
=
c
;
eq2
->
param
[
0
].
lut_clean
=
0
;
check_values
(
&
eq2
->
param
[
0
]);
print_values
(
eq2
);
}
static
void
set_brightness
(
vf_eq2_t
*
eq2
,
double
b
)
{
eq2
->
brightness
=
b
;
eq2
->
param
[
0
].
b
=
b
;
eq2
->
param
[
0
].
lut_clean
=
0
;
check_values
(
&
eq2
->
param
[
0
]);
print_values
(
eq2
);
}
static
void
set_gamma
(
vf_eq2_t
*
eq2
,
double
g
)
{
eq2
->
gamma
=
g
;
eq2
->
param
[
0
].
g
=
eq2
->
gamma
*
eq2
->
ggamma
;
eq2
->
param
[
1
].
g
=
sqrt
(
eq2
->
bgamma
/
eq2
->
ggamma
);
eq2
->
param
[
2
].
g
=
sqrt
(
eq2
->
rgamma
/
eq2
->
ggamma
);
eq2
->
param
[
0
].
w
=
eq2
->
param
[
1
].
w
=
eq2
->
param
[
2
].
w
=
eq2
->
gamma_weight
;
eq2
->
param
[
0
].
lut_clean
=
0
;
eq2
->
param
[
1
].
lut_clean
=
0
;
eq2
->
param
[
2
].
lut_clean
=
0
;
check_values
(
&
eq2
->
param
[
0
]);
check_values
(
&
eq2
->
param
[
1
]);
check_values
(
&
eq2
->
param
[
2
]);
print_values
(
eq2
);
}
static
void
set_saturation
(
vf_eq2_t
*
eq2
,
double
s
)
{
eq2
->
saturation
=
s
;
eq2
->
param
[
1
].
c
=
s
;
eq2
->
param
[
2
].
c
=
s
;
eq2
->
param
[
1
].
lut_clean
=
0
;
eq2
->
param
[
2
].
lut_clean
=
0
;
check_values
(
&
eq2
->
param
[
1
]);
check_values
(
&
eq2
->
param
[
2
]);
print_values
(
eq2
);
}
static
int
control
(
vf_instance_t
*
vf
,
int
request
,
void
*
data
)
{
vf_equalizer_t
*
eq
;
switch
(
request
)
{
case
VFCTRL_SET_EQUALIZER
:
eq
=
(
vf_equalizer_t
*
)
data
;
if
(
strcmp
(
eq
->
item
,
"gamma"
)
==
0
)
{
set_gamma
(
vf
->
priv
,
exp
(
log
(
8
.
0
)
*
eq
->
value
/
100
.
0
));
return
CONTROL_TRUE
;
}
else
if
(
strcmp
(
eq
->
item
,
"contrast"
)
==
0
)
{
set_contrast
(
vf
->
priv
,
(
1
.
0
/
100
.
0
)
*
(
eq
->
value
+
100
));
return
CONTROL_TRUE
;
}
else
if
(
strcmp
(
eq
->
item
,
"brightness"
)
==
0
)
{
set_brightness
(
vf
->
priv
,
(
1
.
0
/
100
.
0
)
*
eq
->
value
);
return
CONTROL_TRUE
;
}
else
if
(
strcmp
(
eq
->
item
,
"saturation"
)
==
0
)
{
set_saturation
(
vf
->
priv
,
(
double
)
(
eq
->
value
+
100
)
/
100
.
0
);
return
CONTROL_TRUE
;
}
break
;
case
VFCTRL_GET_EQUALIZER
:
eq
=
(
vf_equalizer_t
*
)
data
;
if
(
strcmp
(
eq
->
item
,
"gamma"
)
==
0
)
{
eq
->
value
=
(
int
)
(
100
.
0
*
log
(
vf
->
priv
->
gamma
)
/
log
(
8
.
0
));
return
CONTROL_TRUE
;
}
else
if
(
strcmp
(
eq
->
item
,
"contrast"
)
==
0
)
{
eq
->
value
=
(
int
)
(
100
.
0
*
vf
->
priv
->
contrast
)
-
100
;
return
CONTROL_TRUE
;
}
else
if
(
strcmp
(
eq
->
item
,
"brightness"
)
==
0
)
{
eq
->
value
=
(
int
)
(
100
.
0
*
vf
->
priv
->
brightness
);
return
CONTROL_TRUE
;
}
else
if
(
strcmp
(
eq
->
item
,
"saturation"
)
==
0
)
{
eq
->
value
=
(
int
)
(
100
.
0
*
vf
->
priv
->
saturation
)
-
100
;
return
CONTROL_TRUE
;
}
break
;
}
return
ff_vf_next_control
(
vf
,
request
,
data
);
}
static
int
query_format
(
vf_instance_t
*
vf
,
unsigned
fmt
)
{
switch
(
fmt
)
{
case
IMGFMT_YVU9
:
case
IMGFMT_IF09
:
case
IMGFMT_YV12
:
case
IMGFMT_I420
:
case
IMGFMT_IYUV
:
case
IMGFMT_Y800
:
case
IMGFMT_Y8
:
case
IMGFMT_444P
:
case
IMGFMT_422P
:
case
IMGFMT_411P
:
return
ff_vf_next_query_format
(
vf
,
fmt
);
}
return
0
;
}
static
void
uninit
(
vf_instance_t
*
vf
)
{
if
(
vf
->
priv
)
{
free
(
vf
->
priv
->
buf
[
0
]);
free
(
vf
->
priv
);
}
}
static
int
vf_open
(
vf_instance_t
*
vf
,
char
*
args
)
{
unsigned
i
;
vf_eq2_t
*
eq2
;
double
par
[
8
];
vf
->
control
=
control
;
vf
->
query_format
=
query_format
;
vf
->
put_image
=
put_image
;
vf
->
uninit
=
uninit
;
vf
->
priv
=
malloc
(
sizeof
(
vf_eq2_t
));
eq2
=
vf
->
priv
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
eq2
->
buf
[
i
]
=
NULL
;
eq2
->
buf_w
[
i
]
=
0
;
eq2
->
buf_h
[
i
]
=
0
;
eq2
->
param
[
i
].
adjust
=
NULL
;
eq2
->
param
[
i
].
c
=
1
.
0
;
eq2
->
param
[
i
].
b
=
0
.
0
;
eq2
->
param
[
i
].
g
=
1
.
0
;
eq2
->
param
[
i
].
lut_clean
=
0
;
}
eq2
->
contrast
=
1
.
0
;
eq2
->
brightness
=
0
.
0
;
eq2
->
saturation
=
1
.
0
;
eq2
->
gamma
=
1
.
0
;
eq2
->
gamma_weight
=
1
.
0
;
eq2
->
rgamma
=
1
.
0
;
eq2
->
ggamma
=
1
.
0
;
eq2
->
bgamma
=
1
.
0
;
if
(
args
)
{
par
[
0
]
=
1
.
0
;
par
[
1
]
=
1
.
0
;
par
[
2
]
=
0
.
0
;
par
[
3
]
=
1
.
0
;
par
[
4
]
=
1
.
0
;
par
[
5
]
=
1
.
0
;
par
[
6
]
=
1
.
0
;
par
[
7
]
=
1
.
0
;
sscanf
(
args
,
"%lf:%lf:%lf:%lf:%lf:%lf:%lf:%lf"
,
par
,
par
+
1
,
par
+
2
,
par
+
3
,
par
+
4
,
par
+
5
,
par
+
6
,
par
+
7
);
eq2
->
rgamma
=
par
[
4
];
eq2
->
ggamma
=
par
[
5
];
eq2
->
bgamma
=
par
[
6
];
eq2
->
gamma_weight
=
par
[
7
];
set_gamma
(
eq2
,
par
[
0
]);
set_contrast
(
eq2
,
par
[
1
]);
set_brightness
(
eq2
,
par
[
2
]);
set_saturation
(
eq2
,
par
[
3
]);
}
return
1
;
}
const
vf_info_t
ff_vf_info_eq2
=
{
"Software equalizer"
,
"eq2"
,
"Hampa Hug, Daniel Moreno, Richard Felker"
,
""
,
&
vf_open
,
NULL
};
libavfilter/version.h
View file @
0ca5c4da
...
...
@@ -31,7 +31,7 @@
#define LIBAVFILTER_VERSION_MAJOR 5
#define LIBAVFILTER_VERSION_MINOR 9
#define LIBAVFILTER_VERSION_MICRO 10
0
#define LIBAVFILTER_VERSION_MICRO 10
1
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \
...
...
libavfilter/vf_mp.c
View file @
0ca5c4da
...
...
@@ -125,13 +125,9 @@ static const struct {
{
0
,
AV_PIX_FMT_NONE
}
};
extern
const
vf_info_t
ff_vf_info_eq2
;
extern
const
vf_info_t
ff_vf_info_eq
;
extern
const
vf_info_t
ff_vf_info_softpulldown
;
static
const
vf_info_t
*
const
filters
[]
=
{
&
ff_vf_info_eq2
,
&
ff_vf_info_eq
,
&
ff_vf_info_softpulldown
,
NULL
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment