Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
b4729382
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b4729382
编写于
4月 10, 2013
作者:
A
Anton Khirnov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lavfi: add an asetpts filter
上级
2548834b
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
145 addition
and
7 deletion
+145
-7
Changelog
Changelog
+1
-0
doc/filters.texi
doc/filters.texi
+69
-0
libavfilter/Makefile
libavfilter/Makefile
+2
-1
libavfilter/allfilters.c
libavfilter/allfilters.c
+1
-0
libavfilter/setpts.c
libavfilter/setpts.c
+71
-5
libavfilter/version.h
libavfilter/version.h
+1
-1
未找到文件。
Changelog
浏览文件 @
b4729382
...
...
@@ -12,6 +12,7 @@ version 10:
- uniform options syntax across all filters
- new interlace filter
- JPEG 2000 decoder
- new asetpts filter (same as setpts, but for audio)
version 9:
...
...
doc/filters.texi
浏览文件 @
b4729382
...
...
@@ -192,6 +192,75 @@ stream ends. The default value is 2 seconds.
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
Show a line containing various information for each input audio frame.
...
...
libavfilter/Makefile
浏览文件 @
b4729382
...
...
@@ -27,6 +27,7 @@ OBJS = allfilters.o \
OBJS-$(CONFIG_AFORMAT_FILTER)
+=
af_aformat.o
OBJS-$(CONFIG_AMIX_FILTER)
+=
af_amix.o
OBJS-$(CONFIG_ANULL_FILTER)
+=
af_anull.o
OBJS-$(CONFIG_ASETPTS_FILTER)
+=
setpts.o
OBJS-$(CONFIG_ASHOWINFO_FILTER)
+=
af_ashowinfo.o
OBJS-$(CONFIG_ASPLIT_FILTER)
+=
split.o
OBJS-$(CONFIG_ASYNCTS_FILTER)
+=
af_asyncts.o
...
...
@@ -70,7 +71,7 @@ OBJS-$(CONFIG_PIXDESCTEST_FILTER) += vf_pixdesctest.o
OBJS-$(CONFIG_SCALE_FILTER)
+=
vf_scale.o
OBJS-$(CONFIG_SELECT_FILTER)
+=
vf_select.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_SETTB_FILTER)
+=
vf_settb.o
OBJS-$(CONFIG_SHOWINFO_FILTER)
+=
vf_showinfo.o
...
...
libavfilter/allfilters.c
浏览文件 @
b4729382
...
...
@@ -47,6 +47,7 @@ void avfilter_register_all(void)
REGISTER_FILTER
(
AFORMAT
,
aformat
,
af
);
REGISTER_FILTER
(
AMIX
,
amix
,
af
);
REGISTER_FILTER
(
ANULL
,
anull
,
af
);
REGISTER_FILTER
(
ASETPTS
,
asetpts
,
af
);
REGISTER_FILTER
(
ASHOWINFO
,
ashowinfo
,
af
);
REGISTER_FILTER
(
ASPLIT
,
asplit
,
af
);
REGISTER_FILTER
(
ASYNCTS
,
asyncts
,
af
);
...
...
libavfilter/
vf_
setpts.c
→
libavfilter/setpts.c
浏览文件 @
b4729382
...
...
@@ -31,23 +31,29 @@
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "audio.h"
#include "avfilter.h"
#include "internal.h"
#include "video.h"
#include "config.h"
static
const
char
*
const
var_names
[]
=
{
"E"
,
///< Euler number
"INTERLACED"
,
///< tell if the current frame is interlaced
"N"
,
///< frame number (starting at zero)
"N"
,
///< frame
/ sample
number (starting at zero)
"PHI"
,
///< golden ratio
"PI"
,
///< greek pi
"PREV_INPTS"
,
///< previous input PTS
"PREV_OUTPTS"
,
///< previous output PTS
"PTS"
,
///< original pts in the file of the frame
"STARTPTS"
,
///< PTS at start of movie
"STARTPTS"
,
///< PTS at start of movie
"TB"
,
///< timebase
"RTCTIME"
,
///< wallclock (RTC) time 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
};
...
...
@@ -64,6 +70,8 @@ enum var_name {
VAR_TB
,
VAR_RTCTIME
,
VAR_RTCSTART
,
VAR_S
,
VAR_SR
,
VAR_VARS_NB
};
...
...
@@ -87,6 +95,7 @@ static av_cold int init(AVFilterContext *ctx)
setpts
->
var_values
[
VAR_E
]
=
M_E
;
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_PI
]
=
M_PI
;
setpts
->
var_values
[
VAR_PREV_INPTS
]
=
NAN
;
...
...
@@ -102,6 +111,10 @@ static int config_input(AVFilterLink *inlink)
setpts
->
var_values
[
VAR_TB
]
=
av_q2d
(
inlink
->
time_base
);
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
]);
return
0
;
}
...
...
@@ -118,10 +131,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
if
(
isnan
(
setpts
->
var_values
[
VAR_STARTPTS
]))
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_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
);
frame
->
pts
=
D2TS
(
d
);
...
...
@@ -135,7 +153,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
#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_OUTPTS
]
=
TS2D
(
frame
->
pts
);
return
ff_filter_frame
(
inlink
->
dst
->
outputs
[
0
],
frame
);
...
...
@@ -149,12 +172,13 @@ static av_cold void uninit(AVFilterContext *ctx)
}
#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
[]
=
{
{
"expr"
,
"Expression determining the frame timestamp"
,
OFFSET
(
expr_str
),
AV_OPT_TYPE_STRING
,
{
.
str
=
"PTS"
},
.
flags
=
FLAGS
},
{
NULL
},
};
#if CONFIG_SETPTS_FILTER
static
const
AVClass
setpts_class
=
{
.
class_name
=
"setpts"
,
.
item_name
=
av_default_item_name
,
...
...
@@ -193,3 +217,45 @@ AVFilter avfilter_vf_setpts = {
.
inputs
=
avfilter_vf_setpts_inputs
,
.
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
浏览文件 @
b4729382
...
...
@@ -29,7 +29,7 @@
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR
8
#define LIBAVFILTER_VERSION_MINOR
9
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录