Any changes are to allow conversion to BMP
Dependents: Color_Targeting_Catapult
Fork of BaseJpegDecode by
inverseDCT.cpp@7:5010d93af0b6, 2014-04-30 (annotated)
- Committer:
- kylepost3
- Date:
- Wed Apr 30 14:17:05 2014 +0000
- Revision:
- 7:5010d93af0b6
- Parent:
- 3:a7547692071d
Any changes are to allow conversion to BMP
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 2:5b1dd4e34857 | 1 | #include "mbed.h" |
va009039 | 2:5b1dd4e34857 | 2 | #include "inverseDCT.h" |
va009039 | 2:5b1dd4e34857 | 3 | |
va009039 | 3:a7547692071d | 4 | #ifdef USE_IDCT_AAN |
va009039 | 2:5b1dd4e34857 | 5 | const int zigzag[64] = |
va009039 | 2:5b1dd4e34857 | 6 | {0, |
va009039 | 2:5b1dd4e34857 | 7 | 1, 8, |
va009039 | 2:5b1dd4e34857 | 8 | 16, 9, 2, |
va009039 | 2:5b1dd4e34857 | 9 | 3,10,17,24, |
va009039 | 2:5b1dd4e34857 | 10 | 32,25,18,11, 4, |
va009039 | 2:5b1dd4e34857 | 11 | 5,12,19,26,33,40, |
va009039 | 2:5b1dd4e34857 | 12 | 48,41,34,27,20,13,6, |
va009039 | 2:5b1dd4e34857 | 13 | 7,14,21,28,35,42,49,56, |
va009039 | 2:5b1dd4e34857 | 14 | 57,50,43,36,29,22,15, |
va009039 | 2:5b1dd4e34857 | 15 | 23,30,37,44,51,58, |
va009039 | 2:5b1dd4e34857 | 16 | 59,52,45,38,31, |
va009039 | 2:5b1dd4e34857 | 17 | 39,46,53,60, |
va009039 | 2:5b1dd4e34857 | 18 | 61,54,47, |
va009039 | 2:5b1dd4e34857 | 19 | 55,62, |
va009039 | 2:5b1dd4e34857 | 20 | 63}; |
va009039 | 2:5b1dd4e34857 | 21 | |
va009039 | 3:a7547692071d | 22 | void inverseDCT::inputBLOCK(int mcu, int block, int scan, int value) { |
va009039 | 2:5b1dd4e34857 | 23 | if (scan == 0) { |
va009039 | 2:5b1dd4e34857 | 24 | for(int i = 0; i < 64; i++) { |
va009039 | 2:5b1dd4e34857 | 25 | m_s[i] = 0; |
va009039 | 2:5b1dd4e34857 | 26 | } |
va009039 | 2:5b1dd4e34857 | 27 | } |
va009039 | 2:5b1dd4e34857 | 28 | m_s[zigzag[scan]] = value; |
va009039 | 3:a7547692071d | 29 | if (scan == 63) { // last |
va009039 | 3:a7547692071d | 30 | idct.conv(reinterpret_cast<int8_t*>(m_s), m_s); |
va009039 | 3:a7547692071d | 31 | outputBLOCK(mcu, block, reinterpret_cast<int8_t*>(m_s)); |
va009039 | 3:a7547692071d | 32 | } |
va009039 | 3:a7547692071d | 33 | }; |
va009039 | 3:a7547692071d | 34 | #endif //USE_IDCT_AAN |
va009039 | 3:a7547692071d | 35 | |
va009039 | 3:a7547692071d | 36 | #ifdef USE_IDCT_TABLE |
va009039 | 3:a7547692071d | 37 | #include "inverseDCT_table.h" |
va009039 | 3:a7547692071d | 38 | void inverseDCT::inputBLOCK(int mcu, int block, int scan, int value) |
va009039 | 3:a7547692071d | 39 | { |
va009039 | 3:a7547692071d | 40 | if (scan == 0) { |
va009039 | 3:a7547692071d | 41 | int t = value * 32 / 8; |
va009039 | 3:a7547692071d | 42 | for(int i = 0; i < 64; i++) { |
va009039 | 3:a7547692071d | 43 | m_sum[i] = t; |
va009039 | 3:a7547692071d | 44 | } |
va009039 | 3:a7547692071d | 45 | return; |
va009039 | 3:a7547692071d | 46 | } |
va009039 | 3:a7547692071d | 47 | |
va009039 | 3:a7547692071d | 48 | if (value != 0) { |
va009039 | 3:a7547692071d | 49 | for(int xy = 0; xy < 64; xy++) { |
va009039 | 3:a7547692071d | 50 | m_sum[xy] += idct_table[scan*64+xy] * value / 16; |
va009039 | 3:a7547692071d | 51 | } |
va009039 | 3:a7547692071d | 52 | } |
va009039 | 3:a7547692071d | 53 | |
va009039 | 2:5b1dd4e34857 | 54 | if (scan == 63) { |
va009039 | 3:a7547692071d | 55 | int8_t* result = reinterpret_cast<int8_t*>(m_sum); |
va009039 | 3:a7547692071d | 56 | for(int i = 0; i < 64; i++) { |
va009039 | 3:a7547692071d | 57 | int t = m_sum[i] / 32; |
va009039 | 3:a7547692071d | 58 | if (t > 127) { |
va009039 | 3:a7547692071d | 59 | t = 127; |
va009039 | 3:a7547692071d | 60 | } else if (t < -128) { |
va009039 | 3:a7547692071d | 61 | t = -128; |
va009039 | 3:a7547692071d | 62 | } |
va009039 | 3:a7547692071d | 63 | result[i] = t; |
va009039 | 3:a7547692071d | 64 | } |
va009039 | 3:a7547692071d | 65 | outputBLOCK(mcu, block, result); |
va009039 | 2:5b1dd4e34857 | 66 | } |
va009039 | 2:5b1dd4e34857 | 67 | } |
va009039 | 3:a7547692071d | 68 | #endif //USE_IDCT_TABLE |