Output is identical Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> --- libswscale/tests/swscale.c | 41 ++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-)
diff --git a/libswscale/tests/swscale.c b/libswscale/tests/swscale.c index 19878a7877..82eb135824 100644 --- a/libswscale/tests/swscale.c +++ b/libswscale/tests/swscale.c @@ -55,6 +55,35 @@ (x) == AV_PIX_FMT_RGB32_1 || \ (x) == AV_PIX_FMT_YUVA420P) +static int sws_scale_test(struct SwsContext *c, + const uint8_t * const srcSlice[], + const int srcStride[], int srcSliceY, + int srcSliceH, uint8_t *const dst[], + const int dstStride[], int vsub1) +{ + int h = srcSliceH; + int y, i; + static int t = 0; + const uint8_t * src[4]; + t ++; + y = FFALIGN(t, 4) % FFALIGN(h, 4); + + if (y && !srcSliceY && h == srcSliceH) { + int ret = sws_scale(c, srcSlice, srcStride, 0, y, dst, dstStride); + if (ret < 0) + return ret; + srcSliceY = y; + srcSliceH -= y; + + for (i=0; i<4; i++) { + int vsub= ((i+1)&2) ? vsub1 : 0; + src[i] = srcSlice[i] + (y>>vsub) * srcStride[i]; + } + srcSlice = src; + } + return sws_scale(c, srcSlice, srcStride, srcSliceY, srcSliceH, dst, dstStride); +} + static uint64_t getSSD(const uint8_t *src1, const uint8_t *src2, int stride1, int stride2, int w, int h) { @@ -132,8 +161,8 @@ static int doTest(const uint8_t * const ref[4], int refStride[4], int w, int h, res = -1; goto end; } - sws_scale(srcContext, ref, refStride, 0, h, - (uint8_t * const *) src, srcStride); + sws_scale_test(srcContext, ref, refStride, 0, h, + (uint8_t * const *) src, srcStride, 1); sws_freeContext(srcContext); cur_srcFormat = srcFormat; @@ -180,7 +209,7 @@ static int doTest(const uint8_t * const ref[4], int refStride[4], int w, int h, flags); fflush(stdout); - sws_scale(dstContext, (const uint8_t * const*)src, srcStride, 0, srcH, dst, dstStride); + sws_scale_test(dstContext, (const uint8_t * const*)src, srcStride, 0, srcH, dst, dstStride, desc_src->log2_chroma_h); for (i = 0; i < 4 && dstStride[i]; i++) crc = av_crc(av_crc_get_table(AV_CRC_32_IEEE), crc, dst[i], @@ -212,8 +241,8 @@ static int doTest(const uint8_t * const ref[4], int refStride[4], int w, int h, res = -1; goto end; } - sws_scale(outContext, (const uint8_t * const *) dst, dstStride, 0, dstH, - out, refStride); + sws_scale_test(outContext, (const uint8_t * const *) dst, dstStride, 0, dstH, + out, refStride, desc_dst->log2_chroma_h); ssdY = getSSD(ref[0], out[0], refStride[0], refStride[0], w, h); if (hasChroma(srcFormat) && hasChroma(dstFormat)) { @@ -422,7 +451,7 @@ bad_option: for (y = 0; y < H; y++) for (x = 0; x < W * 4; x++) rgb_data[ x + y * 4 * W] = av_lfg_get(&rand); - sws_scale(sws, rgb_src, rgb_stride, 0, H / 12, (uint8_t * const *) src, stride); + sws_scale_test(sws, rgb_src, rgb_stride, 0, H / 12, (uint8_t * const *) src, stride, 0); sws_freeContext(sws); av_free(rgb_data); -- 2.17.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".