aboutsummaryrefslogtreecommitdiffstats
path: root/libswscale
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-11-12 23:53:08 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-11-12 23:59:37 +0100
commit2f6bb86f85886a7fb36e8a10e4dd8cc3a1849377 (patch)
tree6a1071e3eb94f32c103015ef17c9eeee95502110 /libswscale
parent173d51c982f1ecaa8d28cd0d8611164be0c9d36d (diff)
downloadffmpeg-2f6bb86f85886a7fb36e8a10e4dd8cc3a1849377.tar.gz
swscale/utils: support bayer input + scaling, and bayer input + any supported output
Fixes Ticket4053 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswscale')
-rw-r--r--libswscale/utils.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/libswscale/utils.c b/libswscale/utils.c
index 5904ef85fe..ab494ed79c 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1217,6 +1217,31 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
}
}
+ if (isBayer(srcFormat)) {
+ if (!unscaled ||
+ (dstFormat != AV_PIX_FMT_RGB24 && dstFormat != AV_PIX_FMT_YUV420P)) {
+ enum AVPixelFormat tmpFormat = AV_PIX_FMT_RGB24;
+
+ ret = av_image_alloc(c->cascaded_tmp, c->cascaded_tmpStride,
+ srcW, srcH, tmpFormat, 64);
+ if (ret < 0)
+ return ret;
+
+ c->cascaded_context[0] = sws_getContext(srcW, srcH, srcFormat,
+ srcW, srcH, tmpFormat,
+ flags, srcFilter, NULL, c->param);
+ if (!c->cascaded_context[0])
+ return -1;
+
+ c->cascaded_context[1] = sws_getContext(srcW, srcH, tmpFormat,
+ dstW, dstH, dstFormat,
+ flags, NULL, dstFilter, c->param);
+ if (!c->cascaded_context[1])
+ return -1;
+ return 0;
+ }
+ }
+
#define USE_MMAP (HAVE_MMAP && HAVE_MPROTECT && defined MAP_ANONYMOUS)
/* precalculate horizontal scaler filter coefficients */