/* #define DEBUG */
+#include <stdio.h>
+#include <string.h>
+
#include "libavutil/imgutils.h"
+#include "libavutil/internal.h"
#include "libavutil/pixdesc.h"
#include "avfilter.h"
#include "formats.h"
return ff_get_video_buffer(outlink, perms, w, h);
}
-static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
+static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
{
AVFilterContext *ctx = inlink->dst;
AVFilterLink *outlink = ctx->outputs[0];
AVFilterBufferRef *outpicref, *for_next_filter;
+ int ret = 0;
outpicref = avfilter_ref_buffer(inpicref, ~0);
- outlink->out_buf = outpicref;
+ if (!outpicref)
+ return AVERROR(ENOMEM);
for_next_filter = avfilter_ref_buffer(outpicref, ~0);
- ff_start_frame(outlink, for_next_filter);
+ if (!for_next_filter) {
+ avfilter_unref_bufferp(&outpicref);
+ return AVERROR(ENOMEM);
+ }
+
+ ret = ff_start_frame(outlink, for_next_filter);
+ if (ret < 0) {
+ avfilter_unref_bufferp(&outpicref);
+ return ret;
+ }
+
+ outlink->out_buf = outpicref;
+ return 0;
}
-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;
FieldOrderContext *fieldorder = ctx->priv;
* and that complexity will be added later */
if ( !inpicref->video->interlaced
|| inpicref->video->top_field_first == fieldorder->dst_tff) {
- ff_draw_slice(outlink, y, h, slice_dir);
+ return ff_draw_slice(outlink, y, h, slice_dir);
}
+ return 0;
}
-static void end_frame(AVFilterLink *inlink)
+static int end_frame(AVFilterLink *inlink)
{
AVFilterContext *ctx = inlink->dst;
FieldOrderContext *fieldorder = ctx->priv;
"not interlaced or field order already correct\n");
}
- ff_end_frame(outlink);
+ return ff_end_frame(outlink);
}
AVFilter avfilter_vf_fieldorder = {
.get_video_buffer = get_video_buffer,
.draw_slice = draw_slice,
.end_frame = end_frame,
- .min_perms = AV_PERM_READ,
- .rej_perms = AV_PERM_REUSE2|AV_PERM_PRESERVE,},
+ .min_perms = AV_PERM_READ | AV_PERM_PRESERVE },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, },