| @@ -66,36 +66,13 @@ typedef struct FilterParam { · 65 unmodified lines |
| 66 | 66 | |
| 67 | 67 | typedef struct { |
| 68 | 68 | const AVClass *class; |
| 69 | + int lmsize_x, lmsize_y, cmsize_x, cmsize_y; |
| 70 | + float lamount, camount; |
| 69 | 71 | FilterParam luma; ///< luma parameters (width, height, amount) |
| 70 | 72 | FilterParam chroma; ///< chroma parameters (width, height, amount) |
| 71 | 73 | int hsub, vsub; |
| 72 | | − int luma_msize_x, luma_msize_y, chroma_msize_x, chroma_msize_y; |
| 73 | | − double luma_amount, chroma_amount; |
| 74 | 74 | } UnsharpContext; |
| 75 | 75 | |
| 76 | | −#define OFFSET(x) offsetof(UnsharpContext, x) |
| 77 | | −#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM |
| 78 | | − |
| 79 | | −static const AVOption unsharp_options[] = { |
| 80 | | − { "luma_msize_x", "set luma matrix x size", OFFSET(luma_msize_x), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 81 | | − { "lx", "set luma matrix x size", OFFSET(luma_msize_x), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 82 | | − { "luma_msize_y", "set luma matrix y size", OFFSET(luma_msize_y), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 83 | | − { "ly", "set luma matrix y size", OFFSET(luma_msize_y), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 84 | | − { "luma_amount", "set luma effect amount", OFFSET(luma_amount), AV_OPT_TYPE_DOUBLE, {.dbl=1.0}, -DBL_MAX, DBL_MAX, .flags=FLAGS }, |
| 85 | | − { "la", "set luma effect amount", OFFSET(luma_amount), AV_OPT_TYPE_DOUBLE, {.dbl=1.0}, -DBL_MAX, DBL_MAX, .flags=FLAGS }, |
| 86 | | − |
| 87 | | − { "chroma_msize_x", "set chroma matrix x size", OFFSET(chroma_msize_x), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 88 | | − { "cx", "set chroma matrix x size", OFFSET(chroma_msize_x), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 89 | | − { "chroma_msize_y", "set chroma matrix y size", OFFSET(chroma_msize_y), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 90 | | − { "cy" , "set chroma matrix y size", OFFSET(chroma_msize_y), AV_OPT_TYPE_INT, {.i64=5}, 3, 63, .flags=FLAGS }, |
| 91 | | − { "chroma_amount", "set chroma effect strenght", OFFSET(chroma_amount), AV_OPT_TYPE_DOUBLE, {.dbl=0.0}, -DBL_MAX, DBL_MAX, .flags=FLAGS }, |
| 92 | | − { "ca", "set chroma effect strenght", OFFSET(chroma_amount), AV_OPT_TYPE_DOUBLE, {.dbl=0.0}, -DBL_MAX, DBL_MAX, .flags=FLAGS }, |
| 93 | | − |
| 94 | | − { NULL } |
| 95 | | −}; |
| 96 | | − |
| 97 | | −AVFILTER_DEFINE_CLASS(unsharp); |
| 98 | | − |
| 99 | 76 | static void apply_unsharp( uint8_t *dst, int dst_stride, |
| 100 | 77 | const uint8_t *src, int src_stride, |
| 101 | 78 | int width, int height, FilterParam *fp) |
| @@ -154,7 +131,7 @@ static void apply_unsharp( uint8_t *dst, int dst_stride, · 52 unmodified lines |
| 154 | 131 | } |
| 155 | 132 | } |
| 156 | 133 | |
| 157 | | −static void set_filter_param(FilterParam *fp, int msize_x, int msize_y, double amount) |
| 134 | +static void set_filter_param(FilterParam *fp, int msize_x, int msize_y, float amount) |
| 158 | 135 | { |
| 159 | 136 | fp->msize_x = msize_x; |
| 160 | 137 | fp->msize_y = msize_y; |
| @@ -170,8 +147,9 @@ static av_cold int init(AVFilterContext *ctx, const char *args) · 9 unmodified lines |
| 170 | 147 | { |
| 171 | 148 | UnsharpContext *unsharp = ctx->priv; |
| 172 | 149 | |
| 173 | | − set_filter_param(&unsharp->luma, unsharp->luma_msize_x, unsharp->luma_msize_y, unsharp->luma_amount); |
| 174 | | − set_filter_param(&unsharp->chroma, unsharp->chroma_msize_x, unsharp->chroma_msize_y, unsharp->chroma_amount); |
| 150 | + |
| 151 | + set_filter_param(&unsharp->luma, unsharp->lmsize_x, unsharp->lmsize_y, unsharp->lamount); |
| 152 | + set_filter_param(&unsharp->chroma, unsharp->cmsize_x, unsharp->cmsize_y, unsharp->camount); |
| 175 | 153 | |
| 176 | 154 | return 0; |
| 177 | 155 | } |
| @@ -269,6 +247,28 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) · 91 unmodified lines |
| 269 | 247 | return ff_filter_frame(outlink, out); |
| 270 | 248 | } |
| 271 | 249 | |
| 250 | +#define OFFSET(x) offsetof(UnsharpContext, x) |
| 251 | +#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM |
| 252 | +#define MIN_SIZE 3 |
| 253 | +#define MAX_SIZE 63 |
| 254 | +static const AVOption unsharp_options[] = { |
| 255 | + { "luma_msize_x", "luma matrix horizontal size", OFFSET(lmsize_x), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 256 | + { "lx", "luma matrix horizontal size", OFFSET(lmsize_x), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 257 | + { "luma_msize_y", "luma matrix vertical size", OFFSET(lmsize_y), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 258 | + { "ly", "luma matrix vertical size", OFFSET(lmsize_y), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 259 | + { "luma_amount", "luma effect strength", OFFSET(lamount), AV_OPT_TYPE_FLOAT, { .dbl = 1 }, -2, 5, FLAGS }, |
| 260 | + { "la", "luma effect strength", OFFSET(lamount), AV_OPT_TYPE_FLOAT, { .dbl = 1 }, -2, 5, FLAGS }, |
| 261 | + { "chroma_msize_x", "chroma matrix horizontal size", OFFSET(cmsize_x), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 262 | + { "cx", "chroma matrix horizontal size", OFFSET(cmsize_x), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 263 | + { "chroma_msize_y", "chroma matrix vertical size", OFFSET(cmsize_y), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 264 | + { "cy", "chroma matrix vertical size", OFFSET(cmsize_y), AV_OPT_TYPE_INT, { .i64 = 5 }, MIN_SIZE, MAX_SIZE, FLAGS }, |
| 265 | + { "chroma_amount", "chroma effect strength", OFFSET(camount), AV_OPT_TYPE_FLOAT, { .dbl = 0 }, -2, 5, FLAGS }, |
| 266 | + { "ca", "chroma effect strength", OFFSET(camount), AV_OPT_TYPE_FLOAT, { .dbl = 0 }, -2, 5, FLAGS }, |
| 267 | + { NULL }, |
| 268 | +}; |
| 269 | + |
| 270 | +AVFILTER_DEFINE_CLASS(unsharp); |
| 271 | + |
| 272 | 272 | static const AVFilterPad avfilter_vf_unsharp_inputs[] = { |
| 273 | 273 | { |
| 274 | 274 | .name = "default", |
| @@ -287,17 +287,12 @@ static const AVFilterPad avfilter_vf_unsharp_outputs[] = { · 12 unmodified lines |
| 287 | 287 | { NULL } |
| 288 | 288 | }; |
| 289 | 289 | |
| 290 | | −static const char *const shorthand[] = { |
| 291 | | − "luma_msize_x", "luma_msize_y", "luma_amount", |
| 292 | | − "chroma_msize_x", "chroma_msize_y", "chroma_amount", |
| 293 | | − NULL |
| 294 | | −}; |
| 295 | | − |
| 296 | 290 | AVFilter avfilter_vf_unsharp = { |
| 297 | 291 | .name = "unsharp", |
| 298 | 292 | .description = NULL_IF_CONFIG_SMALL("Sharpen or blur the input video."), |
| 299 | 293 | |
| 300 | 294 | .priv_size = sizeof(UnsharpContext), |
| 295 | + .priv_class = &unsharp_class, |
| 301 | 296 | |
| 302 | 297 | .init = init, |
| 303 | 298 | .uninit = uninit, |
| @@ -306,7 +301,4 @@ AVFilter avfilter_vf_unsharp = { · 2 unmodified lines |
| 306 | 301 | .inputs = avfilter_vf_unsharp_inputs, |
| 307 | 302 | |
| 308 | 303 | .outputs = avfilter_vf_unsharp_outputs, |
| 309 | | − |
| 310 | | − .priv_class = &unsharp_class, |
| 311 | | − .shorthand = shorthand, |
| 312 | 304 | }; |