1 /*
2 * Copyright (c) 2010 Stefano Sabatini
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 /**
22 * @file
23 * Set timebase for the output link.
24 */
25
26 #include <inttypes.h>
27 #include <stdio.h>
28
40
42 "AVTB", /* default timebase 1/AV_TIME_BASE */
43 "intb", /* input timebase */
44 "sr", /* sample rate */
46 };
47
53 };
54
60
61 #define OFFSET(x) offsetof(SetTBContext, x)
62 #define DEFINE_OPTIONS(filt_name, filt_type) \
63 static const AVOption filt_name##_options[] = { \
64 { "expr", "set expression determining the output timebase", OFFSET(tb_expr), AV_OPT_TYPE_STRING, {.str="intb"}, \
65 .flags=AV_OPT_FLAG_##filt_type##_PARAM|AV_OPT_FLAG_FILTERING_PARAM }, \
66 { "tb", "set expression determining the output timebase", OFFSET(tb_expr), AV_OPT_TYPE_STRING, {.str="intb"}, \
67 .flags=AV_OPT_FLAG_##filt_type##_PARAM|AV_OPT_FLAG_FILTERING_PARAM }, \
68 { NULL } \
69 }
70
72 {
78 double res;
79
83
86
91 }
92 time_base =
av_d2q(res, INT_MAX);
93 if (time_base.
num <= 0 || time_base.
den <= 0) {
95 "Invalid non-positive values for the timebase num:%d or den:%d.\n",
96 time_base.
num, time_base.
den);
98 }
99
104
105 return 0;
106 }
107
109 {
111 int64_t new_pts = orig_pts;
112
116 inlink ->time_base.num,
inlink ->time_base.den, orig_pts,
118 }
119
120 return new_pts;
121 }
122
124 {
127
129
131 }
132
134 {
141
143
149
152 return 0;
153 }
154
156
158 }
159
160 #if CONFIG_SETTB_FILTER
161
164
165 static const AVFilterPad avfilter_vf_settb_inputs[] = {
166 {
169 },
170 };
171
172 static const AVFilterPad avfilter_vf_settb_outputs[] = {
173 {
177 },
178 };
179
184 .priv_class = &settb_class,
189 };
190 #endif /* CONFIG_SETTB_FILTER */
191
192 #if CONFIG_ASETTB_FILTER
193
196
197 static const AVFilterPad avfilter_af_asettb_inputs[] = {
198 {
201 },
202 };
203
204 static const AVFilterPad avfilter_af_asettb_outputs[] = {
205 {
209 },
210 };
211
218 .priv_class = &asettb_class,
221 };
222 #endif /* CONFIG_ASETTB_FILTER */