ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Video-Capture-V4l/RTjpeg/codec/modules/RTquant_mmx.c
Revision: 1.1
Committed: Fri May 5 20:21:52 2000 UTC (26 years, 5 months ago) by pcg
Content type: text/plain
Branch: MAIN
CVS Tags: rel-0_9, rel-0_902, HEAD
Log Message:
Initial check-in

File Contents

# User Rev Content
1 pcg 1.1 void RTjpeg_quant_init(void)
2     {
3     int i;
4     s16 *qtbl;
5    
6     qtbl=(s16 *)RTjpeg_lqt;
7     for(i=0; i<64; i++)qtbl[i]=(s16)RTjpeg_lqt[i];
8    
9     qtbl=(s16 *)RTjpeg_cqt;
10     for(i=0; i<64; i++)qtbl[i]=(s16)RTjpeg_cqt[i];
11     }
12    
13     static mmx_t RTjpeg_ones=(mmx_t)(long long)0x0001000100010001LL;
14     static mmx_t RTjpeg_half=(mmx_t)(long long)0x7fff7fff7fff7fffLL;
15    
16     void RTjpeg_quant(s16 *block, s32 *qtbl)
17     {
18     int i;
19     mmx_t *bl, *ql;
20    
21     ql=(mmx_t *)qtbl;
22     bl=(mmx_t *)block;
23    
24     movq_m2r(RTjpeg_ones, mm6);
25     movq_m2r(RTjpeg_half, mm7);
26    
27     for(i=0; i<16; i++)
28     {
29     movq_m2r(*ql, mm0); /* quant vals (4) */
30     movq_m2r(*bl, mm2); /* block vals (4) */
31     movq_r2r(mm0, mm1);
32     movq_r2r(mm2, mm3);
33    
34     punpcklwd_r2r(mm6, mm0); /* 1 qb 1 qa */
35     punpckhwd_r2r(mm6, mm1); /* 1 qd 1 qc */
36    
37     punpcklwd_r2r(mm7, mm2); /* 32767 bb 32767 ba */
38     punpckhwd_r2r(mm7, mm3); /* 32767 bd 32767 bc */
39    
40     pmaddwd_r2r(mm2, mm0); /* 32767+bb*qb 32767+ba*qa */
41     pmaddwd_r2r(mm3, mm1); /* 32767+bd*qd 32767+bc*qc */
42    
43     psrad_i2r((mmx_t)(long long)16, mm0);
44     psrad_i2r((mmx_t)(long long)16, mm1);
45    
46     packssdw_r2r(mm1, mm0);
47    
48     movq_r2m(mm0, *bl);
49    
50     bl++;
51     ql++;
52     }
53     }