mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2026-06-16 04:32:47 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: FATE: fix the asyncts test build: Drop gcc-specific warning flag from header compilation rule FATE: add a test for the asyncts audio filter. matroskadec: return more correct error code on read error. buffersrc: check ff_get_audio_buffer() for errors. lavfi: check all ff_get_video_buffer() calls for errors. lavfi: check all avfilter_ref_buffer() calls for errors. vf_select: avoid an unnecessary avfilter_ref_buffer(). buffersrc: avoid creating unnecessary buffer reference lavfi: use avfilter_unref_bufferp() where appropriate. vf_fps: add more error checks. vf_fps: fix a memleak on malloc failure. lavfi: check all ff_start_frame/draw_slice/end_frame calls for errors lavfi: add error handling to end_frame(). lavfi: add error handling to draw_slice(). lavfi: add error handling to start_frame(). Conflicts: Makefile ffplay.c libavfilter/buffersrc.c libavfilter/vf_boxblur.c libavfilter/vf_drawtext.c libavfilter/vf_fade.c libavfilter/vf_frei0r.c libavfilter/vf_hflip.c libavfilter/vf_overlay.c libavfilter/vf_pad.c libavfilter/vf_scale.c libavfilter/video.c libavfilter/vsrc_color.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
+36
-15
@@ -63,32 +63,47 @@ static void split_uninit(AVFilterContext *ctx)
|
||||
av_freep(&ctx->output_pads[i].name);
|
||||
}
|
||||
|
||||
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
{
|
||||
AVFilterContext *ctx = inlink->dst;
|
||||
int i;
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0; i < ctx->nb_outputs; i++)
|
||||
ff_start_frame(ctx->outputs[i],
|
||||
avfilter_ref_buffer(picref, ~AV_PERM_WRITE));
|
||||
for (i = 0; i < ctx->nb_outputs; i++) {
|
||||
AVFilterBufferRef *buf_out = avfilter_ref_buffer(picref, ~AV_PERM_WRITE);
|
||||
if (!buf_out)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
ret = ff_start_frame(ctx->outputs[i], buf_out);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
{
|
||||
AVFilterContext *ctx = inlink->dst;
|
||||
int i;
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0; i < ctx->nb_outputs; i++)
|
||||
ff_draw_slice(ctx->outputs[i], y, h, slice_dir);
|
||||
for (i = 0; i < ctx->nb_outputs; i++) {
|
||||
ret = ff_draw_slice(ctx->outputs[i], y, h, slice_dir);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
static int end_frame(AVFilterLink *inlink)
|
||||
{
|
||||
AVFilterContext *ctx = inlink->dst;
|
||||
int i;
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0; i < ctx->nb_outputs; i++)
|
||||
ff_end_frame(ctx->outputs[i]);
|
||||
for (i = 0; i < ctx->nb_outputs; i++) {
|
||||
ret = ff_end_frame(ctx->outputs[i]);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_split = {
|
||||
@@ -114,8 +129,14 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0; i < ctx->nb_outputs; i++) {
|
||||
ret = ff_filter_samples(inlink->dst->outputs[i],
|
||||
avfilter_ref_buffer(samplesref, ~AV_PERM_WRITE));
|
||||
AVFilterBufferRef *buf_out = avfilter_ref_buffer(samplesref,
|
||||
~AV_PERM_WRITE);
|
||||
if (!buf_out) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
break;
|
||||
}
|
||||
|
||||
ret = ff_filter_samples(inlink->dst->outputs[i], buf_out);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user