annotate libmpdvdkit2/bswap.h @ 18693:a4a6b2cf5022

Do not use border for bicubic filter helper texture, since it will cause ATI cards to switch to software mode and be unusable. Double texture size to avoid this causing artefacts. Note: yuv=6 will not be changed, so it will stay unusable with ATI cards unless ATI starts supporting this.
author reimar
date Tue, 13 Jun 2006 19:55:20 +0000
parents 483e955893b8
children 0783dd397f74
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7029
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
1 #ifndef BSWAP_H_INCLUDED
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
2 #define BSWAP_H_INCLUDED
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
3
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
4 /*
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
5 * Copyright (C) 2000, 2001 Billy Biggs <vektor@dumbterm.net>,
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
6 * Håkan Hjort <d95hjort@dtek.chalmers.se>
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
7 *
14938
25df9508f9a8 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 7033
diff changeset
8 * Modified for use with MPlayer, changes contained in libdvdread_changes.diff.
25df9508f9a8 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 7033
diff changeset
9 * detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
25df9508f9a8 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 7033
diff changeset
10 * $Id$
25df9508f9a8 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 7033
diff changeset
11 *
7029
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
15 * (at your option) any later version.
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
16 *
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
20 * GNU General Public License for more details.
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
21 *
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
25 */
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
26
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
27 #if defined(WORDS_BIGENDIAN)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
28 /* All bigendian systems are fine, just ignore the swaps. */
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
29 #define B2N_16(x) (void)(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
30 #define B2N_32(x) (void)(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
31 #define B2N_64(x) (void)(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
32
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
33 #else
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
34
15874
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
35 /* For __FreeBSD_version */
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
36 #if defined(HAVE_SYS_PARAM_H)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
37 #include <sys/param.h>
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
38 #endif
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
39
7029
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
40 #if defined(__linux__)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
41 #include <byteswap.h>
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
42 #define B2N_16(x) x = bswap_16(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
43 #define B2N_32(x) x = bswap_32(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
44 #define B2N_64(x) x = bswap_64(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
45
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
46 #elif defined(__NetBSD__)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
47 #include <sys/endian.h>
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
48 #define B2N_16(x) BE16TOH(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
49 #define B2N_32(x) BE32TOH(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
50 #define B2N_64(x) BE64TOH(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
51
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
52 #elif defined(__OpenBSD__)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
53 #include <sys/endian.h>
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
54 #define B2N_16(x) x = swap16(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
55 #define B2N_32(x) x = swap32(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
56 #define B2N_64(x) x = swap64(x)
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
57
15874
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
58 #elif defined(__FreeBSD__) && __FreeBSD_version >= 470000
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
59 #include <sys/endian.h>
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
60 #define B2N_16(x) x = be16toh(x)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
61 #define B2N_32(x) x = be32toh(x)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
62 #define B2N_64(x) x = be64toh(x)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
63
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
64 #elif defined(__DragonFly__)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
65 #include <sys/endian.h>
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
66 #define B2N_16(x) x = be16toh(x)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
67 #define B2N_32(x) x = be32toh(x)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
68 #define B2N_64(x) x = be64toh(x)
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
69
7033
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
70 #elif defined(ARCH_X86)
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
71 inline static unsigned short bswap_16(unsigned short x)
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
72 {
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
73 __asm("xchgb %b0,%h0" :
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
74 "=q" (x) :
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
75 "0" (x));
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
76 return x;
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
77 }
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
78 #define B2N_16(x) x = bswap_16(x)
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
79
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
80 inline static unsigned int bswap_32(unsigned int x)
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
81 {
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
82 __asm(
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
83 #if __CPU__ > 386
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
84 "bswap %0":
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
85 "=r" (x) :
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
86 #else
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
87 "xchgb %b0,%h0\n"
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
88 " rorl $16,%0\n"
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
89 " xchgb %b0,%h0":
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
90 "=q" (x) :
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
91 #endif
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
92 "0" (x));
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
93 return x;
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
94 }
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
95 #define B2N_32(x) x = bswap_32(x)
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
96
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
97 inline static unsigned long long int bswap_64(unsigned long long int x)
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
98 {
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
99 register union { __extension__ uint64_t __ll;
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
100 uint32_t __l[2]; } __x;
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
101 asm("xchgl %0,%1":
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
102 "=r"(__x.__l[0]),"=r"(__x.__l[1]):
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
103 "0"(bswap_32((unsigned long)x)),"1"(bswap_32((unsigned long)(x>>32))));
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
104 return __x.__ll;
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
105 }
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
106 #define B2N_64(x) x = bswap_64(x)
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
107
7029
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
108 /* This is a slow but portable implementation, it has multiple evaluation
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
109 * problems so beware.
15874
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
110 * Old FreeBSD's and Solaris don't have <byteswap.h> or any other such
7029
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
111 * functionality!
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
112 */
15874
483e955893b8 update libdvdread to v0.9.4
aurel
parents: 15566
diff changeset
113
7033
596919e4f601 apply mplayer-specific patches
arpi
parents: 7029
diff changeset
114 #elif defined(__FreeBSD__) || defined(__sun) || defined(__bsdi__) || defined(__CYGWIN__)
7029
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
115 #define B2N_16(x) \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
116 x = ((((x) & 0xff00) >> 8) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
117 (((x) & 0x00ff) << 8))
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
118 #define B2N_32(x) \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
119 x = ((((x) & 0xff000000) >> 24) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
120 (((x) & 0x00ff0000) >> 8) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
121 (((x) & 0x0000ff00) << 8) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
122 (((x) & 0x000000ff) << 24))
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
123 #define B2N_64(x) \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
124 x = ((((x) & 0xff00000000000000) >> 56) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
125 (((x) & 0x00ff000000000000) >> 40) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
126 (((x) & 0x0000ff0000000000) >> 24) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
127 (((x) & 0x000000ff00000000) >> 8) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
128 (((x) & 0x00000000ff000000) << 8) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
129 (((x) & 0x0000000000ff0000) << 24) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
130 (((x) & 0x000000000000ff00) << 40) | \
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
131 (((x) & 0x00000000000000ff) << 56))
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
132
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
133 #else
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
134
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
135 /* If there isn't a header provided with your system with this functionality
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
136 * add the relevant || define( ) to the portable implementation above.
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
137 */
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
138 #error "You need to add endian swap macros for you're system"
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
139
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
140 #endif
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
141
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
142 #endif /* WORDS_BIGENDIAN */
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
143
9db58ffbd73c importing libdvdread 0.9.3 files
arpi
parents:
diff changeset
144 #endif /* BSWAP_H_INCLUDED */