基于qt,msvc2017-64bits,ffmpeg.opengl的播放器
zhangmeng
2021-03-03 4a6d9312cc1c9d62d66c4def71246d9faae29edb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*!
 * \file      portable_endian.h
 * \license   https://creativecommons.org/publicdomain/zero/1.0/
 *
 * Original author:
 * - Mathias Panzenböck (https://gist.github.com/panzi/6856583)
 * Related resources:
 * - https://en.wikipedia.org/wiki/Endianness
 * - https://sourceforge.net/p/predef/wiki/Endianness/
 * - http://stackoverflow.com/questions/2100331/c-macro-definition-to-determine-big-endian-or-little-endian-machine
 */
 
#ifndef PORTABLE_ENDIAN_H
#define PORTABLE_ENDIAN_H
/* ************************************************************************** */
 
#if defined(__linux__) || defined(__CYGWIN__)
 
  #include <endian.h>
 
#elif defined(__APPLE__)
 
  #include <libkern/OSByteOrder.h>
 
  #define htobe16(x) OSSwapHostToBigInt16(x)
  #define htole16(x) OSSwapHostToLittleInt16(x)
  #define be16toh(x) OSSwapBigToHostInt16(x)
  #define le16toh(x) OSSwapLittleToHostInt16(x)
 
  #define htobe32(x) OSSwapHostToBigInt32(x)
  #define htole32(x) OSSwapHostToLittleInt32(x)
  #define be32toh(x) OSSwapBigToHostInt32(x)
  #define le32toh(x) OSSwapLittleToHostInt32(x)
 
  #define htobe64(x) OSSwapHostToBigInt64(x)
  #define htole64(x) OSSwapHostToLittleInt64(x)
  #define be64toh(x) OSSwapBigToHostInt64(x)
  #define le64toh(x) OSSwapLittleToHostInt64(x)
 
  #define __BYTE_ORDER      BYTE_ORDER
  #define __BIG_ENDIAN      BIG_ENDIAN
  #define __LITTLE_ENDIAN   LITTLE_ENDIAN
  #define __PDP_ENDIAN      PDP_ENDIAN
 
#elif defined(__OpenBSD__) || defined(__FreeBSD__)
 
  #include <sys/endian.h>
 
#elif defined(__NetBSD__) || defined(__DragonFly__)
 
  #include <sys/endian.h>
 
  #define be16toh(x) betoh16(x)
  #define le16toh(x) letoh16(x)
 
  #define be32toh(x) betoh32(x)
  #define le32toh(x) letoh32(x)
 
  #define be64toh(x) betoh64(x)
  #define le64toh(x) letoh64(x)
 
#elif defined(__sun)
 
  #include <sys/byteorder.h>
 
  #define htobe16(x) BE_16(x)
  #define htole16(x) LE_16(x)
  #define be16toh(x) BE_IN16(x)
  #define le16toh(x) LE_IN16(x)
 
  #define htobe32(x) BE_32(x)
  #define htole32(x) LE_32(x)
  #define be32toh(x) BE_IN32(x)
  #define le32toh(x) LE_IN32(x)
 
  #define htobe64(x) BE_64(x)
  #define htole64(x) LE_64(x)
  #define be64toh(x) BE_IN64(x)
  #define le64toh(x) LE_IN64(x)
 
#elif defined(_WIN16) || defined(_WIN32) || defined(_WIN64)
 
  #include <winsock2.h>
 
  #ifdef __MINGW32__
    #include <sys/param.h>
  #elif _MSC_VER
    // Windows doesn't provide any way to detect endianness through macros.
    // We force little endian because while there may be some NT kernel version
    // running on big endian (?), there is no known version of BE Windows...
    #define LITTLE_ENDIAN   1234
    #define BIG_ENDIAN      4321
    #define PDP_ENDIAN      3412
    #define BYTE_ORDER      LITTLE_ENDIAN
  #endif
 
  #define htobe16(x) htons(x)
  #define htole16(x) (x)
  #define be16toh(x) ntohs(x)
  #define le16toh(x) (x)
 
  #define htobe32(x) htonl(x)
  #define htole32(x) (x)
  #define be32toh(x) ntohl(x)
  #define le32toh(x) (x)
 
  #define htobe64(x) htonll(x)
  #define htole64(x) (x)
  #define be64toh(x) ntohll(x)
  #define le64toh(x) (x)
 
  #define __BYTE_ORDER      BYTE_ORDER
  #define __BIG_ENDIAN      BIG_ENDIAN
  #define __LITTLE_ENDIAN   LITTLE_ENDIAN
  #define __PDP_ENDIAN      PDP_ENDIAN
 
#else
 
  #error platform not supported
 
#endif
 
/* ************************************************************************** */
#endif // PORTABLE_ENDIAN_H