basic_prediction.c
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:5k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #include "basic_prediction.h"
  2. void CopyBlock(unsigned char * Src, unsigned char * Dst, int Stride)
  3. {
  4. int dy;
  5. #ifdef BIG_ENDIAN
  6. char *lpSrc = (char *) Src;
  7. char *lpDst = (char *) Dst;
  8. int lpStride = Stride;
  9. for (dy = 0; dy < 8; dy++) {
  10. lpDst[0] = lpSrc[0];
  11. lpDst[1] = lpSrc[1];
  12. lpDst[2] = lpSrc[2];
  13. lpDst[3] = lpSrc[3];
  14. lpDst[4] = lpSrc[4];
  15. lpDst[5] = lpSrc[5];
  16. lpDst[6] = lpSrc[6];
  17. lpDst[7] = lpSrc[7];
  18. lpSrc += lpStride;
  19. lpDst += lpStride;
  20. }
  21. #else
  22. long *lpSrc = (long *) Src;
  23. long *lpDst = (long *) Dst;
  24. int lpStride = Stride >> 2;
  25. for (dy = 0; dy < 8; dy++) {
  26. lpDst[0] = lpSrc[0];
  27. lpDst[1] = lpSrc[1];
  28. lpSrc += lpStride;
  29. lpDst += lpStride;
  30. }
  31. #endif
  32. }
  33. /**/
  34. void CopyBlockHor(unsigned char * Src, unsigned char * Dst, int Stride)
  35. {
  36. int dy, dx;
  37. for (dy = 0; dy < 8; dy++) {
  38. for (dx = 0; dx < 8; dx++) {
  39. Dst[dx] = (Src[dx] + Src[dx+1]+1) >> 1;
  40. }
  41. Src += Stride;
  42. Dst += Stride;
  43. }
  44. }
  45. /**/
  46. void CopyBlockVer(unsigned char * Src, unsigned char * Dst, int Stride)
  47. {
  48. int dy, dx;
  49. for (dy = 0; dy < 8; dy++) {
  50. for (dx = 0; dx < 8; dx++) {
  51. Dst[dx] = (Src[dx] + Src[dx+Stride] +1) >> 1; 
  52. }
  53. Src += Stride;
  54. Dst += Stride;
  55. }
  56. }
  57. /**/
  58. void CopyBlockHorVer(unsigned char * Src, unsigned char * Dst, int Stride)
  59. {
  60. int dy, dx;
  61. for (dy = 0; dy < 8; dy++) {
  62. for (dx = 0; dx < 8; dx++) {
  63. Dst[dx] = (Src[dx] + Src[dx+1] + 
  64. Src[dx+Stride] + Src[dx+Stride+1] +2) >> 2; 
  65. }
  66. Src += Stride;
  67. Dst += Stride;
  68. }
  69. }
  70. /**/
  71. void CopyBlockHorRound(unsigned char * Src, unsigned char * Dst, int Stride)
  72. {
  73. int dy, dx;
  74. for (dy = 0; dy < 8; dy++) {
  75. for (dx = 0; dx < 8; dx++) {
  76. Dst[dx] = (Src[dx] + Src[dx+1]) >> 1; // hor interpolation with rounding
  77. }
  78. Src += Stride;
  79. Dst += Stride;
  80. }
  81. }
  82. /**/
  83. void CopyBlockVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
  84. {
  85. int dy, dx;
  86. for (dy = 0; dy < 8; dy++) {
  87. for (dx = 0; dx < 8; dx++) {
  88. Dst[dx] = (Src[dx] + Src[dx+Stride]) >> 1; // ver interpolation with rounding
  89. }
  90. Src += Stride;
  91. Dst += Stride;
  92. }
  93. }
  94. /**/
  95. void CopyBlockHorVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
  96. {
  97. int dy, dx;
  98. for (dy = 0; dy < 8; dy++) {
  99. for (dx = 0; dx < 8; dx++) {
  100. Dst[dx] = (Src[dx] + Src[dx+1] + 
  101. Src[dx+Stride] + Src[dx+Stride+1] +1) >> 2; // horver interpolation with rounding
  102. }
  103. Src += Stride;
  104. Dst += Stride;
  105. }
  106. }
  107. /** *** **/
  108. void CopyMBlock(unsigned char * Src, unsigned char * Dst, int Stride)
  109. {
  110. int dy;
  111. #ifdef BIG_ENDIAN
  112. char *lpSrc = (char *) Src;
  113. char *lpDst = (char *) Dst;
  114. int lpStride = Stride;
  115. for (dy = 0; dy < 16; dy++) {
  116. lpDst[0] = lpSrc[0];
  117. lpDst[1] = lpSrc[1];
  118. lpDst[2] = lpSrc[2];
  119. lpDst[3] = lpSrc[3];
  120. lpDst[4] = lpSrc[4];
  121. lpDst[5] = lpSrc[5];
  122. lpDst[6] = lpSrc[6];
  123. lpDst[7] = lpSrc[7];
  124. lpDst[8] = lpSrc[8];
  125. lpDst[9] = lpSrc[9];
  126. lpDst[10] = lpSrc[10];
  127. lpDst[11] = lpSrc[11];
  128. lpDst[12] = lpSrc[12];
  129. lpDst[13] = lpSrc[13];
  130. lpDst[14] = lpSrc[14];
  131. lpDst[15] = lpSrc[15];
  132. lpSrc += lpStride;
  133. lpDst += lpStride;
  134. }
  135. #else
  136. long *lpSrc = (long *) Src;
  137. long *lpDst = (long *) Dst;
  138. int lpStride = Stride >> 2;
  139. for (dy = 0; dy < 16; dy++) {
  140. lpDst[0] = lpSrc[0];
  141. lpDst[1] = lpSrc[1];
  142. lpDst[2] = lpSrc[2];
  143. lpDst[3] = lpSrc[3];
  144. lpSrc += lpStride;
  145. lpDst += lpStride;
  146. }
  147. #endif
  148. }
  149. /**/
  150. void CopyMBlockHor(unsigned char * Src, unsigned char * Dst, int Stride)
  151. {
  152. int dy, dx;
  153. for (dy = 0; dy < 16; dy++) {
  154. for (dx = 0; dx < 16; dx++) {
  155. Dst[dx] = (Src[dx] + Src[dx+1]+1) >> 1; // hor interpolation with rounding
  156. }
  157. Src += Stride;
  158. Dst += Stride;
  159. }
  160. }
  161. /**/
  162. void CopyMBlockVer(unsigned char * Src, unsigned char * Dst, int Stride)
  163. {
  164. int dy, dx;
  165. for (dy = 0; dy < 16; dy++) {
  166. for (dx = 0; dx < 16; dx++) {
  167. Dst[dx] = (Src[dx] + Src[dx+Stride] +1) >> 1; // ver interpolation with rounding
  168. }
  169. Src += Stride;
  170. Dst += Stride;
  171. }
  172. }
  173. /**/
  174. void CopyMBlockHorVer(unsigned char * Src, unsigned char * Dst, int Stride)
  175. {
  176. int dy, dx;
  177. for (dy = 0; dy < 16; dy++) {
  178. for (dx = 0; dx < 16; dx++) {
  179. Dst[dx] = (Src[dx] + Src[dx+1] + 
  180. Src[dx+Stride] + Src[dx+Stride+1] +2) >> 2; // horver interpolation with rounding
  181. }
  182. Src += Stride;
  183. Dst += Stride;
  184. }
  185. }
  186. /**/
  187. void CopyMBlockHorRound(unsigned char * Src, unsigned char * Dst, int Stride)
  188. {
  189. int dy, dx;
  190. for (dy = 0; dy < 16; dy++) {
  191. for (dx = 0; dx < 16; dx++) {
  192. Dst[dx] = (Src[dx] + Src[dx+1]) >> 1; // hor interpolation with rounding
  193. }
  194. Src += Stride;
  195. Dst += Stride;
  196. }
  197. }
  198. /**/
  199. void CopyMBlockVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
  200. {
  201. int dy, dx;
  202. for (dy = 0; dy < 16; dy++) {
  203. for (dx = 0; dx < 16; dx++) {
  204. Dst[dx] = (Src[dx] + Src[dx+Stride]) >> 1; // ver interpolation with rounding
  205. }
  206. Src += Stride;
  207. Dst += Stride;
  208. }
  209. }
  210. /**/
  211. void CopyMBlockHorVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
  212. {
  213. int dy, dx;
  214. for (dy = 0; dy < 16; dy++) {
  215. for (dx = 0; dx < 16; dx++) {
  216. Dst[dx] = (Src[dx] + Src[dx+1] + 
  217. Src[dx+Stride] + Src[dx+Stride+1] +1) >> 2; // horver interpolation with rounding
  218. }
  219. Src += Stride;
  220. Dst += Stride;
  221. }
  222. }