summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/ffmpeg/libavfilter/avfilter.c
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/ffmpeg/libavfilter/avfilter.c')
-rw-r--r--chromium/third_party/ffmpeg/libavfilter/avfilter.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/chromium/third_party/ffmpeg/libavfilter/avfilter.c b/chromium/third_party/ffmpeg/libavfilter/avfilter.c
index 2567ce92c1c..7e166e04f8c 100644
--- a/chromium/third_party/ffmpeg/libavfilter/avfilter.c
+++ b/chromium/third_party/ffmpeg/libavfilter/avfilter.c
@@ -295,7 +295,7 @@ int avfilter_config_links(AVFilterContext *filter)
if ((config_link = link->dstpad->config_props))
if ((ret = config_link(link)) < 0) {
- av_log(link->src, AV_LOG_ERROR,
+ av_log(link->dst, AV_LOG_ERROR,
"Failed to configure input pad on %s\n",
link->dst->name);
return ret;
@@ -456,6 +456,7 @@ int avfilter_process_command(AVFilterContext *filter, const char *cmd, const cha
}
static AVFilter *first_filter;
+static AVFilter **last_filter = &first_filter;
#if !FF_API_NOCONST_GET_NAME
const
@@ -476,7 +477,7 @@ AVFilter *avfilter_get_by_name(const char *name)
int avfilter_register(AVFilter *filter)
{
- AVFilter **f = &first_filter;
+ AVFilter **f = last_filter;
int i;
/* the filter must select generic or internal exclusively */
@@ -492,6 +493,7 @@ int avfilter_register(AVFilter *filter)
while(*f || avpriv_atomic_ptr_cas((void * volatile *)f, NULL, filter))
f = &(*f)->next;
+ last_filter = &filter->next;
return 0;
}
@@ -997,7 +999,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
int (*filter_frame)(AVFilterLink *, AVFrame *);
AVFilterContext *dstctx = link->dst;
AVFilterPad *dst = link->dstpad;
- AVFrame *out;
+ AVFrame *out = NULL;
int ret;
AVFilterCommand *cmd= link->dst->command_queue;
int64_t pts;
@@ -1022,13 +1024,18 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
case AVMEDIA_TYPE_AUDIO:
out = ff_get_audio_buffer(link, frame->nb_samples);
break;
- default: return AVERROR(EINVAL);
+ default:
+ ret = AVERROR(EINVAL);
+ goto fail;
}
if (!out) {
- av_frame_free(&frame);
- return AVERROR(ENOMEM);
+ ret = AVERROR(ENOMEM);
+ goto fail;
}
- av_frame_copy_props(out, frame);
+
+ ret = av_frame_copy_props(out, frame);
+ if (ret < 0)
+ goto fail;
switch (link->type) {
case AVMEDIA_TYPE_VIDEO:
@@ -1041,7 +1048,9 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
av_get_channel_layout_nb_channels(frame->channel_layout),
frame->format);
break;
- default: return AVERROR(EINVAL);
+ default:
+ ret = AVERROR(EINVAL);
+ goto fail;
}
av_frame_free(&frame);
@@ -1074,6 +1083,11 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
link->frame_requested = 0;
ff_update_link_current_pts(link, pts);
return ret;
+
+fail:
+ av_frame_free(&out);
+ av_frame_free(&frame);
+ return ret;
}
static int ff_filter_frame_needs_framing(AVFilterLink *link, AVFrame *frame)