mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
lavfi/removelogo: switch to an AVOptions-based system.
This commit is contained in:
parent
7f09b888e8
commit
c1907bd732
@ -4800,10 +4800,14 @@ Suppress a TV station logo, using an image file to determine which
|
|||||||
pixels comprise the logo. It works by filling in the pixels that
|
pixels comprise the logo. It works by filling in the pixels that
|
||||||
comprise the logo with neighboring pixels.
|
comprise the logo with neighboring pixels.
|
||||||
|
|
||||||
This filter requires one argument which specifies the filter bitmap
|
The filters accept the following options:
|
||||||
file, which can be any image format supported by libavformat. The
|
|
||||||
width and height of the image file must match those of the video
|
@table @option
|
||||||
stream being processed.
|
@item filename, f
|
||||||
|
Set the filter bitmap file, which can be any image format supported by
|
||||||
|
libavformat. The width and height of the image file must match those of the
|
||||||
|
video stream being processed.
|
||||||
|
@end table
|
||||||
|
|
||||||
Pixels in the provided bitmap image with a value of zero are not
|
Pixels in the provided bitmap image with a value of zero are not
|
||||||
considered part of the logo, non-zero pixels are considered part of
|
considered part of the logo, non-zero pixels are considered part of
|
||||||
|
@ -681,7 +681,6 @@ static const char *const filters_left_to_update[] = {
|
|||||||
"hue",
|
"hue",
|
||||||
"mp",
|
"mp",
|
||||||
"pan",
|
"pan",
|
||||||
"removelogo",
|
|
||||||
"scale",
|
"scale",
|
||||||
"setdar",
|
"setdar",
|
||||||
"setsar",
|
"setsar",
|
||||||
|
@ -70,6 +70,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
|
#include "libavutil/opt.h"
|
||||||
#include "avfilter.h"
|
#include "avfilter.h"
|
||||||
#include "formats.h"
|
#include "formats.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
@ -79,6 +80,8 @@
|
|||||||
#include "lswsutils.h"
|
#include "lswsutils.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
const AVClass *class;
|
||||||
|
char *filename;
|
||||||
/* Stores our collection of masks. The first is for an array of
|
/* Stores our collection of masks. The first is for an array of
|
||||||
the second for the y axis, and the third for the x axis. */
|
the second for the y axis, and the third for the x axis. */
|
||||||
int ***mask;
|
int ***mask;
|
||||||
@ -91,6 +94,16 @@ typedef struct {
|
|||||||
FFBoundingBox half_mask_bbox;
|
FFBoundingBox half_mask_bbox;
|
||||||
} RemovelogoContext;
|
} RemovelogoContext;
|
||||||
|
|
||||||
|
#define OFFSET(x) offsetof(RemovelogoContext, x)
|
||||||
|
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
|
||||||
|
static const AVOption removelogo_options[] = {
|
||||||
|
{ "filename", "set bitmap filename", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
|
||||||
|
{ "f", "set bitmap filename", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
AVFILTER_DEFINE_CLASS(removelogo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Choose a slightly larger mask size to improve performance.
|
* Choose a slightly larger mask size to improve performance.
|
||||||
*
|
*
|
||||||
@ -272,13 +285,13 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
|
|||||||
int a, b, c, w, h;
|
int a, b, c, w, h;
|
||||||
int full_max_mask_size, half_max_mask_size;
|
int full_max_mask_size, half_max_mask_size;
|
||||||
|
|
||||||
if (!args) {
|
if (!removelogo->filename) {
|
||||||
av_log(ctx, AV_LOG_ERROR, "An image file must be specified as argument\n");
|
av_log(ctx, AV_LOG_ERROR, "The bitmap file name is mandatory\n");
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Load our mask image. */
|
/* Load our mask image. */
|
||||||
if ((ret = load_mask(&removelogo->full_mask_data, &w, &h, args, ctx)) < 0)
|
if ((ret = load_mask(&removelogo->full_mask_data, &w, &h, removelogo->filename, ctx)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
removelogo->mask_w = w;
|
removelogo->mask_w = w;
|
||||||
removelogo->mask_h = h;
|
removelogo->mask_h = h;
|
||||||
@ -564,4 +577,5 @@ AVFilter avfilter_vf_removelogo = {
|
|||||||
.query_formats = query_formats,
|
.query_formats = query_formats,
|
||||||
.inputs = removelogo_inputs,
|
.inputs = removelogo_inputs,
|
||||||
.outputs = removelogo_outputs,
|
.outputs = removelogo_outputs,
|
||||||
|
.priv_class = &removelogo_class,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user