1
mirror of https://github.com/mpv-player/mpv synced 2024-12-24 07:33:46 +01:00
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30413 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
ramiro 2010-01-24 03:02:40 +00:00
parent 0ae7ed631b
commit c9c95b9046

View File

@ -1664,110 +1664,110 @@ void ff_get_unscaled_swscale(SwsContext *c)
&& (fmt_depth(dstFormat))<24 && (fmt_depth(dstFormat))<24
&& ((fmt_depth(dstFormat))<(fmt_depth(srcFormat)) || (!(isRGB(srcFormat) || isBGR(srcFormat)))); && ((fmt_depth(dstFormat))<(fmt_depth(srcFormat)) || (!(isRGB(srcFormat) || isBGR(srcFormat))));
/* yv12_to_nv12 */ /* yv12_to_nv12 */
if ((srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21)) { if ((srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21)) {
c->swScale= PlanarToNV12Wrapper; c->swScale= PlanarToNV12Wrapper;
} }
/* yuv2bgr */ /* yuv2bgr */
if ((srcFormat==PIX_FMT_YUV420P || srcFormat==PIX_FMT_YUV422P || srcFormat==PIX_FMT_YUVA420P) && (isBGR(dstFormat) || isRGB(dstFormat)) if ((srcFormat==PIX_FMT_YUV420P || srcFormat==PIX_FMT_YUV422P || srcFormat==PIX_FMT_YUVA420P) && (isBGR(dstFormat) || isRGB(dstFormat))
&& !(flags & SWS_ACCURATE_RND) && !(dstH&1)) { && !(flags & SWS_ACCURATE_RND) && !(dstH&1)) {
c->swScale= ff_yuv2rgb_get_func_ptr(c); c->swScale= ff_yuv2rgb_get_func_ptr(c);
} }
if (srcFormat==PIX_FMT_YUV410P && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_BITEXACT)) { if (srcFormat==PIX_FMT_YUV410P && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_BITEXACT)) {
c->swScale= yvu9toyv12Wrapper; c->swScale= yvu9toyv12Wrapper;
} }
/* bgr24toYV12 */ /* bgr24toYV12 */
if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND)) if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND))
c->swScale= bgr24toyv12Wrapper; c->swScale= bgr24toyv12Wrapper;
/* RGB/BGR -> RGB/BGR (no dither needed forms) */ /* RGB/BGR -> RGB/BGR (no dither needed forms) */
if ( (isBGR(srcFormat) || isRGB(srcFormat)) if ( (isBGR(srcFormat) || isRGB(srcFormat))
&& (isBGR(dstFormat) || isRGB(dstFormat)) && (isBGR(dstFormat) || isRGB(dstFormat))
&& srcFormat != PIX_FMT_BGR8 && dstFormat != PIX_FMT_BGR8 && srcFormat != PIX_FMT_BGR8 && dstFormat != PIX_FMT_BGR8
&& srcFormat != PIX_FMT_RGB8 && dstFormat != PIX_FMT_RGB8 && srcFormat != PIX_FMT_RGB8 && dstFormat != PIX_FMT_RGB8
&& srcFormat != PIX_FMT_BGR4 && dstFormat != PIX_FMT_BGR4 && srcFormat != PIX_FMT_BGR4 && dstFormat != PIX_FMT_BGR4
&& srcFormat != PIX_FMT_RGB4 && dstFormat != PIX_FMT_RGB4 && srcFormat != PIX_FMT_RGB4 && dstFormat != PIX_FMT_RGB4
&& srcFormat != PIX_FMT_BGR4_BYTE && dstFormat != PIX_FMT_BGR4_BYTE && srcFormat != PIX_FMT_BGR4_BYTE && dstFormat != PIX_FMT_BGR4_BYTE
&& srcFormat != PIX_FMT_RGB4_BYTE && dstFormat != PIX_FMT_RGB4_BYTE && srcFormat != PIX_FMT_RGB4_BYTE && dstFormat != PIX_FMT_RGB4_BYTE
&& srcFormat != PIX_FMT_MONOBLACK && dstFormat != PIX_FMT_MONOBLACK && srcFormat != PIX_FMT_MONOBLACK && dstFormat != PIX_FMT_MONOBLACK
&& srcFormat != PIX_FMT_MONOWHITE && dstFormat != PIX_FMT_MONOWHITE && srcFormat != PIX_FMT_MONOWHITE && dstFormat != PIX_FMT_MONOWHITE
&& dstFormat != PIX_FMT_RGB32_1 && dstFormat != PIX_FMT_RGB32_1
&& dstFormat != PIX_FMT_BGR32_1 && dstFormat != PIX_FMT_BGR32_1
&& srcFormat != PIX_FMT_RGB48LE && dstFormat != PIX_FMT_RGB48LE && srcFormat != PIX_FMT_RGB48LE && dstFormat != PIX_FMT_RGB48LE
&& srcFormat != PIX_FMT_RGB48BE && dstFormat != PIX_FMT_RGB48BE && srcFormat != PIX_FMT_RGB48BE && dstFormat != PIX_FMT_RGB48BE
&& (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)))) && (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT))))
c->swScale= rgb2rgbWrapper; c->swScale= rgb2rgbWrapper;
if ((usePal(srcFormat) && ( if ((usePal(srcFormat) && (
dstFormat == PIX_FMT_RGB32 || dstFormat == PIX_FMT_RGB32 ||
dstFormat == PIX_FMT_RGB32_1 || dstFormat == PIX_FMT_RGB32_1 ||
dstFormat == PIX_FMT_RGB24 || dstFormat == PIX_FMT_RGB24 ||
dstFormat == PIX_FMT_BGR32 || dstFormat == PIX_FMT_BGR32 ||
dstFormat == PIX_FMT_BGR32_1 || dstFormat == PIX_FMT_BGR32_1 ||
dstFormat == PIX_FMT_BGR24))) dstFormat == PIX_FMT_BGR24)))
c->swScale= pal2rgbWrapper; c->swScale= pal2rgbWrapper;
if (srcFormat == PIX_FMT_YUV422P) { if (srcFormat == PIX_FMT_YUV422P) {
if (dstFormat == PIX_FMT_YUYV422)
c->swScale= YUV422PToYuy2Wrapper;
else if (dstFormat == PIX_FMT_UYVY422)
c->swScale= YUV422PToUyvyWrapper;
}
/* LQ converters if -sws 0 or -sws 4*/
if (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)) {
/* yv12_to_yuy2 */
if (srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) {
if (dstFormat == PIX_FMT_YUYV422) if (dstFormat == PIX_FMT_YUYV422)
c->swScale= YUV422PToYuy2Wrapper; c->swScale= PlanarToYuy2Wrapper;
else if (dstFormat == PIX_FMT_UYVY422) else if (dstFormat == PIX_FMT_UYVY422)
c->swScale= YUV422PToUyvyWrapper; c->swScale= PlanarToUyvyWrapper;
} }
}
/* LQ converters if -sws 0 or -sws 4*/ if(srcFormat == PIX_FMT_YUYV422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P))
if (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)) { c->swScale= YUYV2YUV420Wrapper;
/* yv12_to_yuy2 */ if(srcFormat == PIX_FMT_UYVY422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P))
if (srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) { c->swScale= UYVY2YUV420Wrapper;
if (dstFormat == PIX_FMT_YUYV422) if(srcFormat == PIX_FMT_YUYV422 && dstFormat == PIX_FMT_YUV422P)
c->swScale= PlanarToYuy2Wrapper; c->swScale= YUYV2YUV422Wrapper;
else if (dstFormat == PIX_FMT_UYVY422) if(srcFormat == PIX_FMT_UYVY422 && dstFormat == PIX_FMT_YUV422P)
c->swScale= PlanarToUyvyWrapper; c->swScale= UYVY2YUV422Wrapper;
}
}
if(srcFormat == PIX_FMT_YUYV422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P))
c->swScale= YUYV2YUV420Wrapper;
if(srcFormat == PIX_FMT_UYVY422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P))
c->swScale= UYVY2YUV420Wrapper;
if(srcFormat == PIX_FMT_YUYV422 && dstFormat == PIX_FMT_YUV422P)
c->swScale= YUYV2YUV422Wrapper;
if(srcFormat == PIX_FMT_UYVY422 && dstFormat == PIX_FMT_YUV422P)
c->swScale= UYVY2YUV422Wrapper;
#ifdef COMPILE_ALTIVEC #ifdef COMPILE_ALTIVEC
if ((c->flags & SWS_CPU_CAPS_ALTIVEC) && if ((c->flags & SWS_CPU_CAPS_ALTIVEC) &&
!(c->flags & SWS_BITEXACT) && !(c->flags & SWS_BITEXACT) &&
srcFormat == PIX_FMT_YUV420P) { srcFormat == PIX_FMT_YUV420P) {
// unscaled YV12 -> packed YUV, we want speed // unscaled YV12 -> packed YUV, we want speed
if (dstFormat == PIX_FMT_YUYV422) if (dstFormat == PIX_FMT_YUYV422)
c->swScale= yv12toyuy2_unscaled_altivec; c->swScale= yv12toyuy2_unscaled_altivec;
else if (dstFormat == PIX_FMT_UYVY422) else if (dstFormat == PIX_FMT_UYVY422)
c->swScale= yv12touyvy_unscaled_altivec; c->swScale= yv12touyvy_unscaled_altivec;
} }
#endif #endif
/* simple copy */ /* simple copy */
if ( srcFormat == dstFormat if ( srcFormat == dstFormat
|| (srcFormat == PIX_FMT_YUVA420P && dstFormat == PIX_FMT_YUV420P) || (srcFormat == PIX_FMT_YUVA420P && dstFormat == PIX_FMT_YUV420P)
|| (srcFormat == PIX_FMT_YUV420P && dstFormat == PIX_FMT_YUVA420P) || (srcFormat == PIX_FMT_YUV420P && dstFormat == PIX_FMT_YUVA420P)
|| (isPlanarYUV(srcFormat) && isGray(dstFormat)) || (isPlanarYUV(srcFormat) && isGray(dstFormat))
|| (isPlanarYUV(dstFormat) && isGray(srcFormat)) || (isPlanarYUV(dstFormat) && isGray(srcFormat))
|| (isGray(dstFormat) && isGray(srcFormat)) || (isGray(dstFormat) && isGray(srcFormat))
|| (isPlanarYUV(srcFormat) && isPlanarYUV(dstFormat) || (isPlanarYUV(srcFormat) && isPlanarYUV(dstFormat)
&& c->chrDstHSubSample == c->chrSrcHSubSample && c->chrDstHSubSample == c->chrSrcHSubSample
&& c->chrDstVSubSample == c->chrSrcVSubSample && c->chrDstVSubSample == c->chrSrcVSubSample
&& dstFormat != PIX_FMT_NV12 && dstFormat != PIX_FMT_NV21 && dstFormat != PIX_FMT_NV12 && dstFormat != PIX_FMT_NV21
&& srcFormat != PIX_FMT_NV12 && srcFormat != PIX_FMT_NV21)) && srcFormat != PIX_FMT_NV12 && srcFormat != PIX_FMT_NV21))
{ {
if (isPacked(c->srcFormat)) if (isPacked(c->srcFormat))
c->swScale= packedCopy; c->swScale= packedCopy;
else /* Planar YUV or gray */ else /* Planar YUV or gray */
c->swScale= planarCopy; c->swScale= planarCopy;
} }
#if ARCH_BFIN #if ARCH_BFIN
if (flags & SWS_CPU_CAPS_BFIN) if (flags & SWS_CPU_CAPS_BFIN)
ff_bfin_get_unscaled_swscale (c); ff_bfin_get_unscaled_swscale (c);
#endif #endif
} }