clip1.c
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. //#include <stdio.h>
  36. //#include <string.h>
  37. //#include <stdlib.h>
  38. //#include <math.h>
  39. #include "dllindex.h"
  40. #include "h261defs.h"
  41. #include "h261func.h"
  42. #include "clip.h"
  43. #define FRACBITS        6   /* Fractional bits in IDCT computation */
  44. #define PIXEL_MIN       0
  45. #define PIXEL_MAX       255
  46. #define CLIPMARGIN      300
  47. #define CLIPMIN         (PIXEL_MIN - CLIPMARGIN)
  48. #define CLIPMAX         (PIXEL_MAX + CLIPMARGIN)
  49. extern PIXEL   clip[(CLIPMAX-CLIPMIN+1)];
  50. extern void idct2_clip(PIXEL x[], int xdim, S32 idct_out[8][4], int idct_class)
  51. {
  52.     int     i, temp;
  53. #ifdef LITTLE_ENDIAN
  54.     int     temp1, temp2, temp3;
  55. PIXEL hi_clip0, hi_clip1, hi_clip2, hi_clip3;
  56. PIXEL lo_clip0, lo_clip1, lo_clip2, lo_clip3;
  57. U32 *y;
  58. switch (idct_class)
  59. {
  60. // DC only case
  61. case DC_ONLY:
  62. {
  63. temp = idct_out[0][0];
  64. lo_clip0 = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  65. hi_clip0 = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  66. temp1 = 0x0000ffff & (int)hi_clip0;
  67. temp1 = temp1 << 8 | lo_clip0;
  68. temp2 = temp1 << 16 | temp1; 
  69. temp1 = 0x0000ffff & (int)lo_clip0;
  70. temp1 = temp1 << 8 | hi_clip0;
  71. temp3 = temp1 << 16 | temp1;
  72. y = (U32 *)&x[0];
  73. for (i = 0; i < 8; i++)
  74. {
  75. y[i*xdim/4] = temp2;
  76. y[i*xdim/4+1] = temp3;
  77. }
  78. break;
  79. }
  80. // DC + 1 horizontal AC case
  81. case DC_AC_H:
  82. {
  83. temp = idct_out[0][0];
  84. lo_clip0 = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  85. hi_clip0 = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  86. temp = idct_out[0][1];
  87. lo_clip1 = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  88. hi_clip1 = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  89. temp = idct_out[0][2];
  90. lo_clip2 = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  91. hi_clip2 = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  92. temp = idct_out[0][3];
  93. lo_clip3 = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  94. hi_clip3 = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  95. temp1 = 0x0000ffff & (int)hi_clip0;
  96. temp1 = temp1 << 8 | lo_clip0; 
  97. temp2 = 0x0000ffff & (int)hi_clip1;
  98. temp2 = temp2 << 8 | lo_clip1;
  99. temp2 = temp2 << 16 | temp1; 
  100. temp3 = 0x0000ffff & (int)lo_clip2;
  101. temp3 = temp3 << 8 | hi_clip2;
  102. temp = 0x0000ffff & (int)lo_clip3;
  103. temp = temp << 8 | hi_clip3;
  104. temp3 = temp3 << 16 | temp; 
  105. y = (U32 *)&x[0];
  106. for (i = 0; i < 8; i++)
  107. {
  108. y[i*xdim/4] = temp2;
  109. y[i*xdim/4+1] = temp3;
  110. }
  111. break;
  112. }
  113. case GENERAL:
  114. {
  115.      for (i = 0; i < 8; i++) 
  116.      {
  117.          temp = idct_out[i][0];
  118.          x[i*xdim] = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  119.          x[i*xdim+1] = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  120.          temp = idct_out[i][1];
  121.          x[i*xdim+2] = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  122.          x[i*xdim+3] = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  123.          temp = idct_out[i][2];
  124.          x[i*xdim+7] = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  125.          x[i*xdim+6] = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  126.          temp = idct_out[i][3];
  127.          x[i*xdim+5] = clip[-CLIPMIN + ((temp << 16) >> (FRACBITS + 16))];
  128.          x[i*xdim+4] = clip[-CLIPMIN + (temp >> (FRACBITS + 16))];
  129.         }
  130. break;         
  131. }
  132. default:
  133. break;
  134. }
  135. #else
  136.     for (i = 0; i < 8; i++)
  137.         {
  138.             int     j;
  139.             // Notice the funky casts of idct_out, which needs to be treated
  140.             // as an S16 [8][8].
  141.             for (j = 0; j < 4; j++) {
  142.                 temp = ((S16 (*)[8]) idct_out)[i][j] >> FRACBITS;
  143.                 x[i*xdim+j] = clip[-CLIPMIN + temp];
  144.                 temp = ((S16 (*)[8]) idct_out)[i][j+4] >> FRACBITS;
  145.                 x[i*xdim+7-j] = clip[-CLIPMIN + temp];
  146.             }
  147.         }
  148. #endif
  149. }