Commit 7aa99a69 authored by Paul B Mahol's avatar Paul B Mahol

lavfi/bbox: make min_val user configurable

Signed-off-by: 's avatarPaul B Mahol <onemda@gmail.com>
parent e9c3851d
...@@ -1925,6 +1925,13 @@ luminance value greater than the minimum allowed value. ...@@ -1925,6 +1925,13 @@ luminance value greater than the minimum allowed value.
The parameters describing the bounding box are printed on the filter The parameters describing the bounding box are printed on the filter
log. log.
The filter accepts the following option:
@table @option
@item min_val
Set the minimal luminance value. Default is @code{16}.
@end table
@section blackdetect @section blackdetect
Detect video intervals that are (almost) completely black. Can be Detect video intervals that are (almost) completely black. Can be
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR 70 #define LIBAVFILTER_VERSION_MINOR 70
#define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVFILTER_VERSION_MICRO 101
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \ LIBAVFILTER_VERSION_MINOR, \
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* bounding box detection filter * bounding box detection filter
*/ */
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "libavutil/timestamp.h" #include "libavutil/timestamp.h"
#include "avfilter.h" #include "avfilter.h"
...@@ -30,9 +31,20 @@ ...@@ -30,9 +31,20 @@
#include "internal.h" #include "internal.h"
typedef struct { typedef struct {
int unused; const AVClass *class;
int min_val;
} BBoxContext; } BBoxContext;
#define OFFSET(x) offsetof(BBoxContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
static const AVOption bbox_options[] = {
{ "min_val", "set minimum luminance value for bounding box", OFFSET(min_val), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 254, FLAGS },
{ NULL }
};
AVFILTER_DEFINE_CLASS(bbox);
static int query_formats(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx)
{ {
static const enum AVPixelFormat pix_fmts[] = { static const enum AVPixelFormat pix_fmts[] = {
...@@ -58,7 +70,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) ...@@ -58,7 +70,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
has_bbox = has_bbox =
ff_calculate_bounding_box(&box, ff_calculate_bounding_box(&box,
frame->data[0], frame->linesize[0], frame->data[0], frame->linesize[0],
inlink->w, inlink->h, 16); inlink->w, inlink->h, bbox->min_val);
w = box.x2 - box.x1 + 1; w = box.x2 - box.x1 + 1;
h = box.y2 - box.y1 + 1; h = box.y2 - box.y1 + 1;
...@@ -100,6 +112,7 @@ AVFilter avfilter_vf_bbox = { ...@@ -100,6 +112,7 @@ AVFilter avfilter_vf_bbox = {
.name = "bbox", .name = "bbox",
.description = NULL_IF_CONFIG_SMALL("Compute bounding box for each frame."), .description = NULL_IF_CONFIG_SMALL("Compute bounding box for each frame."),
.priv_size = sizeof(BBoxContext), .priv_size = sizeof(BBoxContext),
.priv_class = &bbox_class,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = bbox_inputs, .inputs = bbox_inputs,
.outputs = bbox_outputs, .outputs = bbox_outputs,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment