#include "avfilter.h"
#include "formats.h"
+#include "internal.h"
#include "video.h"
static AVFilterBufferRef *get_video_buffer(AVFilterLink *link, int perms,
return picref;
}
-static int start_frame(AVFilterLink *link, AVFilterBufferRef *inpicref)
+static int filter_frame(AVFilterLink *link, AVFilterBufferRef *inpicref)
{
- AVFilterBufferRef *outpicref = avfilter_ref_buffer(inpicref, ~0);
+ uint8_t *tmp_data;
+ int tmp_linesize;
- outpicref->data[1] = inpicref->data[2];
- outpicref->data[2] = inpicref->data[1];
+ tmp_data = inpicref->data[1];
+ inpicref->data[1] = inpicref->data[2];
+ inpicref->data[2] = tmp_data;
- outpicref->linesize[1] = inpicref->linesize[2];
- outpicref->linesize[2] = inpicref->linesize[1];
+ tmp_linesize = inpicref->linesize[1];
+ inpicref->linesize[1] = inpicref->linesize[2];
+ inpicref->linesize[2] = tmp_linesize;
- return ff_start_frame(link->dst->outputs[0], outpicref);
+ return ff_filter_frame(link->dst->outputs[0], inpicref);
}
static int query_formats(AVFilterContext *ctx)
return 0;
}
+static const AVFilterPad swapuv_inputs[] = {
+ {
+ .name = "default",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .get_video_buffer = get_video_buffer,
+ .filter_frame = filter_frame,
+ },
+ { NULL }
+};
+
+static const AVFilterPad swapuv_outputs[] = {
+ {
+ .name = "default",
+ .type = AVMEDIA_TYPE_VIDEO,
+ },
+ { NULL }
+};
+
AVFilter avfilter_vf_swapuv = {
.name = "swapuv",
.description = NULL_IF_CONFIG_SMALL("Swap U and V components."),
.priv_size = 0,
.query_formats = query_formats,
-
- .inputs = (const AVFilterPad[]) {
- { .name = "default",
- .type = AVMEDIA_TYPE_VIDEO,
- .get_video_buffer = get_video_buffer,
- .start_frame = start_frame, },
- { .name = NULL }
- },
- .outputs = (const AVFilterPad[]) {
- { .name = "default",
- .type = AVMEDIA_TYPE_VIDEO, },
- { .name = NULL }
- },
+ .inputs = swapuv_inputs,
+ .outputs = swapuv_outputs,
};