1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-24 13:56:33 +02:00

lavfi/fieldorder: add support to named options

This commit is contained in:
Stefano Sabatini 2013-03-10 17:36:29 +01:00
parent a3233e9d7a
commit aeac1dae29
3 changed files with 40 additions and 26 deletions

View File

@ -2986,18 +2986,19 @@ field=type=bottom
Transform the field order of the input video.
It accepts one parameter which specifies the required field order that
the input interlaced video will be transformed to. The parameter can
assume one of the following values:
This filter accepts the named option @option{order} which
specifies the required field order that the input interlaced video
will be transformed to. The option name can be omitted.
@table @option
@item 0 or bff
The option @option{order} can assume one of the following values:
@table @samp
@item bff
output bottom field first
@item 1 or tff
@item tff
output top field first
@end table
Default value is "tff".
Default value is @samp{tff}.
Transformation is achieved by shifting the picture content up or down
by one line, and filling the remaining line with appropriate picture content.

View File

@ -30,7 +30,7 @@
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR 45
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_MICRO 101
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \

View File

@ -23,6 +23,7 @@
* video field order filter, heavily influenced by vf_pad.c
*/
#include "libavutil/opt.h"
#include "libavutil/imgutils.h"
#include "libavutil/internal.h"
#include "libavutil/pixdesc.h"
@ -31,34 +32,45 @@
#include "internal.h"
#include "video.h"
typedef struct
{
enum FieldOrder {
ORDER_TFF,
ORDER_BFF,
ORDER_NB,
};
typedef struct {
const AVClass *class;
enum FieldOrder order;
unsigned int dst_tff; ///< output bff/tff
int line_size[4]; ///< bytes of pixel data per line for each plane
} FieldOrderContext;
#define OFFSET(x) offsetof(FieldOrderContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
static const AVOption fieldorder_options[] = {
{ "order", "set output field order", OFFSET(order), AV_OPT_TYPE_INT, {.i64=ORDER_TFF}, 0, ORDER_NB-1, FLAGS, "order" },
{ "tff", "set top field first", 0, AV_OPT_TYPE_CONST, {.i64=ORDER_TFF}, .flags=FLAGS, .unit="order" },
{ "bff", "set bottom field first", 0, AV_OPT_TYPE_CONST, {.i64=ORDER_BFF}, .flags=FLAGS, .unit="order" },
{ NULL }
};
AVFILTER_DEFINE_CLASS(fieldorder);
static av_cold int init(AVFilterContext *ctx, const char *args)
{
FieldOrderContext *fieldorder = ctx->priv;
int ret;
static const char *shorthand[] = { "order", NULL };
const char *tff = "tff";
const char *bff = "bff";
fieldorder->class = &fieldorder_class;
av_opt_set_defaults(fieldorder);
if (!args) {
fieldorder->dst_tff = 1;
} else if (sscanf(args, "%u", &fieldorder->dst_tff) == 1) {
fieldorder->dst_tff = !!fieldorder->dst_tff;
} else if (!strcmp(tff, args)) {
fieldorder->dst_tff = 1;
} else if (!strcmp(bff, args)) {
fieldorder->dst_tff = 0;
} else {
av_log(ctx, AV_LOG_ERROR, "Invalid argument '%s'.\n", args);
return AVERROR(EINVAL);
}
if ((ret = av_opt_set_from_string(fieldorder, args, shorthand, "=", ":")) < 0)
return ret;
av_log(ctx, AV_LOG_VERBOSE, "output field order: %s\n",
fieldorder->dst_tff ? tff : bff);
fieldorder->dst_tff = fieldorder->order == ORDER_TFF;
av_log(ctx, AV_LOG_VERBOSE, "tff:%d\n", fieldorder->dst_tff);
return 0;
}
@ -200,4 +212,5 @@ AVFilter avfilter_vf_fieldorder = {
.query_formats = query_formats,
.inputs = avfilter_vf_fieldorder_inputs,
.outputs = avfilter_vf_fieldorder_outputs,
.priv_class = &fieldorder_class,
};