Browse code

vf_settb: rename to settb

An audio version of settb (asettb) will be added to this file.

Signed-off-by: Diego Biurrun <diego@biurrun.de>

Katerina Barone-Adesi authored on 2014/04/01 23:51:40
Showing 3 changed files
... ...
@@ -76,7 +76,7 @@ OBJS-$(CONFIG_SELECT_FILTER)                 += vf_select.o
76 76
 OBJS-$(CONFIG_SETDAR_FILTER)                 += vf_aspect.o
77 77
 OBJS-$(CONFIG_SETPTS_FILTER)                 += setpts.o
78 78
 OBJS-$(CONFIG_SETSAR_FILTER)                 += vf_aspect.o
79
-OBJS-$(CONFIG_SETTB_FILTER)                  += vf_settb.o
79
+OBJS-$(CONFIG_SETTB_FILTER)                  += settb.o
80 80
 OBJS-$(CONFIG_SHOWINFO_FILTER)               += vf_showinfo.o
81 81
 OBJS-$(CONFIG_SHUFFLEPLANES_FILTER)          += vf_shuffleplanes.o
82 82
 OBJS-$(CONFIG_SPLIT_FILTER)                  += split.o
83 83
new file mode 100644
... ...
@@ -0,0 +1,161 @@
0
+/*
1
+ * Copyright (c) 2010 Stefano Sabatini
2
+ *
3
+ * This file is part of Libav.
4
+ *
5
+ * Libav is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * Libav is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with Libav; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+/**
21
+ * @file
22
+ * Set timebase for the output link.
23
+ */
24
+
25
+#include <inttypes.h>
26
+#include <stdio.h>
27
+
28
+#include "libavutil/avstring.h"
29
+#include "libavutil/eval.h"
30
+#include "libavutil/internal.h"
31
+#include "libavutil/mathematics.h"
32
+#include "libavutil/opt.h"
33
+#include "libavutil/rational.h"
34
+#include "avfilter.h"
35
+#include "internal.h"
36
+#include "video.h"
37
+
38
+static const char *const var_names[] = {
39
+    "E",
40
+    "PHI",
41
+    "PI",
42
+    "AVTB",   /* default timebase 1/AV_TIME_BASE */
43
+    "intb",   /* input timebase */
44
+    NULL
45
+};
46
+
47
+enum var_name {
48
+    VAR_E,
49
+    VAR_PHI,
50
+    VAR_PI,
51
+    VAR_AVTB,
52
+    VAR_INTB,
53
+    VAR_VARS_NB
54
+};
55
+
56
+typedef struct {
57
+    const AVClass *class;
58
+    char *tb_expr;
59
+    double var_values[VAR_VARS_NB];
60
+} SetTBContext;
61
+
62
+static int config_output_props(AVFilterLink *outlink)
63
+{
64
+    AVFilterContext *ctx = outlink->src;
65
+    SetTBContext *settb = ctx->priv;
66
+    AVFilterLink *inlink = ctx->inputs[0];
67
+    AVRational time_base;
68
+    int ret;
69
+    double res;
70
+
71
+    settb->var_values[VAR_E]    = M_E;
72
+    settb->var_values[VAR_PHI]  = M_PHI;
73
+    settb->var_values[VAR_PI]   = M_PI;
74
+    settb->var_values[VAR_AVTB] = av_q2d(AV_TIME_BASE_Q);
75
+    settb->var_values[VAR_INTB] = av_q2d(inlink->time_base);
76
+
77
+    outlink->w = inlink->w;
78
+    outlink->h = inlink->h;
79
+
80
+    if ((ret = av_expr_parse_and_eval(&res, settb->tb_expr, var_names, settb->var_values,
81
+                                      NULL, NULL, NULL, NULL, NULL, 0, NULL)) < 0) {
82
+        av_log(ctx, AV_LOG_ERROR, "Invalid expression '%s' for timebase.\n", settb->tb_expr);
83
+        return ret;
84
+    }
85
+    time_base = av_d2q(res, INT_MAX);
86
+    if (time_base.num <= 0 || time_base.den <= 0) {
87
+        av_log(ctx, AV_LOG_ERROR,
88
+               "Invalid non-positive values for the timebase num:%d or den:%d.\n",
89
+               time_base.num, time_base.den);
90
+        return AVERROR(EINVAL);
91
+    }
92
+
93
+    outlink->time_base = time_base;
94
+    av_log(outlink->src, AV_LOG_VERBOSE, "tb:%d/%d -> tb:%d/%d\n",
95
+           inlink ->time_base.num, inlink ->time_base.den,
96
+           outlink->time_base.num, outlink->time_base.den);
97
+
98
+    return 0;
99
+}
100
+
101
+static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
102
+{
103
+    AVFilterContext *ctx = inlink->dst;
104
+    AVFilterLink *outlink = ctx->outputs[0];
105
+
106
+    if (av_cmp_q(inlink->time_base, outlink->time_base)) {
107
+        int64_t orig_pts = frame->pts;
108
+        frame->pts = av_rescale_q(frame->pts, inlink->time_base, outlink->time_base);
109
+        av_log(ctx, AV_LOG_DEBUG, "tb:%d/%d pts:%"PRId64" -> tb:%d/%d pts:%"PRId64"\n",
110
+               inlink ->time_base.num, inlink ->time_base.den, orig_pts,
111
+               outlink->time_base.num, outlink->time_base.den, frame->pts);
112
+    }
113
+
114
+    return ff_filter_frame(outlink, frame);
115
+}
116
+
117
+#define OFFSET(x) offsetof(SetTBContext, x)
118
+#define FLAGS AV_OPT_FLAG_VIDEO_PARAM
119
+static const AVOption options[] = {
120
+    { "expr", "Expression determining the output timebase", OFFSET(tb_expr), AV_OPT_TYPE_STRING, { .str = "intb" }, .flags = FLAGS },
121
+    { NULL },
122
+};
123
+
124
+static const AVClass settb_class = {
125
+    .class_name = "settb",
126
+    .item_name  = av_default_item_name,
127
+    .option     = options,
128
+    .version    = LIBAVUTIL_VERSION_INT,
129
+};
130
+
131
+static const AVFilterPad avfilter_vf_settb_inputs[] = {
132
+    {
133
+        .name             = "default",
134
+        .type             = AVMEDIA_TYPE_VIDEO,
135
+        .get_video_buffer = ff_null_get_video_buffer,
136
+        .filter_frame     = filter_frame,
137
+    },
138
+    { NULL }
139
+};
140
+
141
+static const AVFilterPad avfilter_vf_settb_outputs[] = {
142
+    {
143
+        .name         = "default",
144
+        .type         = AVMEDIA_TYPE_VIDEO,
145
+        .config_props = config_output_props,
146
+    },
147
+    { NULL }
148
+};
149
+
150
+AVFilter ff_vf_settb = {
151
+    .name      = "settb",
152
+    .description = NULL_IF_CONFIG_SMALL("Set timebase for the output link."),
153
+
154
+    .priv_size = sizeof(SetTBContext),
155
+    .priv_class = &settb_class,
156
+
157
+    .inputs    = avfilter_vf_settb_inputs,
158
+
159
+    .outputs   = avfilter_vf_settb_outputs,
160
+};
0 161
deleted file mode 100644
... ...
@@ -1,161 +0,0 @@
1
-/*
2
- * Copyright (c) 2010 Stefano Sabatini
3
- *
4
- * This file is part of Libav.
5
- *
6
- * Libav 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
- * Libav 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 Libav; 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
-
29
-#include "libavutil/avstring.h"
30
-#include "libavutil/eval.h"
31
-#include "libavutil/internal.h"
32
-#include "libavutil/mathematics.h"
33
-#include "libavutil/opt.h"
34
-#include "libavutil/rational.h"
35
-#include "avfilter.h"
36
-#include "internal.h"
37
-#include "video.h"
38
-
39
-static const char *const var_names[] = {
40
-    "E",
41
-    "PHI",
42
-    "PI",
43
-    "AVTB",   /* default timebase 1/AV_TIME_BASE */
44
-    "intb",   /* input timebase */
45
-    NULL
46
-};
47
-
48
-enum var_name {
49
-    VAR_E,
50
-    VAR_PHI,
51
-    VAR_PI,
52
-    VAR_AVTB,
53
-    VAR_INTB,
54
-    VAR_VARS_NB
55
-};
56
-
57
-typedef struct {
58
-    const AVClass *class;
59
-    char *tb_expr;
60
-    double var_values[VAR_VARS_NB];
61
-} SetTBContext;
62
-
63
-static int config_output_props(AVFilterLink *outlink)
64
-{
65
-    AVFilterContext *ctx = outlink->src;
66
-    SetTBContext *settb = ctx->priv;
67
-    AVFilterLink *inlink = ctx->inputs[0];
68
-    AVRational time_base;
69
-    int ret;
70
-    double res;
71
-
72
-    settb->var_values[VAR_E]    = M_E;
73
-    settb->var_values[VAR_PHI]  = M_PHI;
74
-    settb->var_values[VAR_PI]   = M_PI;
75
-    settb->var_values[VAR_AVTB] = av_q2d(AV_TIME_BASE_Q);
76
-    settb->var_values[VAR_INTB] = av_q2d(inlink->time_base);
77
-
78
-    outlink->w = inlink->w;
79
-    outlink->h = inlink->h;
80
-
81
-    if ((ret = av_expr_parse_and_eval(&res, settb->tb_expr, var_names, settb->var_values,
82
-                                      NULL, NULL, NULL, NULL, NULL, 0, NULL)) < 0) {
83
-        av_log(ctx, AV_LOG_ERROR, "Invalid expression '%s' for timebase.\n", settb->tb_expr);
84
-        return ret;
85
-    }
86
-    time_base = av_d2q(res, INT_MAX);
87
-    if (time_base.num <= 0 || time_base.den <= 0) {
88
-        av_log(ctx, AV_LOG_ERROR,
89
-               "Invalid non-positive values for the timebase num:%d or den:%d.\n",
90
-               time_base.num, time_base.den);
91
-        return AVERROR(EINVAL);
92
-    }
93
-
94
-    outlink->time_base = time_base;
95
-    av_log(outlink->src, AV_LOG_VERBOSE, "tb:%d/%d -> tb:%d/%d\n",
96
-           inlink ->time_base.num, inlink ->time_base.den,
97
-           outlink->time_base.num, outlink->time_base.den);
98
-
99
-    return 0;
100
-}
101
-
102
-static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
103
-{
104
-    AVFilterContext *ctx = inlink->dst;
105
-    AVFilterLink *outlink = ctx->outputs[0];
106
-
107
-    if (av_cmp_q(inlink->time_base, outlink->time_base)) {
108
-        int64_t orig_pts = frame->pts;
109
-        frame->pts = av_rescale_q(frame->pts, inlink->time_base, outlink->time_base);
110
-        av_log(ctx, AV_LOG_DEBUG, "tb:%d/%d pts:%"PRId64" -> tb:%d/%d pts:%"PRId64"\n",
111
-               inlink ->time_base.num, inlink ->time_base.den, orig_pts,
112
-               outlink->time_base.num, outlink->time_base.den, frame->pts);
113
-    }
114
-
115
-    return ff_filter_frame(outlink, frame);
116
-}
117
-
118
-#define OFFSET(x) offsetof(SetTBContext, x)
119
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM
120
-static const AVOption options[] = {
121
-    { "expr", "Expression determining the output timebase", OFFSET(tb_expr), AV_OPT_TYPE_STRING, { .str = "intb" }, .flags = FLAGS },
122
-    { NULL },
123
-};
124
-
125
-static const AVClass settb_class = {
126
-    .class_name = "settb",
127
-    .item_name  = av_default_item_name,
128
-    .option     = options,
129
-    .version    = LIBAVUTIL_VERSION_INT,
130
-};
131
-
132
-static const AVFilterPad avfilter_vf_settb_inputs[] = {
133
-    {
134
-        .name             = "default",
135
-        .type             = AVMEDIA_TYPE_VIDEO,
136
-        .get_video_buffer = ff_null_get_video_buffer,
137
-        .filter_frame     = filter_frame,
138
-    },
139
-    { NULL }
140
-};
141
-
142
-static const AVFilterPad avfilter_vf_settb_outputs[] = {
143
-    {
144
-        .name         = "default",
145
-        .type         = AVMEDIA_TYPE_VIDEO,
146
-        .config_props = config_output_props,
147
-    },
148
-    { NULL }
149
-};
150
-
151
-AVFilter ff_vf_settb = {
152
-    .name      = "settb",
153
-    .description = NULL_IF_CONFIG_SMALL("Set timebase for the output link."),
154
-
155
-    .priv_size = sizeof(SetTBContext),
156
-    .priv_class = &settb_class,
157
-
158
-    .inputs    = avfilter_vf_settb_inputs,
159
-
160
-    .outputs   = avfilter_vf_settb_outputs,
161
-};