From 6556146aa0c21c32981405b45bb7eea7376e54c9 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Fri, 17 Sep 2021 21:29:58 +0200 Subject: [PATCH] avfilter/vf_zscale: Don't make assumptions about zimg's range enums zimg's color range enum values are off-by-one compared to ours; therefore the code just adds one when converting from theirs to ours. Yet this is not how one should deal with enums; use a switch instead. Reviewed-by: Paul B Mahol Signed-off-by: Andreas Rheinhardt --- libavfilter/vf_zscale.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c index 06a025e6e6..80c917e8c0 100644 --- a/libavfilter/vf_zscale.c +++ b/libavfilter/vf_zscale.c @@ -460,6 +460,17 @@ static int convert_range(enum AVColorRange color_range) return ZIMG_RANGE_LIMITED; } +static enum AVColorRange convert_range_from_zimg(enum zimg_pixel_range_e color_range) +{ + switch (color_range) { + case ZIMG_RANGE_LIMITED: + return AVCOL_RANGE_MPEG; + case ZIMG_RANGE_FULL: + return AVCOL_RANGE_JPEG; + } + return AVCOL_RANGE_UNSPECIFIED; +} + static void format_init(zimg_image_format *format, AVFrame *frame, const AVPixFmtDescriptor *desc, int colorspace, int primaries, int transfer, int range, int location) { @@ -617,7 +628,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) out->color_primaries = (int)s->dst_format.color_primaries; if (s->range != -1) - out->color_range = (int)s->dst_format.pixel_range + 1; + out->color_range = convert_range_from_zimg(s->dst_format.pixel_range); if (s->trc != -1) out->color_trc = (int)s->dst_format.transfer_characteristics; @@ -676,7 +687,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) out->color_primaries = (int)s->dst_format.color_primaries; if (s->range != -1) - out->color_range = (int)s->dst_format.pixel_range + 1; + out->color_range = convert_range_from_zimg(s->dst_format.pixel_range); if (s->trc != -1) out->color_trc = (int)s->dst_format.transfer_characteristics;