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
3b2b636a
Commit
3b2b636a
authored
Mar 13, 2013
by
Clément Bœsch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi: add perms and aperms filters.
parent
18369967
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
233 additions
and
2 deletions
+233
-2
Changelog
Changelog
+1
-0
filters.texi
doc/filters.texi
+39
-0
Makefile
libavfilter/Makefile
+2
-0
allfilters.c
libavfilter/allfilters.c
+2
-0
f_perms.c
libavfilter/f_perms.c
+187
-0
version.h
libavfilter/version.h
+2
-2
No files found.
Changelog
View file @
3b2b636a
...
@@ -7,6 +7,7 @@ version <next>:
...
@@ -7,6 +7,7 @@ version <next>:
- ffmpeg now fails when input options are used for output file
- ffmpeg now fails when input options are used for output file
or vice versa
or vice versa
- support for Monkey's Audio versions from 3.93
- support for Monkey's Audio versions from 3.93
- perms and aperms filters
version 1.2:
version 1.2:
...
...
doc/filters.texi
View file @
3b2b636a
...
@@ -662,6 +662,7 @@ afade=t=out:ss=875:d=25
...
@@ -662,6 +662,7 @@ afade=t=out:ss=875:d=25
@end example
@end example
@end itemize
@end itemize
@anchor{aformat}
@section aformat
@section aformat
Set output format constraints for the input audio. The framework will
Set output format constraints for the input audio. The framework will
...
@@ -3028,6 +3029,7 @@ framework.
...
@@ -3028,6 +3029,7 @@ framework.
The filter does not take parameters.
The filter does not take parameters.
@anchor{format}
@section format
@section format
Convert the input video to one of the specified pixel formats.
Convert the input video to one of the specified pixel formats.
...
@@ -6085,6 +6087,43 @@ tools.
...
@@ -6085,6 +6087,43 @@ tools.
Below is a description of the currently available multimedia filters.
Below is a description of the currently available multimedia filters.
@section aperms, perms
Set read/write permissions for the output frames.
These filters are mainly aimed at developers to test direct path in the
following filter in the filtergraph.
The filters accept parameters as a list of @var{key}=@var{value} pairs,
separated by ":". If the key of the first options is omitted, the argument is
assumed to be the @var{mode}.
A description of the accepted parameters follows.
@table @option
@item mode
Select the permissions mode.
It accepts the following values:
@table @samp
@item none
Do nothing. This is the default.
@item ro
Set all the output frames read-only.
@item rw
Set all the output frames directly writable.
@item toggle
Make the frame read-only if writable, and writable if read-only.
@item random
Set each output frame read-only or writable randomly.
@end table
@end table
Note: in case of auto-inserted filter between the permission filter and the
following one, the permission might not be received as expected in that
following filter. Inserting a @ref{format} or @ref{aformat} filter before the
perms/aperms filter can avoid this problem.
@section aselect, select
@section aselect, select
Select frames to pass in output.
Select frames to pass in output.
...
...
libavfilter/Makefile
View file @
3b2b636a
...
@@ -56,6 +56,7 @@ OBJS-$(CONFIG_AMERGE_FILTER) += af_amerge.o
...
@@ -56,6 +56,7 @@ OBJS-$(CONFIG_AMERGE_FILTER) += af_amerge.o
OBJS-$(CONFIG_AMIX_FILTER)
+=
af_amix.o
OBJS-$(CONFIG_AMIX_FILTER)
+=
af_amix.o
OBJS-$(CONFIG_ANULL_FILTER)
+=
af_anull.o
OBJS-$(CONFIG_ANULL_FILTER)
+=
af_anull.o
OBJS-$(CONFIG_APAD_FILTER)
+=
af_apad.o
OBJS-$(CONFIG_APAD_FILTER)
+=
af_apad.o
OBJS-$(CONFIG_APERMS_FILTER)
+=
f_perms.o
OBJS-$(CONFIG_ARESAMPLE_FILTER)
+=
af_aresample.o
OBJS-$(CONFIG_ARESAMPLE_FILTER)
+=
af_aresample.o
OBJS-$(CONFIG_ASELECT_FILTER)
+=
f_select.o
OBJS-$(CONFIG_ASELECT_FILTER)
+=
f_select.o
OBJS-$(CONFIG_ASENDCMD_FILTER)
+=
f_sendcmd.o
OBJS-$(CONFIG_ASENDCMD_FILTER)
+=
f_sendcmd.o
...
@@ -139,6 +140,7 @@ OBJS-$(CONFIG_NULL_FILTER) += vf_null.o
...
@@ -139,6 +140,7 @@ OBJS-$(CONFIG_NULL_FILTER) += vf_null.o
OBJS-$(CONFIG_OCV_FILTER)
+=
vf_libopencv.o
OBJS-$(CONFIG_OCV_FILTER)
+=
vf_libopencv.o
OBJS-$(CONFIG_OVERLAY_FILTER)
+=
vf_overlay.o
OBJS-$(CONFIG_OVERLAY_FILTER)
+=
vf_overlay.o
OBJS-$(CONFIG_PAD_FILTER)
+=
vf_pad.o
OBJS-$(CONFIG_PAD_FILTER)
+=
vf_pad.o
OBJS-$(CONFIG_PERMS_FILTER)
+=
f_perms.o
OBJS-$(CONFIG_PIXDESCTEST_FILTER)
+=
vf_pixdesctest.o
OBJS-$(CONFIG_PIXDESCTEST_FILTER)
+=
vf_pixdesctest.o
OBJS-$(CONFIG_PP_FILTER)
+=
vf_pp.o
OBJS-$(CONFIG_PP_FILTER)
+=
vf_pp.o
OBJS-$(CONFIG_REMOVELOGO_FILTER)
+=
bbox.o
lswsutils.o
lavfutils.o
vf_removelogo.o
OBJS-$(CONFIG_REMOVELOGO_FILTER)
+=
bbox.o
lswsutils.o
lavfutils.o
vf_removelogo.o
...
...
libavfilter/allfilters.c
View file @
3b2b636a
...
@@ -52,6 +52,7 @@ void avfilter_register_all(void)
...
@@ -52,6 +52,7 @@ void avfilter_register_all(void)
REGISTER_FILTER
(
AMIX
,
amix
,
af
);
REGISTER_FILTER
(
AMIX
,
amix
,
af
);
REGISTER_FILTER
(
ANULL
,
anull
,
af
);
REGISTER_FILTER
(
ANULL
,
anull
,
af
);
REGISTER_FILTER
(
APAD
,
apad
,
af
);
REGISTER_FILTER
(
APAD
,
apad
,
af
);
REGISTER_FILTER
(
APERMS
,
aperms
,
af
);
REGISTER_FILTER
(
ARESAMPLE
,
aresample
,
af
);
REGISTER_FILTER
(
ARESAMPLE
,
aresample
,
af
);
REGISTER_FILTER
(
ASELECT
,
aselect
,
af
);
REGISTER_FILTER
(
ASELECT
,
aselect
,
af
);
REGISTER_FILTER
(
ASENDCMD
,
asendcmd
,
af
);
REGISTER_FILTER
(
ASENDCMD
,
asendcmd
,
af
);
...
@@ -135,6 +136,7 @@ void avfilter_register_all(void)
...
@@ -135,6 +136,7 @@ void avfilter_register_all(void)
REGISTER_FILTER
(
OCV
,
ocv
,
vf
);
REGISTER_FILTER
(
OCV
,
ocv
,
vf
);
REGISTER_FILTER
(
OVERLAY
,
overlay
,
vf
);
REGISTER_FILTER
(
OVERLAY
,
overlay
,
vf
);
REGISTER_FILTER
(
PAD
,
pad
,
vf
);
REGISTER_FILTER
(
PAD
,
pad
,
vf
);
REGISTER_FILTER
(
PERMS
,
perms
,
vf
);
REGISTER_FILTER
(
PIXDESCTEST
,
pixdesctest
,
vf
);
REGISTER_FILTER
(
PIXDESCTEST
,
pixdesctest
,
vf
);
REGISTER_FILTER
(
PP
,
pp
,
vf
);
REGISTER_FILTER
(
PP
,
pp
,
vf
);
REGISTER_FILTER
(
REMOVELOGO
,
removelogo
,
vf
);
REGISTER_FILTER
(
REMOVELOGO
,
removelogo
,
vf
);
...
...
libavfilter/f_perms.c
0 → 100644
View file @
3b2b636a
/*
* 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
*/
#include "libavutil/lfg.h"
#include "libavutil/opt.h"
#include "libavutil/random_seed.h"
#include "audio.h"
#include "video.h"
enum
mode
{
MODE_NONE
,
MODE_RO
,
MODE_RW
,
MODE_TOGGLE
,
MODE_RANDOM
,
NB_MODES
};
typedef
struct
{
const
AVClass
*
class
;
AVLFG
lfg
;
enum
mode
mode
;
}
PermsContext
;
#define OFFSET(x) offsetof(PermsContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM
static
const
AVOption
options
[]
=
{
{
"mode"
,
"select permissions mode"
,
OFFSET
(
mode
),
AV_OPT_TYPE_INT
,
{.
i64
=
MODE_NONE
},
MODE_NONE
,
NB_MODES
-
1
,
FLAGS
,
"mode"
},
{
"none"
,
"do nothing"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
MODE_NONE
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"mode"
},
{
"ro"
,
"set all output frames read-only"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
MODE_RO
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"mode"
},
{
"rw"
,
"set all output frames writable"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
MODE_RW
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"mode"
},
{
"toggle"
,
"switch permissions"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
MODE_TOGGLE
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"mode"
},
{
"random"
,
"set permissions randomly"
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
MODE_RANDOM
},
INT_MIN
,
INT_MAX
,
FLAGS
,
"mode"
},
{
NULL
}
};
static
av_cold
int
init
(
AVFilterContext
*
ctx
,
const
char
*
args
,
const
AVClass
*
class
)
{
int
ret
;
PermsContext
*
perms
=
ctx
->
priv
;
static
const
char
*
shorthand
[]
=
{
"mode"
,
NULL
};
perms
->
class
=
class
;
av_opt_set_defaults
(
perms
);
if
((
ret
=
av_opt_set_from_string
(
perms
,
args
,
shorthand
,
"="
,
":"
))
<
0
)
return
ret
;
// TODO: add a seed option
if
(
perms
->
mode
==
MODE_RANDOM
)
av_lfg_init
(
&
perms
->
lfg
,
av_get_random_seed
());
av_opt_free
(
perms
);
return
0
;
}
enum
perm
{
RO
,
RW
};
static
const
char
*
perm_str
[
2
]
=
{
"RO"
,
"RW"
};
static
int
filter_frame
(
AVFilterLink
*
inlink
,
AVFrame
*
frame
)
{
int
ret
;
AVFilterContext
*
ctx
=
inlink
->
dst
;
PermsContext
*
perms
=
ctx
->
priv
;
AVFrame
*
out
=
frame
;
enum
perm
in_perm
=
av_frame_is_writable
(
frame
)
?
RW
:
RO
;
enum
perm
out_perm
;
switch
(
perms
->
mode
)
{
case
MODE_TOGGLE
:
out_perm
=
in_perm
==
RO
?
RW
:
RO
;
break
;
case
MODE_RANDOM
:
out_perm
=
av_lfg_get
(
&
perms
->
lfg
)
&
1
?
RW
:
RO
;
break
;
case
MODE_RO
:
out_perm
=
RO
;
break
;
case
MODE_RW
:
out_perm
=
RW
;
break
;
default:
out_perm
=
in_perm
;
break
;
}
av_log
(
ctx
,
AV_LOG_VERBOSE
,
"%s -> %s%s
\n
"
,
perm_str
[
in_perm
],
perm_str
[
out_perm
],
in_perm
==
out_perm
?
" (no-op)"
:
""
);
if
(
in_perm
==
RO
&&
out_perm
==
RW
)
{
if
((
ret
=
av_frame_make_writable
(
frame
))
<
0
)
return
ret
;
}
else
if
(
in_perm
==
RW
&&
out_perm
==
RO
)
{
out
=
av_frame_clone
(
frame
);
if
(
!
out
)
return
AVERROR
(
ENOMEM
);
}
ret
=
ff_filter_frame
(
ctx
->
outputs
[
0
],
out
);
if
(
in_perm
==
RW
&&
out_perm
==
RO
)
av_frame_free
(
&
frame
);
return
ret
;
}
#if CONFIG_APERMS_FILTER
#define aperms_options options
AVFILTER_DEFINE_CLASS
(
aperms
);
static
av_cold
int
aperms_init
(
AVFilterContext
*
ctx
,
const
char
*
args
)
{
return
init
(
ctx
,
args
,
&
aperms_class
);
}
static
const
AVFilterPad
aperms_inputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
filter_frame
=
filter_frame
,
},
{
NULL
}
};
static
const
AVFilterPad
aperms_outputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
},
{
NULL
}
};
AVFilter
avfilter_af_aperms
=
{
.
name
=
"aperms"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Set permissions for the output audio frame."
),
.
init
=
aperms_init
,
.
priv_size
=
sizeof
(
PermsContext
),
.
inputs
=
aperms_inputs
,
.
outputs
=
aperms_outputs
,
.
priv_class
=
&
aperms_class
,
};
#endif
/* CONFIG_APERMS_FILTER */
#if CONFIG_PERMS_FILTER
#define perms_options options
AVFILTER_DEFINE_CLASS
(
perms
);
static
av_cold
int
perms_init
(
AVFilterContext
*
ctx
,
const
char
*
args
)
{
return
init
(
ctx
,
args
,
&
perms_class
);
}
static
const
AVFilterPad
perms_inputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
filter_frame
=
filter_frame
,
},
{
NULL
}
};
static
const
AVFilterPad
perms_outputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
},
{
NULL
}
};
AVFilter
avfilter_vf_perms
=
{
.
name
=
"perms"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Set permissions for the output video frame."
),
.
init
=
perms_init
,
.
priv_size
=
sizeof
(
PermsContext
),
.
inputs
=
perms_inputs
,
.
outputs
=
perms_outputs
,
.
priv_class
=
&
perms_class
,
};
#endif
/* CONFIG_PERMS_FILTER */
libavfilter/version.h
View file @
3b2b636a
...
@@ -29,8 +29,8 @@
...
@@ -29,8 +29,8 @@
#include "libavutil/avutil.h"
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR 4
5
#define LIBAVFILTER_VERSION_MINOR 4
6
#define LIBAVFILTER_VERSION_MICRO 10
4
#define LIBAVFILTER_VERSION_MICRO 10
0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \
LIBAVFILTER_VERSION_MINOR, \
...
...
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