summaryrefslogtreecommitdiff
path: root/libavfilter/vf_zscale.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-09-17 21:29:58 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-09-18 23:16:44 +0200
commit6556146aa0c21c32981405b45bb7eea7376e54c9 (patch)
tree492af738820b0f0d4df6522afee95abbe4872e0f /libavfilter/vf_zscale.c
parente4f499f8422708fc56f8851220b3ae78ecee76f8 (diff)
downloadffmpeg-6556146aa0c21c32981405b45bb7eea7376e54c9.tar.gz
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 <onemda@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavfilter/vf_zscale.c')
-rw-r--r--libavfilter/vf_zscale.c15
1 files 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;