[FFmpeg-devel] Filter with multiple inputs, specific format on second and third input?
F.Sluiter
fsluiter at gmail.com
Fri Mar 11 16:19:20 CET 2016
I am writing a filter that takes a video file and remaps pixels based on
second and third input.
second and third input are pgm files, which should give me a list of
integers (gray16) that I can use in the filter.
However ffmpeg by default converts my pgm files to YUV.
Is there a way to prevent that?
Should I add something to the filter code to only accept gray16 encoded
files as second (xmap) and third (ymap) input, but keep arbitray video as
input1?
Command line:
# ffmpeg -i INPUT.avi -i feep.pgm -i feep.pgm -lavfi '[0][1][2]remap'
OUTPUT.avi
static int query_formats(AVFilterContext *ctx)
{
static const enum AVPixelFormat pix_fmts[] = {
AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P,
AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR, AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
AV_PIX_FMT_0RGB, AV_PIX_FMT_0BGR, AV_PIX_FMT_RGB0, AV_PIX_FMT_BGR0,
AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE
};
return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts));
}
static const AVFilterPad remap_inputs[] = {
{
.name = "source",
.type = AVMEDIA_TYPE_VIDEO,
.filter_frame = filter_frame,
.config_props = config_input,
},
{
.name = "xmap",
.type = AVMEDIA_TYPE_VIDEO,
.filter_frame = filter_frame,
},
{
.name = "ymap",
.type = AVMEDIA_TYPE_VIDEO,
.filter_frame = filter_frame,
},
{ NULL }
};
static const AVFilterPad remap_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.config_props = config_output,
.request_frame = request_frame,
},
{ NULL }
};
AVFilter ff_vf_remap = {
.name = "remap",
.description = NULL_IF_CONFIG_SMALL("remap pixels."),
.priv_size = sizeof(remapContext),
.uninit = uninit,
.query_formats = query_formats,
.inputs = remap_inputs,
.outputs = remap_outputs,
.priv_class = &remap_class,
.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
};
More information about the ffmpeg-devel
mailing list