diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2012-03-10 04:07:17 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-03-11 17:46:31 +0100 |
commit | f49cb8e669d9ee3ec97ec7ffa3532c4a6bee3cd0 (patch) | |
tree | 8a1a19d56e0c89b6bf85e402372b47088513e0e2 /libavfilter/vf_crop.c | |
parent | 84b9b4aa187c5a2aacbbd45c910e5b53eeaa1adf (diff) | |
download | ffmpeg-f49cb8e669d9ee3ec97ec7ffa3532c4a6bee3cd0.tar.gz |
vf_crop: keepaspect support
Diffstat (limited to 'libavfilter/vf_crop.c')
-rw-r--r-- | libavfilter/vf_crop.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/libavfilter/vf_crop.c b/libavfilter/vf_crop.c index 117cd4397e..c8c4fb24ad 100644 --- a/libavfilter/vf_crop.c +++ b/libavfilter/vf_crop.c @@ -74,6 +74,9 @@ typedef struct { int w; ///< width of the cropped area int h; ///< height of the cropped area + AVRational out_sar; ///< output sample aspect ratio + int keep_aspect; ///< keep display aspect ratio when cropping + int max_step[4]; ///< max pixel step for each plane, expressed as a number of bytes int hsub, vsub; ///< chroma subsampling char x_expr[256], y_expr[256], ow_expr[256], oh_expr[256]; @@ -124,7 +127,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) av_strlcpy(crop->y_expr, "(in_h-out_h)/2", sizeof(crop->y_expr)); if (args) - sscanf(args, "%255[^:]:%255[^:]:%255[^:]:%255[^:]", crop->ow_expr, crop->oh_expr, crop->x_expr, crop->y_expr); + sscanf(args, "%255[^:]:%255[^:]:%255[^:]:%255[^:]:%d", crop->ow_expr, crop->oh_expr, crop->x_expr, crop->y_expr, &crop->keep_aspect); return 0; } @@ -210,6 +213,14 @@ static int config_input(AVFilterLink *link) NULL, NULL, NULL, NULL, 0, ctx)) < 0) return AVERROR(EINVAL); + if (crop->keep_aspect) { + AVRational dar = av_mul_q(link->sample_aspect_ratio, + (AVRational){ link->w, link->h }); + av_reduce(&crop->out_sar.num, &crop->out_sar.den, + dar.num * crop->h, dar.den * crop->w, INT_MAX); + } else + crop->out_sar = link->sample_aspect_ratio; + av_log(ctx, AV_LOG_INFO, "w:%d h:%d -> w:%d h:%d\n", link->w, link->h, crop->w, crop->h); @@ -239,6 +250,7 @@ static int config_output(AVFilterLink *link) link->w = crop->w; link->h = crop->h; + link->sample_aspect_ratio = crop->out_sar; return 0; } |