diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-01-25 21:51:25 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-01-26 06:11:52 +0100 |
commit | 61884d19852163f5a4cdf993722b1c290f270300 (patch) | |
tree | 8e44b5c49cf70808d23f99ca18349af84c3cce83 /libswscale/swscale.c | |
parent | c8f25cafd2f23662bcb1e62965c0c42d6989688a (diff) | |
download | ffmpeg-61884d19852163f5a4cdf993722b1c290f270300.tar.gz |
sws: GBRP output support
Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r-- | libswscale/swscale.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c index 8227ff50b2..4d9bd89ce5 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -369,6 +369,7 @@ static int swScale(SwsContext *c, const uint8_t *src[], yuv2packed1_fn yuv2packed1 = c->yuv2packed1; yuv2packed2_fn yuv2packed2 = c->yuv2packed2; yuv2packedX_fn yuv2packedX = c->yuv2packedX; + yuv2anyX_fn yuv2anyX = c->yuv2anyX; const int chrSrcSliceY = srcSliceY >> c->chrSrcVSubSample; const int chrSrcSliceH = -((-srcSliceH) >> c->chrSrcVSubSample); int should_dither = is9_OR_10BPS(c->srcFormat) || @@ -557,7 +558,7 @@ static int swScale(SwsContext *c, const uint8_t *src[], /* hmm looks like we can't use MMX here without overwriting * this array's tail */ ff_sws_init_output_funcs(c, &yuv2plane1, &yuv2planeX, &yuv2nv12cX, - &yuv2packed1, &yuv2packed2, &yuv2packedX); + &yuv2packed1, &yuv2packed2, &yuv2packedX, &yuv2anyX); use_mmx_vfilter= 0; } @@ -630,7 +631,7 @@ static int swScale(SwsContext *c, const uint8_t *src[], dstW, c->lumDither8, 0); } } - } else { + } else if (yuv2packedX) { av_assert1(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize * 2); av_assert1(chrUSrcPtr + vChrFilterSize - 1 < chrUPixBuf + vChrBufSize * 2); if (c->yuv2packed1 && vLumFilterSize == 1 && @@ -657,6 +658,13 @@ static int swScale(SwsContext *c, const uint8_t *src[], chrUSrcPtr, chrVSrcPtr, vChrFilterSize, alpSrcPtr, dest[0], dstW, dstY); } + } else { + av_assert1(!yuv2packed1 && !yuv2packed2); + yuv2anyX(c, vLumFilter + dstY * vLumFilterSize, + lumSrcPtr, vLumFilterSize, + vChrFilter + dstY * vChrFilterSize, + chrUSrcPtr, chrVSrcPtr, vChrFilterSize, + alpSrcPtr, dest, dstW, dstY); } } } @@ -695,7 +703,7 @@ static av_cold void sws_init_swScale_c(SwsContext *c) ff_sws_init_output_funcs(c, &c->yuv2plane1, &c->yuv2planeX, &c->yuv2nv12cX, &c->yuv2packed1, - &c->yuv2packed2, &c->yuv2packedX); + &c->yuv2packed2, &c->yuv2packedX, &c->yuv2anyX); ff_sws_init_input_funcs(c); |