aboutsummaryrefslogtreecommitdiffstats
path: root/libswscale/swscale.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-05-19 11:47:42 +0200
committerAnton Khirnov <anton@khirnov.net>2021-07-03 15:30:34 +0200
commitf136493d03c2bca7518fbcbc9b0a1f3abd27d9d4 (patch)
tree7949a3cb6d190ef00a5daf9498bdd7e2c9ed4b86 /libswscale/swscale.c
parenta2254aedc9042af6b36e4e69129fe38e02c85d4c (diff)
downloadffmpeg-f136493d03c2bca7518fbcbc9b0a1f3abd27d9d4.tar.gz
sws: factor out cascaded scaling
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r--libswscale/swscale.c29
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));