History

lavfi: merge start_frame/draw_slice/end_frame

Any alleged performance benefits gained from the split are purely mythological and do not justify added code complexity.

Anton Khirnov committed 13 years ago

Commit 565e4991 parent bb6c67b55 files · +632 −1458Browse files

Showing the changes to libavfilter/split.c (1 of 55 files). Show all

Unified · Split

libavfilter/split.c+9−55
@@ -67,46 +67,23 @@ static void split_uninit(AVFilterContext *ctx) · 66 unmodified lines
6767 av_freep(&ctx->output_pads[i].name);
6868 }
6969
70−static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
70+static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *frame)
7171 {
7272 AVFilterContext *ctx = inlink->dst;
7373 int i, ret = 0;
7474
7575 for (i = 0; i < ctx->nb_outputs; i++) {
76− AVFilterBufferRef *buf_out = avfilter_ref_buffer(picref, ~AV_PERM_WRITE);
77− if (!buf_out)
78− return AVERROR(ENOMEM);
79−
80− ret = ff_start_frame(ctx->outputs[i], buf_out);
81− if (ret < 0)
82− break;
83− }
84− return ret;
85−}
86−
87−static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
88−{
89− AVFilterContext *ctx = inlink->dst;
90− int i, ret = 0;
91−
92− for (i = 0; i < ctx->nb_outputs; i++) {
93− ret = ff_draw_slice(ctx->outputs[i], y, h, slice_dir);
94− if (ret < 0)
76+ AVFilterBufferRef *buf_out = avfilter_ref_buffer(frame, ~AV_PERM_WRITE);
77+ if (!buf_out) {
78+ ret = AVERROR(ENOMEM);
9579 break;
96− }
97− return ret;
98−}
99−
100−static int end_frame(AVFilterLink *inlink)
101−{
102− AVFilterContext *ctx = inlink->dst;
103− int i, ret = 0;
80+ }
10481
105− for (i = 0; i < ctx->nb_outputs; i++) {
106− ret = ff_end_frame(ctx->outputs[i]);
82+ ret = ff_filter_frame(ctx->outputs[i], buf_out);
10783 if (ret < 0)
10884 break;
10985 }
86+ avfilter_unref_bufferp(&frame);
11087 return ret;
11188 }
11289
@@ -115,9 +92,7 @@ static const AVFilterPad avfilter_vf_split_inputs[] = { · 2 unmodified lines
11592 .name = "default",
11693 .type = AVMEDIA_TYPE_VIDEO,
11794 .get_video_buffer = ff_null_get_video_buffer,
118− .start_frame = start_frame,
119− .draw_slice = draw_slice,
120− .end_frame = end_frame,
95+ .filter_frame = filter_frame,
12196 },
12297 { NULL }
12398 };
@@ -133,33 +108,12 @@ AVFilter avfilter_vf_split = { · 9 unmodified lines
133108 .outputs = NULL,
134109 };
135110
136−static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
137−{
138− AVFilterContext *ctx = inlink->dst;
139− int i, ret = 0;
140−
141− for (i = 0; i < ctx->nb_outputs; i++) {
142− AVFilterBufferRef *buf_out = avfilter_ref_buffer(samplesref,
143− ~AV_PERM_WRITE);
144− if (!buf_out) {
145− ret = AVERROR(ENOMEM);
146− break;
147− }
148−
149− ret = ff_filter_samples(inlink->dst->outputs[i], buf_out);
150− if (ret < 0)
151− break;
152− }
153− avfilter_unref_buffer(samplesref);
154− return ret;
155−}
156−
157111 static const AVFilterPad avfilter_af_asplit_inputs[] = {
158112 {
159113 .name = "default",
160114 .type = AVMEDIA_TYPE_AUDIO,
161115 .get_audio_buffer = ff_null_get_audio_buffer,
162− .filter_samples = filter_samples
116+ .filter_frame = filter_frame,
163117 },
164118 { NULL }
165119 };

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t