summaryrefslogtreecommitdiffstats
path: root/libswscale/swscale.c
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-09-09 23:30:06 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-09-09 23:30:06 +0000
commit0c6d92bfda120d2793e03b588e0a96c5a6f9d769 (patch)
tree1b5a8f3d9ef9433b56261f2392770c0e36a3a764 /libswscale/swscale.c
parent593bf6af8e09d77db9faa6e5fc05119ab9c65126 (diff)
downloadmpv-0c6d92bfda120d2793e03b588e0a96c5a6f9d769.tar.bz2
mpv-0c6d92bfda120d2793e03b588e0a96c5a6f9d769.tar.xz
Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
and does not throw half the chroma away. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27561 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r--libswscale/swscale.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 44069cd408..9dfe1f8e7c 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -237,6 +237,20 @@ DECLARE_ALIGNED(8, const uint64_t, ff_bgr2VCoeff) = 0x00003831D0E6F6EAULL;
DECLARE_ALIGNED(8, const uint64_t, ff_bgr2YOffset) = 0x1010101010101010ULL;
DECLARE_ALIGNED(8, const uint64_t, ff_bgr2UVOffset) = 0x8080808080808080ULL;
DECLARE_ALIGNED(8, const uint64_t, ff_w1111) = 0x0001000100010001ULL;
+
+DECLARE_ALIGNED(8, const uint64_t, ff_bgr24toY1Coeff) = 0x0C88000040870C88ULL;
+DECLARE_ALIGNED(8, const uint64_t, ff_bgr24toY2Coeff) = 0x20DE4087000020DEULL;
+DECLARE_ALIGNED(8, const uint64_t, ff_rgb24toY1Coeff) = 0x20DE0000408720DEULL;
+DECLARE_ALIGNED(8, const uint64_t, ff_rgb24toY2Coeff) = 0x0C88408700000C88ULL;
+DECLARE_ALIGNED(8, const uint64_t, ff_bgr24toYOffset) = 0x0008400000084000ULL;
+
+DECLARE_ALIGNED(8, const uint64_t, ff_bgr24toUV[2][4]) = {
+ {0x38380000DAC83838ULL, 0xECFFDAC80000ECFFULL, 0xF6E40000D0E3F6E4ULL, 0x3838D0E300003838ULL},
+ {0xECFF0000DAC8ECFFULL, 0x3838DAC800003838ULL, 0x38380000D0E33838ULL, 0xF6E4D0E30000F6E4ULL},
+};
+
+DECLARE_ALIGNED(8, const uint64_t, ff_bgr24toUVOffset)= 0x0040400000404000ULL;
+
#endif /* defined(ARCH_X86) */
// clipping helper table for C implementations:
@@ -2201,7 +2215,8 @@ SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH
if ((isBGR(srcFormat) || isRGB(srcFormat)) && !(flags&SWS_FULL_CHR_H_INP)
&& srcFormat!=PIX_FMT_RGB8 && srcFormat!=PIX_FMT_BGR8
&& srcFormat!=PIX_FMT_RGB4 && srcFormat!=PIX_FMT_BGR4
- && srcFormat!=PIX_FMT_RGB4_BYTE && srcFormat!=PIX_FMT_BGR4_BYTE)
+ && srcFormat!=PIX_FMT_RGB4_BYTE && srcFormat!=PIX_FMT_BGR4_BYTE
+ && srcFormat!=PIX_FMT_BGR24 && srcFormat!=PIX_FMT_RGB24)
c->chrSrcHSubSample=1;
if (param){