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

多媒体编程

开发平台:

Visual C++

  1. #include "postprocess_mmx.h"
  2.  
  3. #ifdef PP_COMPONENTS_INLINE
  4.  #ifndef INLINE
  5.  #define INLINE static __inline
  6.  #endif
  7.  #include "deblock_horiz_DC_on.c"
  8.  #include "deblock_horiz_useDC.c"
  9.  #include "deblock_horiz_default_filter.c"
  10.  #include "deblock_horiz_lpf9.c"
  11. #endif
  12. void deblock_horiz(uint8_t *image, int width, int stride, QP_STORE_T *QP_store, int QP_stride, int chromaFlag) {
  13. int x, y;
  14. int QP;
  15. uint8_t *v;
  16. int useDC, DC_on;
  17. #ifdef PREFETCH_AHEAD_H
  18. void *prefetch_addr;
  19. #endif
  20. y = 0;
  21. for (x=8; x<width; x+=8) {
  22. QP = chromaFlag ? QP_store[y/8*QP_stride+x/8]
  23.                 : QP_store[y/16*QP_stride+x/16];
  24. v = &(image[y*stride + x]) - 5;
  25. #ifdef PREFETCH_AHEAD_V
  26. prefetch_addr = v + PREFETCH_AHEAD_V;
  27. __asm {
  28. push eax
  29. push ebx
  30. mov eax, prefetch_addr
  31. mov ebx, stride
  32. add      eax , ebx       
  33. prefetcht0 [eax]           
  34. add      eax , ebx       
  35. prefetcht0 [eax]           
  36. add      eax , ebx       
  37. prefetcht0 [eax]           
  38. add      eax , ebx        
  39. prefetcht0 [eax]           
  40. pop ebx
  41. pop eax
  42. };
  43. #endif
  44. useDC = deblock_horiz_useDC(v, stride);
  45. if (useDC) { 
  46. DC_on = deblock_horiz_DC_on(v, stride, QP);
  47. if (DC_on) {
  48. deblock_horiz_lpf9(v, stride, QP); 
  49. #ifdef SHOWDECISIONS_H
  50. if (!chromaFlag) {
  51. v[0*stride + 4] = 
  52. v[1*stride + 4] = 
  53. v[2*stride + 4] = 
  54. v[3*stride + 4] = 255;  
  55. }
  56. #endif
  57. }
  58. } else {    
  59. deblock_horiz_default_filter(v, stride, QP);
  60. #ifdef SHOWDECISIONS_H
  61. if (!chromaFlag) {
  62. v[0*stride + 4] = 
  63. v[1*stride + 4] = 
  64. v[2*stride + 4] = 
  65. v[3*stride + 4] = 0;  
  66. }
  67. #endif
  68. }
  69. }
  70. __asm { 
  71. emms
  72. };
  73. }