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
b4729382
Commit
b4729382
authored
Apr 10, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi: add an asetpts filter
parent
2548834b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
145 additions
and
7 deletions
+145
-7
Changelog
Changelog
+1
-0
filters.texi
doc/filters.texi
+69
-0
Makefile
libavfilter/Makefile
+2
-1
allfilters.c
libavfilter/allfilters.c
+1
-0
setpts.c
libavfilter/setpts.c
+71
-5
version.h
libavfilter/version.h
+1
-1
No files found.
Changelog
View file @
b4729382
...
@@ -12,6 +12,7 @@ version 10:
...
@@ -12,6 +12,7 @@ version 10:
- uniform options syntax across all filters
- uniform options syntax across all filters
- new interlace filter
- new interlace filter
- JPEG 2000 decoder
- JPEG 2000 decoder
- new asetpts filter (same as setpts, but for audio)
version 9:
version 9:
...
...
doc/filters.texi
View file @
b4729382
...
@@ -192,6 +192,75 @@ stream ends. The default value is 2 seconds.
...
@@ -192,6 +192,75 @@ stream ends. The default value is 2 seconds.
Pass the audio source unchanged to the output.
Pass the audio source unchanged to the output.
@section asetpts
Change the PTS (presentation timestamp) of the input audio frames.
This filter accepts the following options:
@table @option
@item expr
The expression which is evaluated for each frame to construct its timestamp.
@end table
The expression is evaluated through the eval API and can contain the following
constants:
@table @option
@item PTS
the presentation timestamp in input
@item PI
Greek PI
@item PHI
golden ratio
@item E
Euler number
@item N
Number of the audio samples pass through the filter so far, starting at 0.
@item S
Number of the audio samples in the current frame.
@item SR
Audio sample rate.
@item STARTPTS
the PTS of the first frame
@item PREV_INPTS
previous input PTS
@item PREV_OUTPTS
previous output PTS
@item RTCTIME
wallclock (RTC) time in microseconds
@item RTCSTART
wallclock (RTC) time at the start of the movie in microseconds
@end table
Some examples follow:
@example
# start counting PTS from zero
asetpts=expr=PTS-STARTPTS
#generate timestamps by counting samples
asetpts=expr=N/SR/TB
# generate timestamps from a "live source" and rebase onto the current timebase
asetpts='(RTCTIME - RTCSTART) / (TB * 1000000)"
@end example
@section ashowinfo
@section ashowinfo
Show a line containing various information for each input audio frame.
Show a line containing various information for each input audio frame.
...
...
libavfilter/Makefile
View file @
b4729382
...
@@ -27,6 +27,7 @@ OBJS = allfilters.o \
...
@@ -27,6 +27,7 @@ OBJS = allfilters.o \
OBJS-$(CONFIG_AFORMAT_FILTER)
+=
af_aformat.o
OBJS-$(CONFIG_AFORMAT_FILTER)
+=
af_aformat.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_ASETPTS_FILTER)
+=
setpts.o
OBJS-$(CONFIG_ASHOWINFO_FILTER)
+=
af_ashowinfo.o
OBJS-$(CONFIG_ASHOWINFO_FILTER)
+=
af_ashowinfo.o
OBJS-$(CONFIG_ASPLIT_FILTER)
+=
split.o
OBJS-$(CONFIG_ASPLIT_FILTER)
+=
split.o
OBJS-$(CONFIG_ASYNCTS_FILTER)
+=
af_asyncts.o
OBJS-$(CONFIG_ASYNCTS_FILTER)
+=
af_asyncts.o
...
@@ -70,7 +71,7 @@ OBJS-$(CONFIG_PIXDESCTEST_FILTER) += vf_pixdesctest.o
...
@@ -70,7 +71,7 @@ OBJS-$(CONFIG_PIXDESCTEST_FILTER) += vf_pixdesctest.o
OBJS-$(CONFIG_SCALE_FILTER)
+=
vf_scale.o
OBJS-$(CONFIG_SCALE_FILTER)
+=
vf_scale.o
OBJS-$(CONFIG_SELECT_FILTER)
+=
vf_select.o
OBJS-$(CONFIG_SELECT_FILTER)
+=
vf_select.o
OBJS-$(CONFIG_SETDAR_FILTER)
+=
vf_aspect.o
OBJS-$(CONFIG_SETDAR_FILTER)
+=
vf_aspect.o
OBJS-$(CONFIG_SETPTS_FILTER)
+=
vf_
setpts.o
OBJS-$(CONFIG_SETPTS_FILTER)
+=
setpts.o
OBJS-$(CONFIG_SETSAR_FILTER)
+=
vf_aspect.o
OBJS-$(CONFIG_SETSAR_FILTER)
+=
vf_aspect.o
OBJS-$(CONFIG_SETTB_FILTER)
+=
vf_settb.o
OBJS-$(CONFIG_SETTB_FILTER)
+=
vf_settb.o
OBJS-$(CONFIG_SHOWINFO_FILTER)
+=
vf_showinfo.o
OBJS-$(CONFIG_SHOWINFO_FILTER)
+=
vf_showinfo.o
...
...
libavfilter/allfilters.c
View file @
b4729382
...
@@ -47,6 +47,7 @@ void avfilter_register_all(void)
...
@@ -47,6 +47,7 @@ void avfilter_register_all(void)
REGISTER_FILTER
(
AFORMAT
,
aformat
,
af
);
REGISTER_FILTER
(
AFORMAT
,
aformat
,
af
);
REGISTER_FILTER
(
AMIX
,
amix
,
af
);
REGISTER_FILTER
(
AMIX
,
amix
,
af
);
REGISTER_FILTER
(
ANULL
,
anull
,
af
);
REGISTER_FILTER
(
ANULL
,
anull
,
af
);
REGISTER_FILTER
(
ASETPTS
,
asetpts
,
af
);
REGISTER_FILTER
(
ASHOWINFO
,
ashowinfo
,
af
);
REGISTER_FILTER
(
ASHOWINFO
,
ashowinfo
,
af
);
REGISTER_FILTER
(
ASPLIT
,
asplit
,
af
);
REGISTER_FILTER
(
ASPLIT
,
asplit
,
af
);
REGISTER_FILTER
(
ASYNCTS
,
asyncts
,
af
);
REGISTER_FILTER
(
ASYNCTS
,
asyncts
,
af
);
...
...
libavfilter/
vf_
setpts.c
→
libavfilter/setpts.c
View file @
b4729382
...
@@ -31,23 +31,29 @@
...
@@ -31,23 +31,29 @@
#include "libavutil/mathematics.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "libavutil/time.h"
#include "audio.h"
#include "avfilter.h"
#include "avfilter.h"
#include "internal.h"
#include "internal.h"
#include "video.h"
#include "video.h"
#include "config.h"
static
const
char
*
const
var_names
[]
=
{
static
const
char
*
const
var_names
[]
=
{
"E"
,
///< Euler number
"E"
,
///< Euler number
"INTERLACED"
,
///< tell if the current frame is interlaced
"INTERLACED"
,
///< tell if the current frame is interlaced
"N"
,
///< frame number (starting at zero)
"N"
,
///< frame
/ sample
number (starting at zero)
"PHI"
,
///< golden ratio
"PHI"
,
///< golden ratio
"PI"
,
///< greek pi
"PI"
,
///< greek pi
"PREV_INPTS"
,
///< previous input PTS
"PREV_INPTS"
,
///< previous input PTS
"PREV_OUTPTS"
,
///< previous output PTS
"PREV_OUTPTS"
,
///< previous output PTS
"PTS"
,
///< original pts in the file of the frame
"PTS"
,
///< original pts in the file of the frame
"STARTPTS"
,
///< PTS at start of movie
"STARTPTS"
,
///< PTS at start of movie
"TB"
,
///< timebase
"TB"
,
///< timebase
"RTCTIME"
,
///< wallclock (RTC) time in micro seconds
"RTCTIME"
,
///< wallclock (RTC) time in micro seconds
"RTCSTART"
,
///< wallclock (RTC) time at the start of the movie in micro seconds
"RTCSTART"
,
///< wallclock (RTC) time at the start of the movie in micro seconds
"S"
,
// Number of samples in the current frame
"SR"
,
// Audio sample rate
NULL
NULL
};
};
...
@@ -64,6 +70,8 @@ enum var_name {
...
@@ -64,6 +70,8 @@ enum var_name {
VAR_TB
,
VAR_TB
,
VAR_RTCTIME
,
VAR_RTCTIME
,
VAR_RTCSTART
,
VAR_RTCSTART
,
VAR_S
,
VAR_SR
,
VAR_VARS_NB
VAR_VARS_NB
};
};
...
@@ -87,6 +95,7 @@ static av_cold int init(AVFilterContext *ctx)
...
@@ -87,6 +95,7 @@ static av_cold int init(AVFilterContext *ctx)
setpts
->
var_values
[
VAR_E
]
=
M_E
;
setpts
->
var_values
[
VAR_E
]
=
M_E
;
setpts
->
var_values
[
VAR_N
]
=
0
.
0
;
setpts
->
var_values
[
VAR_N
]
=
0
.
0
;
setpts
->
var_values
[
VAR_S
]
=
0
.
0
;
setpts
->
var_values
[
VAR_PHI
]
=
M_PHI
;
setpts
->
var_values
[
VAR_PHI
]
=
M_PHI
;
setpts
->
var_values
[
VAR_PI
]
=
M_PI
;
setpts
->
var_values
[
VAR_PI
]
=
M_PI
;
setpts
->
var_values
[
VAR_PREV_INPTS
]
=
NAN
;
setpts
->
var_values
[
VAR_PREV_INPTS
]
=
NAN
;
...
@@ -102,6 +111,10 @@ static int config_input(AVFilterLink *inlink)
...
@@ -102,6 +111,10 @@ static int config_input(AVFilterLink *inlink)
setpts
->
var_values
[
VAR_TB
]
=
av_q2d
(
inlink
->
time_base
);
setpts
->
var_values
[
VAR_TB
]
=
av_q2d
(
inlink
->
time_base
);
setpts
->
var_values
[
VAR_RTCSTART
]
=
av_gettime
();
setpts
->
var_values
[
VAR_RTCSTART
]
=
av_gettime
();
if
(
inlink
->
type
==
AVMEDIA_TYPE_AUDIO
)
{
setpts
->
var_values
[
VAR_SR
]
=
inlink
->
sample_rate
;
}
av_log
(
inlink
->
src
,
AV_LOG_VERBOSE
,
"TB:%f
\n
"
,
setpts
->
var_values
[
VAR_TB
]);
av_log
(
inlink
->
src
,
AV_LOG_VERBOSE
,
"TB:%f
\n
"
,
setpts
->
var_values
[
VAR_TB
]);
return
0
;
return
0
;
}
}
...
@@ -118,10 +131,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
...
@@ -118,10 +131,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
if
(
isnan
(
setpts
->
var_values
[
VAR_STARTPTS
]))
if
(
isnan
(
setpts
->
var_values
[
VAR_STARTPTS
]))
setpts
->
var_values
[
VAR_STARTPTS
]
=
TS2D
(
frame
->
pts
);
setpts
->
var_values
[
VAR_STARTPTS
]
=
TS2D
(
frame
->
pts
);
setpts
->
var_values
[
VAR_INTERLACED
]
=
frame
->
interlaced_frame
;
setpts
->
var_values
[
VAR_PTS
]
=
TS2D
(
frame
->
pts
);
setpts
->
var_values
[
VAR_PTS
]
=
TS2D
(
frame
->
pts
);
setpts
->
var_values
[
VAR_RTCTIME
]
=
av_gettime
();
setpts
->
var_values
[
VAR_RTCTIME
]
=
av_gettime
();
if
(
inlink
->
type
==
AVMEDIA_TYPE_VIDEO
)
{
setpts
->
var_values
[
VAR_INTERLACED
]
=
frame
->
interlaced_frame
;
}
else
{
setpts
->
var_values
[
VAR_S
]
=
frame
->
nb_samples
;
}
d
=
av_expr_eval
(
setpts
->
expr
,
setpts
->
var_values
,
NULL
);
d
=
av_expr_eval
(
setpts
->
expr
,
setpts
->
var_values
,
NULL
);
frame
->
pts
=
D2TS
(
d
);
frame
->
pts
=
D2TS
(
d
);
...
@@ -135,7 +153,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
...
@@ -135,7 +153,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
#endif
#endif
setpts
->
var_values
[
VAR_N
]
+=
1
.
0
;
if
(
inlink
->
type
==
AVMEDIA_TYPE_VIDEO
)
{
setpts
->
var_values
[
VAR_N
]
+=
1
.
0
;
}
else
{
setpts
->
var_values
[
VAR_N
]
+=
frame
->
nb_samples
;
}
setpts
->
var_values
[
VAR_PREV_INPTS
]
=
TS2D
(
in_pts
);
setpts
->
var_values
[
VAR_PREV_INPTS
]
=
TS2D
(
in_pts
);
setpts
->
var_values
[
VAR_PREV_OUTPTS
]
=
TS2D
(
frame
->
pts
);
setpts
->
var_values
[
VAR_PREV_OUTPTS
]
=
TS2D
(
frame
->
pts
);
return
ff_filter_frame
(
inlink
->
dst
->
outputs
[
0
],
frame
);
return
ff_filter_frame
(
inlink
->
dst
->
outputs
[
0
],
frame
);
...
@@ -149,12 +172,13 @@ static av_cold void uninit(AVFilterContext *ctx)
...
@@ -149,12 +172,13 @@ static av_cold void uninit(AVFilterContext *ctx)
}
}
#define OFFSET(x) offsetof(SetPTSContext, x)
#define OFFSET(x) offsetof(SetPTSContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM
| AV_OPT_FLAG_AUDIO_PARAM
static
const
AVOption
options
[]
=
{
static
const
AVOption
options
[]
=
{
{
"expr"
,
"Expression determining the frame timestamp"
,
OFFSET
(
expr_str
),
AV_OPT_TYPE_STRING
,
{
.
str
=
"PTS"
},
.
flags
=
FLAGS
},
{
"expr"
,
"Expression determining the frame timestamp"
,
OFFSET
(
expr_str
),
AV_OPT_TYPE_STRING
,
{
.
str
=
"PTS"
},
.
flags
=
FLAGS
},
{
NULL
},
{
NULL
},
};
};
#if CONFIG_SETPTS_FILTER
static
const
AVClass
setpts_class
=
{
static
const
AVClass
setpts_class
=
{
.
class_name
=
"setpts"
,
.
class_name
=
"setpts"
,
.
item_name
=
av_default_item_name
,
.
item_name
=
av_default_item_name
,
...
@@ -193,3 +217,45 @@ AVFilter avfilter_vf_setpts = {
...
@@ -193,3 +217,45 @@ AVFilter avfilter_vf_setpts = {
.
inputs
=
avfilter_vf_setpts_inputs
,
.
inputs
=
avfilter_vf_setpts_inputs
,
.
outputs
=
avfilter_vf_setpts_outputs
,
.
outputs
=
avfilter_vf_setpts_outputs
,
};
};
#endif
#if CONFIG_ASETPTS_FILTER
static
const
AVClass
asetpts_class
=
{
.
class_name
=
"asetpts"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
const
AVFilterPad
asetpts_inputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
get_audio_buffer
=
ff_null_get_audio_buffer
,
.
config_props
=
config_input
,
.
filter_frame
=
filter_frame
,
},
{
NULL
}
};
static
const
AVFilterPad
asetpts_outputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
},
{
NULL
}
};
AVFilter
avfilter_af_asetpts
=
{
.
name
=
"asetpts"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Set PTS for the output audio frame."
),
.
init
=
init
,
.
uninit
=
uninit
,
.
priv_size
=
sizeof
(
SetPTSContext
),
.
priv_class
=
&
asetpts_class
,
.
inputs
=
asetpts_inputs
,
.
outputs
=
asetpts_outputs
,
};
#endif
libavfilter/version.h
View file @
b4729382
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
#include "libavutil/avutil.h"
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR
8
#define LIBAVFILTER_VERSION_MINOR
9
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
...
...
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