Mercurial > mplayer.hg
changeset 28977:6601bf7365d5
YUVA420P is now supported as output format
author | sdrik |
---|---|
date | Fri, 20 Mar 2009 14:16:24 +0000 |
parents | 602c77c53923 |
children | 3aa3a63b8a83 |
files | libswscale/swscale.c libswscale/swscale_template.c |
diffstat | 2 files changed, 13 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/libswscale/swscale.c Fri Mar 20 14:15:14 2009 +0000 +++ b/libswscale/swscale.c Fri Mar 20 14:16:24 2009 +0000 @@ -137,6 +137,7 @@ ) #define isSupportedOut(x) ( \ (x)==PIX_FMT_YUV420P \ + || (x)==PIX_FMT_YUVA420P \ || (x)==PIX_FMT_YUYV422 \ || (x)==PIX_FMT_UYVY422 \ || (x)==PIX_FMT_YUV444P \ @@ -2068,7 +2069,7 @@ } } - if (c->dstFormat==PIX_FMT_YUV420P){ + if (c->dstFormat==PIX_FMT_YUV420P || c->dstFormat==PIX_FMT_YUVA420P){ planar2x(src[1], dst[1], c->chrSrcW, c->chrSrcH, srcStride[1], dstStride[1]); planar2x(src[2], dst[2], c->chrSrcW, c->chrSrcH, srcStride[2], dstStride[2]); }else{ @@ -2110,14 +2111,14 @@ int srcSliceH, uint8_t* dst[], int dstStride[]) { int plane; - for (plane=0; plane<3; plane++) + for (plane=0; plane<4; plane++) { - int length= plane==0 ? c->srcW : -((-c->srcW )>>c->chrDstHSubSample); - int y= plane==0 ? srcSliceY: -((-srcSliceY)>>c->chrDstVSubSample); - int height= plane==0 ? srcSliceH: -((-srcSliceH)>>c->chrDstVSubSample); + int length= (plane==0 || plane==3) ? c->srcW : -((-c->srcW )>>c->chrDstHSubSample); + int y= (plane==0 || plane==3) ? srcSliceY: -((-srcSliceY)>>c->chrDstVSubSample); + int height= (plane==0 || plane==3) ? srcSliceH: -((-srcSliceH)>>c->chrDstVSubSample); if (dst[plane] && !src[plane]) - fillPlane(dst[plane], dstStride[plane], length, height, y, 128); + fillPlane(dst[plane], dstStride[plane], length, height, y, (plane==3) ? 255 : 128); else { if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0) @@ -2519,13 +2520,13 @@ c->swScale= ff_yuv2rgb_get_func_ptr(c); } - if (srcFormat==PIX_FMT_YUV410P && dstFormat==PIX_FMT_YUV420P && !(flags & SWS_BITEXACT)) + if (srcFormat==PIX_FMT_YUV410P && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_BITEXACT)) { c->swScale= yvu9toyv12Wrapper; } /* bgr24toYV12 */ - if (srcFormat==PIX_FMT_BGR24 && dstFormat==PIX_FMT_YUV420P && !(flags & SWS_ACCURATE_RND)) + if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND)) c->swScale= bgr24toyv12Wrapper; /* RGB/BGR -> RGB/BGR (no dither needed forms) */ @@ -2597,6 +2598,7 @@ /* simple copy */ if ( srcFormat == dstFormat || (srcFormat == PIX_FMT_YUVA420P && dstFormat == PIX_FMT_YUV420P) + || (srcFormat == PIX_FMT_YUV420P && dstFormat == PIX_FMT_YUVA420P) || (isPlanarYUV(srcFormat) && isGray(dstFormat)) || (isPlanarYUV(dstFormat) && isGray(srcFormat))) {
--- a/libswscale/swscale_template.c Fri Mar 20 14:15:14 2009 +0000 +++ b/libswscale/swscale_template.c Fri Mar 20 14:16:24 2009 +0000 @@ -3206,6 +3206,9 @@ } } + if ((dstFormat == PIX_FMT_YUVA420P) && !alpPixBuf) + fillPlane(dst[3], dstStride[3], dstW, dstY-lastDstY, lastDstY, 255); + #if HAVE_MMX __asm__ volatile(SFENCE:::"memory"); __asm__ volatile(EMMS:::"memory");