dct.c
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:2k
源码类别:

DVD

开发平台:

Others

  1. #include "Includesysdefs.h"
  2. #include "PlaycoreCaptureLogompeg_encdct.h"
  3. #ifdef SUPPORT_CAPTURE_LOGO
  4. void dct(short block[8][8])
  5. {
  6. long tmp_blk[8][8];
  7. int i, j, k;
  8. #if 0   
  9. long s;
  10. for (i=0; i<8; i++)
  11. {
  12. for (j=0; j<8; j++)
  13. {
  14. s = 0;
  15. for (k=0; k<8; k++)
  16. {
  17. s += (long)(DCT_arr[j][k]) * (long)(block[i][k]);
  18. }
  19. tmp_blk[i][j] = s;
  20. }
  21. }
  22. #endif
  23. long s;
  24. asm{
  25. /*
  26. first loop:
  27. bx = j*8+k (DCT_arr index)
  28. si = block+i*8+k (block index)
  29. di = i*8+j (tmp_blk index)
  30. */
  31. push ds
  32. lds si,[block]
  33. xor di,di
  34. loop_i1:
  35. xor bx,bx
  36. add si,16
  37. loop_j1:
  38. sub si,16
  39. mov ax,seg DCT_arr
  40. mov es,ax
  41. xor ax,ax
  42. mov word ptr [s],ax
  43. mov word ptr [s+2],ax
  44. loop_k1:
  45. mov ax,word ptr es:DCT_arr[bx]
  46. mov dx,[si]
  47. imul dx
  48. add word ptr [s],ax
  49. adc word ptr [s+2],dx
  50. add bx,2
  51. add si,2
  52. test bx,15
  53. jne loop_k1
  54. /*
  55. mov ax,seg tmp_blk
  56. mov es,ax
  57. */
  58. mov ax,word ptr [s]
  59. mov word ptr tmp_blk[di],ax
  60. mov ax,word ptr [s+2]
  61. mov word ptr tmp_blk[di+2],ax
  62. add di,4
  63. test di,31
  64. jne loop_j1
  65. cmp di,256
  66. jne loop_i1
  67. }
  68. #if 1
  69. asm{ pop ds }
  70. for (j=0; j<8; j++)
  71. {
  72. for (i=0; i<8; i++)
  73. {
  74. s = 0;
  75. for (k=0; k<8; k++)
  76. {
  77. s += DCT_arr[i][k] * tmp_blk[k][j];
  78. }
  79. block[i][j] = (short)((s+32768)>>16); /* round to nearest short */
  80. }
  81. }
  82. #else
  83. asm{
  84. /*
  85. first loop:
  86. bx = i*8+k (DCT_arr index)
  87. si = block+i*8+j (block index)
  88. di = k*8+j (tmp_blk index)
  89. */
  90. mov si,word ptr [block]
  91. xor di,di
  92. loop_j2:
  93. xor bx,bx
  94. mov ax,seg DCT_arr
  95. mov ds,ax
  96. loop_i2:
  97. xor ax,ax
  98. mov word ptr [s],ax
  99. mov word ptr [s+2],ax
  100. mov ax,seg tmp_blk
  101. mov es,ax
  102. loop_k2:
  103. mov ax,word ptr es:tmp_blk[di]
  104. mov cx,DCT_arr[bx]
  105. mul cx
  106. add word ptr [s],ax
  107. adc word ptr [s+2],dx
  108. mov ax,word ptr es:tmp_blk[di+2]
  109. mul cx
  110. add word ptr [s+2],ax
  111. add di,32
  112. add bx,2
  113. test bx,15
  114. jne loop_k2
  115. add word ptr [s],32768
  116. adc word ptr [s+2],0
  117. les ax,[block]
  118. mov ax,word ptr [s+2]
  119. mov es:[si],ax
  120. sub di,256
  121. add si,16
  122. cmp bx,128
  123. jne loop_i2
  124. sub si,126
  125. add di,4
  126. cmp di,32
  127. jne loop_j2
  128. pop ds
  129. }
  130. #endif
  131. }
  132. #endif