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

多媒体编程

开发平台:

Visual C++

  1. #include "postprocess_mmx.h"
  2. void postprocess(unsigned char * src[], int src_stride,
  3.                  unsigned char * dst[], int dst_stride, 
  4.                  int horizontal_size,   int vertical_size, 
  5.                  QP_STORE_T *QP_store,  int QP_stride,
  6.   int mode) {
  7.   
  8. uint8_t *puc_src;
  9. uint8_t *puc_dst;
  10. uint8_t *puc_flt;
  11. QP_STORE_T *QP_ptr;
  12. int y, i;
  13. for (y=0; y<vertical_size; y+= 4) {
  14. if (!(mode & PP_DONT_COPY)) {
  15. puc_src = &((src[0])[y*src_stride]);
  16. puc_dst = &((dst[0])[y*dst_stride]);
  17. fast_copy(puc_src, src_stride, puc_dst, dst_stride, horizontal_size, 4);
  18. }
  19. if (mode & PP_DEBLOCK_Y_H) {
  20. puc_flt = &((dst[0])[y*dst_stride]);  
  21. QP_ptr  = &(QP_store[(y>>4)*QP_stride]);
  22. deblock_horiz(puc_flt, horizontal_size,      dst_stride, QP_ptr, QP_stride, 0);
  23. }
  24. if (mode & PP_DEBLOCK_Y_V) { 
  25. if ( (y%8) && (y-4)>5 )   {
  26. puc_flt = &((dst[0])[(y-4)*dst_stride]);  
  27. QP_ptr  = &(QP_store[(y>>4)*QP_stride]);
  28. deblock_vert( puc_flt, horizontal_size,   dst_stride, QP_ptr, QP_stride, 0);
  29. }
  30. }
  31. horizontal_size >>= 1;
  32. vertical_size   >>= 1;
  33. src_stride      >>= 1;
  34. dst_stride      >>= 1;
  35. for (i=1; i<=2; i++) {
  36. for (y=0; y<vertical_size; y+= 4) {
  37. if (!(mode & PP_DONT_COPY)) {
  38. puc_src = &((src[i])[y*src_stride]);
  39. puc_dst = &((dst[i])[y*dst_stride]);
  40. fast_copy(puc_src, src_stride, puc_dst, dst_stride, horizontal_size, 4);
  41. }
  42. if (mode & PP_DEBLOCK_C_H) {
  43. puc_flt = &((dst[i])[y*dst_stride]);  
  44. QP_ptr  = &(QP_store[(y>>3)*QP_stride]);
  45. deblock_horiz(puc_flt, horizontal_size,      dst_stride, QP_ptr, QP_stride, 1);
  46. }
  47. if (mode & PP_DEBLOCK_C_V) { 
  48. if ( (y%8) && (y-4)>5 )   {
  49. puc_flt = &((dst[i])[(y-4)*dst_stride]);  
  50. QP_ptr  = &(QP_store[(y>>4)*QP_stride]);
  51. deblock_vert( puc_flt, horizontal_size,   dst_stride, QP_ptr, QP_stride, 1);
  52. }
  53. }
  54. do_emms();
  55. }