History

lavfi/split: handle closed outputs.

Return AVERROR_EOF if all outputs are closed.

Nicolas George committed 14 years ago

Commit a9cfe651 parent 8b61aba1 file · +12 −4Browse files

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

Unified · Split

libavfilter/split.c+12−4
@@ -71,10 +71,14 @@ static void split_uninit(AVFilterContext *ctx) · 70 unmodified lines
71static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)71static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
72{72{
73 AVFilterContext *ctx = inlink->dst;73 AVFilterContext *ctx = inlink->dst;
74 int i, ret = 0;74 int i, ret = AVERROR_EOF;
75 75
76 for (i = 0; i < ctx->nb_outputs; i++) {76 for (i = 0; i < ctx->nb_outputs; i++) {
77 AVFilterBufferRef *buf_out = avfilter_ref_buffer(picref, ~AV_PERM_WRITE);77 AVFilterBufferRef *buf_out;
78
79 if (ctx->outputs[i]->closed)
80 continue;
81 buf_out = avfilter_ref_buffer(picref, ~AV_PERM_WRITE);
78 if (!buf_out)82 if (!buf_out)
79 return AVERROR(ENOMEM);83 return AVERROR(ENOMEM);
80 84
@@ -88,9 +92,11 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) · 7 unmodified lines
88static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)92static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
89{93{
90 AVFilterContext *ctx = inlink->dst;94 AVFilterContext *ctx = inlink->dst;
91 int i, ret = 0;95 int i, ret = AVERROR_EOF;
92 96
93 for (i = 0; i < ctx->nb_outputs; i++) {97 for (i = 0; i < ctx->nb_outputs; i++) {
98 if (ctx->outputs[i]->closed)
99 continue;
94 ret = ff_draw_slice(ctx->outputs[i], y, h, slice_dir);100 ret = ff_draw_slice(ctx->outputs[i], y, h, slice_dir);
95 if (ret < 0)101 if (ret < 0)
96 break;102 break;
@@ -101,9 +107,11 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) · 4 unmodified lines
101static int end_frame(AVFilterLink *inlink)107static int end_frame(AVFilterLink *inlink)
102{108{
103 AVFilterContext *ctx = inlink->dst;109 AVFilterContext *ctx = inlink->dst;
104 int i, ret = 0;110 int i, ret = AVERROR_EOF;
105 111
106 for (i = 0; i < ctx->nb_outputs; i++) {112 for (i = 0; i < ctx->nb_outputs; i++) {
113 if (ctx->outputs[i]->closed)
114 continue;
107 ret = ff_end_frame(ctx->outputs[i]);115 ret = ff_end_frame(ctx->outputs[i]);
108 if (ret < 0)116 if (ret < 0)
109 break;117 break;

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