idct_sh4.c File Reference

#include "libavcodec/dsputil.h"

Go to the source code of this file.

Defines

#define c1   1.38703984532214752434
#define c2   1.30656296487637657577
#define c3   1.17587560241935884520
#define c4   1.00000000000000000000
#define c5   0.78569495838710234903
#define c6   0.54119610014619712324
#define c7   0.27589937928294311353
#define ftrv()   ftrv_(xf,fv)
#define load_matrix(table)   load_matrix_(xf,table)
#define DEFREG   float fv[4],xf[16]
#define fr0   fv[0]
#define fr1   fv[1]
#define fr2   fv[2]
#define fr3   fv[3]
#define DESCALE(x, n)   (x)*(1.0f/(1<<(n)))
#define OA(fblock, ofs)   *(float*)((char*)fblock + ofs)

Functions

static const float even_table[] __attribute__ ((aligned(8)))
static void ftrv_ (const float xf[], float fv[])
static void load_matrix_ (float xf[], const float table[])
void idct_sh4 (DCTELEM *block)


Define Documentation

#define c1   1.38703984532214752434

Definition at line 24 of file idct_sh4.c.

Referenced by close_connection(), compute_status(), decode_frame(), dxt1_decode_pixels(), ff_fft_calc_altivec(), ff_fft_init(), fft_ref_init(), http_receive_data(), idct4col_add(), idct4col_put(), idct4row(), libextractor_jpeg_extract(), qpeg_decode_intra(), readLength(), reverseMatrixing(), and strcmpcasenosensitive_internal().

#define c2   1.30656296487637657577

Definition at line 25 of file idct_sh4.c.

Referenced by ff_fft_calc_altivec(), idct4col_add(), idct4col_put(), idct4row(), libextractor_jpeg_extract(), libextractor_rpm_extract(), qpel_motion_search(), readLength(), reverseMatrixing(), and strcmpcasenosensitive_internal().

#define c3   1.17587560241935884520

Definition at line 26 of file idct_sh4.c.

Referenced by idct4col_add(), idct4col_put(), and idct4row().

#define c4   1.00000000000000000000

Definition at line 27 of file idct_sh4.c.

Referenced by idct248_ref().

#define c5   0.78569495838710234903

Definition at line 28 of file idct_sh4.c.

#define c6   0.54119610014619712324

Definition at line 29 of file idct_sh4.c.

#define c7   0.27589937928294311353

Definition at line 30 of file idct_sh4.c.

#define DEFREG   float fv[4],xf[16]

Definition at line 110 of file idct_sh4.c.

Referenced by idct_sh4().

#define DESCALE ( x,
 )     (x)*(1.0f/(1<<(n)))

Definition at line 121 of file idct_sh4.c.

#define fr0   fv[0]

Definition at line 113 of file idct_sh4.c.

Referenced by idct_sh4().

#define fr1   fv[1]

Definition at line 114 of file idct_sh4.c.

Referenced by idct_sh4().

#define fr2   fv[2]

Definition at line 115 of file idct_sh4.c.

Referenced by idct_sh4().

#define fr3   fv[3]

Definition at line 116 of file idct_sh4.c.

Referenced by idct_sh4().

 
#define ftrv (  )     ftrv_(xf,fv)

Definition at line 107 of file idct_sh4.c.

Referenced by idct_sh4().

#define load_matrix ( table   )     load_matrix_(xf,table)

Definition at line 108 of file idct_sh4.c.

Referenced by idct_sh4().

#define OA ( fblock,
ofs   )     *(float*)((char*)fblock + ofs)

Referenced by idct_sh4().


Function Documentation

static const float even_table [] __attribute__ ( (aligned(8))   )  [static]

Definition at line 44 of file yuv2rgb.c.

00044                                                               {
00045 {  1,   3,   1,   3,   1,   3,   1,   3, },
00046 {  2,   0,   2,   0,   2,   0,   2,   0, },
00047 };

static void ftrv_ ( const float  xf[],
float  fv[] 
) [static]

Definition at line 88 of file idct_sh4.c.

00089 {
00090         float f0,f1,f2,f3;
00091         f0 = fv[0];
00092         f1 = fv[1];
00093         f2 = fv[2];
00094         f3 = fv[3];
00095         fv[0] = xf[0]*f0 + xf[4]*f1 + xf[ 8]*f2 + xf[12]*f3;
00096         fv[1] = xf[1]*f0 + xf[5]*f1 + xf[ 9]*f2 + xf[13]*f3;
00097         fv[2] = xf[2]*f0 + xf[6]*f1 + xf[10]*f2 + xf[14]*f3;
00098         fv[3] = xf[3]*f0 + xf[7]*f1 + xf[11]*f2 + xf[15]*f3;
00099 }

void idct_sh4 ( DCTELEM block  ) 

Definition at line 132 of file idct_sh4.c.

References DEFREG, DESCALE, fr0, fr1, fr2, fr3, ftrv, load_matrix, OA, t0, t1, t2, and t3.

Referenced by dsputil_init_sh4(), idct_add(), and idct_put().

00133 {
00134         DEFREG;
00135 
00136         int i;
00137         float        tblock[8*8],*fblock;
00138         int ofs1,ofs2,ofs3;
00139 
00140 #if defined(__SH4__)
00141 #error  "FIXME!! change to single float"
00142 #endif
00143 
00144         /* row */
00145 
00146         /* even part */
00147         load_matrix(even_table);
00148 
00149         fblock = tblock+4;
00150         i = 8;
00151         do {
00152                 fr0 = block[0];
00153                 fr1 = block[2];
00154                 fr2 = block[4];
00155                 fr3 = block[6];
00156                 block+=8;
00157                 ftrv();
00158                 *--fblock = fr3;
00159                 *--fblock = fr2;
00160                 *--fblock = fr1;
00161                 *--fblock = fr0;
00162                 fblock+=8+4;
00163         } while(--i);
00164         block-=8*8;
00165         fblock-=8*8+4;
00166 
00167         load_matrix(odd_table);
00168 
00169         i = 8;
00170 
00171 //        ofs1 = sizeof(float)*1;
00172 //        ofs2 = sizeof(float)*2;
00173 //        ofs3 = sizeof(float)*3;
00174 
00175         do {
00176                 float t0,t1,t2,t3;
00177                 fr0 = block[1];
00178                 fr1 = block[3];
00179                 fr2 = block[5];
00180                 fr3 = block[7];
00181                 block+=8;
00182                 ftrv();
00183                 t0 = *fblock++;
00184                 t1 = *fblock++;
00185                 t2 = *fblock++;
00186                 t3 = *fblock++;
00187                 fblock+=4;
00188                 *--fblock = t0 - fr0;
00189                 *--fblock = t1 - fr1;
00190                 *--fblock = t2 - fr2;
00191                 *--fblock = t3 - fr3;
00192                 *--fblock = t3 + fr3;
00193                 *--fblock = t2 + fr2;
00194                 *--fblock = t1 + fr1;
00195                 *--fblock = t0 + fr0;
00196                 fblock+=8;
00197         } while(--i);
00198         block-=8*8;
00199         fblock-=8*8;
00200 
00201         /* col */
00202 
00203         /* even part */
00204         load_matrix(even_table);
00205 
00206         ofs1 = sizeof(float)*2*8;
00207         ofs2 = sizeof(float)*4*8;
00208         ofs3 = sizeof(float)*6*8;
00209 
00210         i = 8;
00211 
00212 #define        OA(fblock,ofs)   *(float*)((char*)fblock + ofs)
00213 
00214         do {
00215                 fr0 = OA(fblock,   0);
00216                 fr1 = OA(fblock,ofs1);
00217                 fr2 = OA(fblock,ofs2);
00218                 fr3 = OA(fblock,ofs3);
00219                 ftrv();
00220                 OA(fblock,0   ) = fr0;
00221                 OA(fblock,ofs1) = fr1;
00222                 OA(fblock,ofs2) = fr2;
00223                 OA(fblock,ofs3) = fr3;
00224                 fblock++;
00225         } while(--i);
00226         fblock-=8;
00227 
00228         load_matrix(odd_table);
00229 
00230         i=8;
00231         do {
00232                 float t0,t1,t2,t3;
00233                 t0 = OA(fblock,   0); /* [8*0] */
00234                 t1 = OA(fblock,ofs1); /* [8*2] */
00235                 t2 = OA(fblock,ofs2); /* [8*4] */
00236                 t3 = OA(fblock,ofs3); /* [8*6] */
00237                 fblock+=8;
00238                 fr0 = OA(fblock,   0); /* [8*1] */
00239                 fr1 = OA(fblock,ofs1); /* [8*3] */
00240                 fr2 = OA(fblock,ofs2); /* [8*5] */
00241                 fr3 = OA(fblock,ofs3); /* [8*7] */
00242                 fblock+=-8+1;
00243                 ftrv();
00244                 block[8*0] = DESCALE(t0 + fr0,3);
00245                 block[8*7] = DESCALE(t0 - fr0,3);
00246                 block[8*1] = DESCALE(t1 + fr1,3);
00247                 block[8*6] = DESCALE(t1 - fr1,3);
00248                 block[8*2] = DESCALE(t2 + fr2,3);
00249                 block[8*5] = DESCALE(t2 - fr2,3);
00250                 block[8*3] = DESCALE(t3 + fr3,3);
00251                 block[8*4] = DESCALE(t3 - fr3,3);
00252                 block++;
00253         } while(--i);
00254 
00255 #if defined(__SH4__)
00256 #error  "FIXME!! change to double"
00257 #endif
00258 }

static void load_matrix_ ( float  xf[],
const float  table[] 
) [static]

Definition at line 101 of file idct_sh4.c.

00102 {
00103         int i;
00104         for(i=0;i<16;i++) xf[i]=table[i];
00105 }


Generated on Thu Nov 20 05:45:31 2008 for libextractor by  doxygen 1.5.1