Any changes are to allow conversion to BMP
Dependents: Color_Targeting_Catapult
Fork of BaseJpegDecode by
Diff: BaseJpegDecode.cpp
- Revision:
- 2:5b1dd4e34857
- Parent:
- 1:bfbc18000cca
- Child:
- 3:a7547692071d
--- a/BaseJpegDecode.cpp Thu Oct 25 11:00:05 2012 +0000 +++ b/BaseJpegDecode.cpp Tue Oct 30 13:22:08 2012 +0000 @@ -71,8 +71,9 @@ { m_block = 0; m_scan = 0; - m_old_DC_value[0] = 0; - m_old_DC_value[1] = 0; + m_pre_DC_value[0] = 0; + m_pre_DC_value[1] = 0; + m_pre_DC_value[2] = 0; m_bitpat.clear(); m_huff = NULL; } @@ -95,10 +96,10 @@ m_param1 = c<<8; break; case 2: - width = m_param1 | c; + height = m_param1 | c; break; case 4: - height = m_param1 | c; + width = m_param1 | c; break; case 7: if (c == 0x22) { @@ -202,18 +203,25 @@ DBG("%d %d %d %02x\n", m_huff->run, m_huff->value_size, m_huff->code_size, m_huff->code); int value = pHD->getValue(m_huff, &m_bitpat); if (tc == HT_DC) { - value += m_old_DC_value[th]; + int sc = 0; // Y + if (m_block == m_yblocks) { + sc = 1; // Cb + } else if (m_block == (m_yblocks+1)) { + sc = 2; // Cr + } + value += m_pre_DC_value[sc]; outputDC(m_mcu, m_block, value); - m_old_DC_value[th] = value; + m_pre_DC_value[sc] = value; m_scan++; REPORT_CODE(report_scan_dc_count++); } else { // AC if (m_huff->value_size == 0 && m_huff->run == 0) { // EOB DBG("AC EOB\n"); + outputAC(m_mcu, m_block, 63, 0); m_scan = 64; } else { for(int i = 0; i < m_huff->run; i++) { - outputAC(m_mcu, m_block, m_scan, 0); + //outputAC(m_mcu, m_block, m_scan, 0); m_scan++; } outputAC(m_mcu, m_block, m_scan, value);