portab.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef _PORTAB_H_
  2. #define _PORTAB_H_
  3. #if defined(WIN32)
  4. #include <windows.h>
  5. #define DEBUGCBR(A,B,C) { char tmp[100]; wsprintf(tmp, "CBR: frame: %i, quant: %i, deviation: %in", (A), (B), (C)); OutputDebugString(tmp); }
  6. #ifdef _DEBUG
  7. #define DEBUG(S) OutputDebugString((S));
  8. #define DEBUG1(S,I) { char tmp[100]; wsprintf(tmp, "%s %in", (S), (I)); OutputDebugString(tmp); }
  9. #define DEBUG2(X,A,B) { char tmp[100]; wsprintf(tmp, "%s %i %in", (X), (A), (B)); OutputDebugString(tmp); }
  10. #define DEBUG3(X,A,B,C){ char tmp[1000]; wsprintf(tmp,"%s %i %i %i",(X),(A), (B), (C)); OutputDebugString(tmp); }
  11. #define DEBUG8(X,A,B,C,D,E,F,G,H){ char tmp[1000]; wsprintf(tmp,"%s %i %i %i %i %i %i %i %i",(X),(A),(B),(C),(D),(E),(F),(G),(H)); OutputDebugString(tmp); }
  12. #else
  13. #define DEBUG(S)
  14. #define DEBUG1(S,I)
  15. #define DEBUG2(X,A,B)
  16. #define DEBUG3(X,A,B,C)
  17. #define DEBUG8(X,A,B,C,D,E,F,G,H)
  18. #endif
  19. #define int8_t char
  20. #define uint8_t unsigned char
  21. #define int16_t short
  22. #define uint16_t unsigned short
  23. #define int32_t int
  24. #define uint32_t unsigned int
  25. #define int64_t __int64
  26. #define uint64_t unsigned __int64
  27. #define EMMS() __asm {emms}
  28. #define CACHE_LINE  16
  29. #if _MSC_VER <= 1200
  30. #define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) 
  31. type name##_storage[(sizex)*(sizey)+(alignment)-1]; 
  32. type * name = (type *) (((int32_t) name##_storage+(alignment - 1)) & ~((int32_t)(alignment)-1))
  33. #else
  34. #define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) 
  35. __declspec(align(alignment)) type name[(sizex)*(sizey)]
  36. #endif
  37. // needed for bitstream.h
  38. #define BSWAP(a) __asm mov eax,a __asm bswap eax __asm mov a, eax
  39. // needed for timer.c
  40. static __inline int64_t read_counter() {
  41. int64_t ts;
  42. uint32_t ts1, ts2;
  43. __asm {
  44. rdtsc
  45. mov  ts1, eax
  46. mov  ts2, edx
  47. }
  48. ts = ((uint64_t) ts2 << 32) | ((uint64_t) ts1);
  49.     
  50. return ts;
  51. }
  52. #elif defined(LINUX) || defined(__linux__) || defined(DJGPP) || defined(__bsdi__) || defined(__FreeBSD__)
  53. #ifdef _DEBUG
  54. #include <stdio.h>
  55. #define DEBUG_WHERE               stdout
  56. #define DEBUG(S)                  fprintf(DEBUG_WHERE, "%sn", (S));
  57. #define DEBUG1(S,I)               fprintf(DEBUG_WHERE, "%s %in", (S), (I))
  58. #define DEBUG2(S,A,B)             fprintf(DEBUG_WHERE, "%s%i=%in", (S), (A), (B))
  59. #define DEBUG3(S,A,B,C)           fprintf(DEBUG_WHERE, "%s %i %x %xn", (S), (A), (B), (C))
  60. #define DEBUG8(S,A,B,C,D,E,F,G,H)
  61. #define DEBUGCBR(A,B,C)           fprintf(DEBUG_WHERE, "CBR: frame: %i, quant: %i, deviation: %in", (A), (B), (C))
  62. #else
  63. #define DEBUG(S)
  64. #define DEBUG1(S,I)
  65. #define DEBUG2(X,A,B)
  66. #define DEBUG3(X,A,B,C)
  67. #define DEBUG8(X,A,B,C,D,E,F,G,H)
  68. #define DEBUGCBR(A,B,C)
  69. #endif
  70. #define CACHE_LINE  16
  71. #if defined(LINUX) || defined(__linux__) || defined(__bsdi__) || defined(__FreeBSD__)
  72. #include "systems.h"
  73. #ifdef HAVE_STDINT_H
  74. #include <stdint.h>
  75. #endif
  76. #define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) 
  77. type name##_storage[(sizex)*(sizey)+(alignment)-1]; 
  78. type * name = (type *) (((int32_t) name##_storage+(alignment - 1)) & ~((int32_t)(alignment)-1))
  79. #else
  80. #define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) 
  81. __attribute__ ((__aligned__(CACHE_LINE))) type name[(sizex)*(sizey)]
  82. #define int8_t   char
  83. #define uint8_t  unsigned char
  84. #define int16_t  short
  85. #define uint16_t unsigned short
  86. #define int32_t  int
  87. #define uint32_t unsigned int
  88. #define int64_t  long long
  89. #define uint64_t unsigned long long
  90. #endif
  91. // needed for bitstream.h
  92. #ifdef ARCH_PPC
  93. #define BSWAP(a) __asm__ __volatile__ ( "lwbrx %0,0,%1; eieio" : "=r" (a) : 
  94. "r" (&(a)), "m" (a));
  95. #define EMMS()
  96. static __inline unsigned long get_tbl(void) {
  97. unsigned long tbl;
  98. asm volatile("mftb %0" : "=r" (tbl));
  99. return tbl;
  100. }
  101. static __inline unsigned long get_tbu(void) {
  102. unsigned long tbl;
  103. asm volatile("mftbu %0" : "=r" (tbl));
  104. return tbl;
  105. }
  106. static __inline int64_t read_counter() {
  107. unsigned long tb, tu;
  108. do {
  109. tu = get_tbu();
  110. tb = get_tbl();
  111. } while(tb != get_tbl());
  112. return (((int64_t)tu) << 32) | (int64_t)tb;
  113. }
  114. #else
  115. #if defined(__i386__)
  116. #define BSWAP(a) __asm__ ( "bswapl %0n" : "=r" (a) : "0" (a) )
  117. #define EMMS() __asm__("emmsnt")
  118. // needed for timer.c
  119. static __inline int64_t read_counter() {
  120.     int64_t ts;
  121.     uint32_t ts1, ts2;
  122.     __asm__ __volatile__("rdtscnt":"=a"(ts1), "=d"(ts2));
  123.     ts = ((uint64_t) ts2 << 32) | ((uint64_t) ts1);
  124.     return ts;
  125. }
  126. #else
  127. #define BSWAP(a) 
  128.  ((a) = ( ((a)&0xff)<<24) | (((a)&0xff00)<<8) | (((a)>>8)&0xff00) | (((a)>>24)&0xff))
  129. #define EMSS()
  130. static __inline int64_t read_counter() {
  131. return 0;
  132. }
  133. #endif
  134. #endif
  135. #else // OTHER OS
  136. #define DEBUG(S)
  137. #define DEBUG1(S,I)
  138. #define DEBUG2(X,A,B)
  139. #define DEBUG3(X,A,B,C)
  140. #define DEBUG8(X,A,B,C,D,E,F,G,H)
  141. #define DEBUGCBR(A,B,C)
  142. #define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) 
  143. type name##_storage[(sizex)*(sizey)+(alignment)-1]; 
  144. type * name = (type *) (((int32_t) name##_storage+(alignment - 1)) & ~((int32_t)(alignment)-1))
  145. #include <inttypes.h>
  146. #define EMMS()
  147. // needed for bitstream.h
  148. #define BSWAP(a) 
  149.  ((a) = ( ((a)&0xff)<<24) | (((a)&0xff00)<<8) | (((a)>>8)&0xff00) | (((a)>>24)&0xff))
  150. // rdtsc command most likely not supported,
  151. // so just dummy code here
  152. static __inline int64_t read_counter() {
  153. return 0;
  154. }
  155. #define CACHE_LINE  16
  156. #define CACHE_ALIGN
  157. #endif
  158. #endif // _PORTAB_H_