diff options
author | Anton Khirnov <anton@khirnov.net> | 2021-05-19 11:47:42 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2021-07-03 15:30:34 +0200 |
commit | f136493d03c2bca7518fbcbc9b0a1f3abd27d9d4 (patch) | |
tree | 7949a3cb6d190ef00a5daf9498bdd7e2c9ed4b86 /libswscale/swscale.c | |
parent | a2254aedc9042af6b36e4e69129fe38e02c85d4c (diff) | |
download | ffmpeg-f136493d03c2bca7518fbcbc9b0a1f3abd27d9d4.tar.gz |
sws: factor out cascaded scaling
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r-- | libswscale/swscale.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c index 72285c3547..867995c9c7 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -842,6 +842,22 @@ static int scale_gamma(SwsContext *c, return ret; } +static int scale_cascaded(SwsContext *c, + const uint8_t * const srcSlice[], const int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t * const dst[], const int dstStride[]) +{ + int 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; +} + /** * swscale wrapper, so we don't need to export the SwsContext. * Assumes planar YUV to be in YUV order instead of YVU. @@ -882,17 +898,8 @@ int attribute_align_arg sws_scale(struct SwsContext *c, if (c->gamma_flag && c->cascaded_context[0]) return scale_gamma(c, srcSlice, srcStride, srcSliceY, srcSliceH, dst, dstStride); - 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; - } + if (c->cascaded_context[0] && srcSliceY == 0 && srcSliceH == c->cascaded_context[0]->srcH) + return scale_cascaded(c, srcSlice, srcStride, srcSliceY, srcSliceH, dst, dstStride); memcpy(src2, srcSlice, sizeof(src2)); memcpy(dst2, dst, sizeof(dst2)); |