summaryrefslogtreecommitdiff
path: root/libavfilter/vf_lensfun.c
diff options
context:
space:
mode:
authorDaniel Playfair Cal <daniel.playfair.cal@gmail.com>2019-03-25 13:07:28 +1100
committerPaul B Mahol <onemda@gmail.com>2019-03-25 22:50:54 +0100
commit6e42021128982c9b4bc1f698a326a7f8361d67a0 (patch)
tree937a6e37a5012adffc188024c3bf333e4a847ea9 /libavfilter/vf_lensfun.c
parent9ae8f3cdd330d0b050b43bf8fa062ab24ee465f3 (diff)
avfilter/vf_lensfun: add scale parameter
The lensfun filter wraps the lensfun library which performs transformations on videos to correct for lens distortion. Often this results in areas in the input being mapped to areas that fall outside the boundaries of the output. The library has a parameter called scale which is a scale factor applied to the output video. By decreasing it it is possible to regain the areas of the video which would otherwise have been lost. There is a special value of 0 which indicates that the library should automatically determine a scale factor that results in the output frame being filled (i.e. little or no black/unmapped areas). This patch adds a corresponding scale option to the lensfun filter which is passed through to the library. The existing behaviour of using the automatic value of 0 is retained as the default behaviour, while other values will be passed through to the library. Signed-off-by: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
Diffstat (limited to 'libavfilter/vf_lensfun.c')
-rw-r--r--libavfilter/vf_lensfun.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libavfilter/vf_lensfun.c b/libavfilter/vf_lensfun.c
index 901cd9ff90..3b723dd2d0 100644
--- a/libavfilter/vf_lensfun.c
+++ b/libavfilter/vf_lensfun.c
@@ -79,6 +79,7 @@ typedef struct LensfunContext {
float focal_length;
float aperture;
float focus_distance;
+ float scale;
int target_geometry;
int reverse;
int interpolation_type;
@@ -108,6 +109,7 @@ static const AVOption lensfun_options[] = {
{ "focal_length", "focal length of video (zoom; constant for the duration of the use of this filter)", OFFSET(focal_length), AV_OPT_TYPE_FLOAT, {.dbl=18}, 0.0, DBL_MAX, FLAGS },
{ "aperture", "aperture (constant for the duration of the use of this filter)", OFFSET(aperture), AV_OPT_TYPE_FLOAT, {.dbl=3.5}, 0.0, DBL_MAX, FLAGS },
{ "focus_distance", "focus distance (constant for the duration of the use of this filter)", OFFSET(focus_distance), AV_OPT_TYPE_FLOAT, {.dbl=1000.0f}, 0.0, DBL_MAX, FLAGS },
+ { "scale", "scale factor applied after corrections (0.0 means automatic scaling)", OFFSET(scale), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, DBL_MAX, FLAGS },
{ "target_geometry", "target geometry of the lens correction (only when geometry correction is enabled)", OFFSET(target_geometry), AV_OPT_TYPE_INT, {.i64=LF_RECTILINEAR}, 0, INT_MAX, FLAGS, "lens_geometry" },
{ "rectilinear", "rectilinear lens (default)", 0, AV_OPT_TYPE_CONST, {.i64=LF_RECTILINEAR}, 0, 0, FLAGS, "lens_geometry" },
{ "fisheye", "fisheye lens", 0, AV_OPT_TYPE_CONST, {.i64=LF_FISHEYE}, 0, 0, FLAGS, "lens_geometry" },
@@ -228,7 +230,7 @@ static int config_props(AVFilterLink *inlink)
lensfun->focal_length,
lensfun->aperture,
lensfun->focus_distance,
- 0.0,
+ lensfun->scale,
lensfun->target_geometry,
lensfun_mode,
lensfun->reverse);