X-Git-Url: https://git.piment-noir.org/?p=deb_ffmpeg.git;a=blobdiff_plain;f=ffmpeg%2Flibswscale%2Fswscale.c;h=16a31cee40116dab094b5e21435617ec05f66b69;hp=59ead121d94d9fb2cb001fbb32611073f1605b88;hb=f6fa7814ccfe3e76514b36cf04f5cd3cb657c8cf;hpb=2ba45a602cbfa7b771effba9b11bb4245c21bc00 diff --git a/ffmpeg/libswscale/swscale.c b/ffmpeg/libswscale/swscale.c index 59ead12..16a31ce 100644 --- a/ffmpeg/libswscale/swscale.c +++ b/ffmpeg/libswscale/swscale.c @@ -27,6 +27,7 @@ #include "libavutil/avutil.h" #include "libavutil/bswap.h" #include "libavutil/cpu.h" +#include "libavutil/imgutils.h" #include "libavutil/intreadwrite.h" #include "libavutil/mathematics.h" #include "libavutil/pixdesc.h" @@ -804,9 +805,9 @@ static void xyz12Torgb48(struct SwsContext *c, uint16_t *dst, c->xyz2rgb_matrix[2][2] * z >> 12; // limit values to 12-bit depth - r = av_clip_c(r,0,4095); - g = av_clip_c(g,0,4095); - b = av_clip_c(b,0,4095); + r = av_clip(r, 0, 4095); + g = av_clip(g, 0, 4095); + b = av_clip(b, 0, 4095); // convert from sRGBlinear to RGB and scale from 12bit to 16bit if (desc->flags & AV_PIX_FMT_FLAG_BE) { @@ -860,9 +861,9 @@ static void rgb48Toxyz12(struct SwsContext *c, uint16_t *dst, c->rgb2xyz_matrix[2][2] * b >> 12; // limit values to 12-bit depth - x = av_clip_c(x,0,4095); - y = av_clip_c(y,0,4095); - z = av_clip_c(z,0,4095); + x = av_clip(x, 0, 4095); + y = av_clip(y, 0, 4095); + z = av_clip(z, 0, 4095); // convert from XYZlinear to X'Y'Z' and scale from 12bit to 16bit if (desc->flags & AV_PIX_FMT_FLAG_BE) { @@ -899,6 +900,18 @@ int attribute_align_arg sws_scale(struct SwsContext *c, av_log(c, AV_LOG_ERROR, "One of the input parameters to sws_scale() is NULL, please check the calling code\n"); return 0; } + if (c->cascaded_context[0] && srcSliceY == 0 && srcSliceH == c->cascaded_context[0]->srcH) { + ret = sws_scale(c->cascaded_context[0], + srcSlice, srcStride, srcSliceY, srcSliceH, + c->cascaded_tmp, c->cascaded_tmpStride); + if (ret < 0) + return ret; + ret = sws_scale(c->cascaded_context[1], + (const uint8_t * const * )c->cascaded_tmp, c->cascaded_tmpStride, 0, c->cascaded_context[0]->dstH, + dst, dstStride); + return ret; + } + memcpy(src2, srcSlice, sizeof(src2)); memcpy(dst2, dst, sizeof(dst2));