summaryrefslogtreecommitdiff
path: root/libswscale/swscale.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-10-08 02:05:54 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-10-11 05:05:17 +0200
commitfba894615d694584057adb0ddb4d609486cad807 (patch)
tree85a63b0b7b8b5fca93c17c6bfcce791ae1ca98bb /libswscale/swscale.c
parentb8a55994f0cbfb753cd2b175e7aff74263407995 (diff)
swscale: support internal scaler cascades
Fixes Ticket3170 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r--libswscale/swscale.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index e54d4486e9..16a31cee40 100644
--- a/libswscale/swscale.c
+++ b/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"
@@ -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));