diff options
author | Paul B Mahol <onemda@gmail.com> | 2023-09-28 22:43:23 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2023-09-28 22:46:56 +0200 |
commit | 0aa75a85e6cf6698784ddf8138059399dd89c2b7 (patch) | |
tree | 1b1b4d9d031e78e5efeef025d6f95db9f619a9eb | |
parent | 086c28090177b5255770fdf57af4978d64c20762 (diff) | |
download | ffmpeg-0aa75a85e6cf6698784ddf8138059399dd89c2b7.tar.gz |
avfilter/vf_zscale: fix adding >8 bit alpha plane
-rw-r--r-- | libavfilter/vf_zscale.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c index b6f040980c..788870ffaf 100644 --- a/libavfilter/vf_zscale.c +++ b/libavfilter/vf_zscale.c @@ -901,14 +901,22 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) int x, y; if (odesc->flags & AV_PIX_FMT_FLAG_FLOAT) { for (y = 0; y < out->height; y++) { + const ptrdiff_t row = y * out->linesize[3]; for (x = 0; x < out->width; x++) { - AV_WN32(out->data[3] + x * odesc->comp[3].step + y * out->linesize[3], + AV_WN32(out->data[3] + x * odesc->comp[3].step + row, av_float2int(1.0f)); } } - } else { + } else if (s->dst_format.depth == 8) { for (y = 0; y < outlink->h; y++) memset(out->data[3] + y * out->linesize[3], 0xff, outlink->w); + } else { + const uint16_t max = (1 << s->dst_format.depth) - 1; + for (y = 0; y < outlink->h; y++) { + const ptrdiff_t row = y * out->linesize[3]; + for (x = 0; x < out->width; x++) + AV_WN16(out->data[3] + x * odesc->comp[3].step + row, max); + } } } } else { |