Any changes are to allow conversion to BMP

Dependents:   Color_Targeting_Catapult

Fork of BaseJpegDecode by Norimasa Okamoto

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?

UserRevisionLine numberNew 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