OpenCores
URL https://opencores.org/ocsvn/mb-jpeg/mb-jpeg/trunk

Subversion Repositories mb-jpeg

[/] [mb-jpeg/] [tags/] [STEP2_2b/] [encoder/] [dct.c] - Blame information for rev 66

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 33 quickwayne
 
2
#include <stdio.h>
3
#include "dct.h"
4
#include "weights.h"
5
 
6
 
7
/*
8
        Function Name: dct
9
 
10
        Operation: Find the 8x8 DCT of an array using separable DCT
11
        First, finds 1-d DCT along rows, storing the result in inter[][]
12
        Then, 1-d DCT along columns of inter[][] is found
13
 
14
        Input: pixels is the 8x8 input array
15
 
16
        Output: dct is the 8x8 output array
17
*/
18
signed int max_val = 0;
19
static int __count=0;
20
 
21
void dct(signed char pixels[8][8], signed short dct[8][8])
22
{
23
        FILE * file;
24
        int inr, inc;           /* rows and columns of input image */
25
        int intr, intc;         /* rows and columns of intermediate image */
26
        int outr, outc;         /* rows and columns of dct */
27
        int f_val;              /* cumulative sum */
28
        int inter[8][8];        /* stores intermediate result */
29
        int i,j,k;
30
        k=0;
31
    //    file = fopen("weights.h","w+");
32
      //  fprintf(file,"double weights1[512] = {");
33
        /* find 1-d dct along rows */
34
#if 0   
35
 
36
#ifdef __MICROBLAZE
37
       if (__count<4) {
38
                for (i=0; i<8; i++)
39
                        for (j=0; j<8; j++)
40
        xil_printf("%x ", pixels[i][j]);
41
       xil_printf("\r\n");
42
        }
43
#else
44
       if (__count<4) {
45
                for (i=0; i<8; i++)
46
                        for (j=0; j<8; j++)
47
        printf(" %x ", pixels[i][j]);
48
       printf("\r\n");
49
        }
50
#endif
51
#endif
52
 
53
        for (intr=0; intr<8; intr++)
54
                for (intc=0; intc<8; intc++) {
55
                        for (i=0,f_val=0; i<8; i++) {
56
 
57
                                f_val += (pixels[intr][i]* weights[k]);//cos((double)(2*i+1)*(double)intc*PI/16);
58
                                k++;
59
                          //     fprintf(file, "\n%.0f,",cos((double)(2*i+1)*(double)intc*PI/16)*16384);
60
                        }
61
                        if (intc!=0)
62
                                inter[intr][intc] =  f_val>>15;
63
                        else
64
                                inter[intr][intc] =  (11585*(f_val>>14))>>15;
65
 
66
                }
67
   //     fprintf(file,"\n};");
68
   //     fclose(file);
69
         k=0;
70
        /* find 1-d dct along columns */
71
        for (outc=0; outc<8; outc++)
72
                for (outr=0; outr<8; outr++) {
73
                        for (i=0,f_val=0; i<8; i++) {
74
                                f_val += (inter[i][outc] *weights[k]);
75
                                k++;
76
                        }
77
                        if (outr!=0)
78
                                dct[outr][outc] = f_val>>15;
79
                        else
80
                                dct[outr][outc] = (11585*(f_val>>14)>>15);
81
                }
82
#if 0
83
#ifdef __MICROBLAZE
84
       if (__count<4) {
85
                for (i=0; i<8; i++)
86
                        for (j=0; j<8; j++)
87
        xil_printf("%x ", dct[i][j]);
88
       xil_printf("\r\n");
89
        __count++;
90
        }
91
#else
92
       if (__count<4) {
93
                for (i=0; i<8; i++)
94
                        for (j=0; j<8; j++)
95
        printf(" %x ", dct[i][j]);
96
       printf("\r\n");
97
        __count++;
98
        }
99
#endif
100
#endif
101
 
102
}
103
 
104
/*****************************************************************
105
    UNCOMMENT THIS SECTION TO TEST 2D DCT
106
*****************************************************************/
107
 
108
/*
109
main()
110
{
111
 
112
  unsigned char inputmatrix[8][8];
113
  unsigned char outputmatrix[8][8];
114
  unsigned int i,j;
115
 
116
 
117
  printf("Input Matrix (8*8) :-\n");
118
  for (i=0; i<8; i++){
119
          printf("\n");
120
          for (j=0;j<8;j++){
121
                   inputmatrix[i][j] = i*8+j;
122
                   printf("%4d",inputmatrix[i][j]);
123
          }
124
 
125
  }
126
 
127
 
128
 
129
  dct(inputmatrix,outputmatrix);
130
 
131
  printf("\n\nOutput Matrix (8*8) :-\n");
132
 
133
   for (i=0; i<8; i++){
134
           printf("\n");
135
          for (j=0;j<8;j++){
136
           printf("%4d",outputmatrix[i][j]);
137
 
138
          }
139
 
140
  }
141
printf("\n");
142
 
143
}
144
*/

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.