huffmancode to decode in real-time for motion-jpeg

Dependents:   BaseJpegDecode_example SimpleJpegDecode_example Dumb_box_rev2

example code:

Import programBaseJpegDecode_example

BaseJpegDeocde exampe program

Import programSimpleJpegDecode_example

convert JPEG stream data to bitmap, BaseJpegDecode example program

Committer:
va009039
Date:
Sat Feb 02 01:18:15 2013 +0000
Revision:
6:d7ee458cacd1
Parent:
0:417b7ae90eff
aanIDCT add range_limit()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:417b7ae90eff 1 #include "BitPattern.h"
va009039 0:417b7ae90eff 2
va009039 0:417b7ae90eff 3 BitPattern::BitPattern()
va009039 0:417b7ae90eff 4 {
va009039 0:417b7ae90eff 5 clear();
va009039 0:417b7ae90eff 6 }
va009039 0:417b7ae90eff 7
va009039 0:417b7ae90eff 8 BitPattern::BitPattern(uint32_t value, int size)
va009039 0:417b7ae90eff 9 {
va009039 0:417b7ae90eff 10 clear();
va009039 0:417b7ae90eff 11 put(value, size);
va009039 0:417b7ae90eff 12 }
va009039 0:417b7ae90eff 13
va009039 0:417b7ae90eff 14 BitPattern::BitPattern(const char* s)
va009039 0:417b7ae90eff 15 {
va009039 0:417b7ae90eff 16 clear();
va009039 0:417b7ae90eff 17 operator+=(s);
va009039 0:417b7ae90eff 18 }
va009039 0:417b7ae90eff 19
va009039 0:417b7ae90eff 20 void BitPattern::clear()
va009039 0:417b7ae90eff 21 {
va009039 0:417b7ae90eff 22 m_size = 0;
va009039 0:417b7ae90eff 23 m_pat = 0;
va009039 0:417b7ae90eff 24 }
va009039 0:417b7ae90eff 25
va009039 0:417b7ae90eff 26 void BitPattern::operator=(const char* s)
va009039 0:417b7ae90eff 27 {
va009039 0:417b7ae90eff 28 clear();
va009039 0:417b7ae90eff 29 operator+=(s);
va009039 0:417b7ae90eff 30 }
va009039 0:417b7ae90eff 31
va009039 0:417b7ae90eff 32 void BitPattern::operator+=(uint8_t c)
va009039 0:417b7ae90eff 33 {
va009039 0:417b7ae90eff 34 put(c);
va009039 0:417b7ae90eff 35 }
va009039 0:417b7ae90eff 36
va009039 0:417b7ae90eff 37 void BitPattern::operator+=(const char* s)
va009039 0:417b7ae90eff 38 {
va009039 0:417b7ae90eff 39 for(int i = 0; i < 32 && s[i]; i++) {
va009039 0:417b7ae90eff 40 char c = s[i];
va009039 0:417b7ae90eff 41 put(c-'0', 1);
va009039 0:417b7ae90eff 42 }
va009039 0:417b7ae90eff 43 }
va009039 0:417b7ae90eff 44
va009039 0:417b7ae90eff 45 int BitPattern::operator [](int index)
va009039 0:417b7ae90eff 46 {
va009039 0:417b7ae90eff 47 uint32_t mask = 0x80000000;
va009039 0:417b7ae90eff 48 for(int i = 0; i < index; i++) {
va009039 0:417b7ae90eff 49 mask>>=1;
va009039 0:417b7ae90eff 50 }
va009039 0:417b7ae90eff 51 if (m_pat & mask) {
va009039 0:417b7ae90eff 52 return 1;
va009039 0:417b7ae90eff 53 }
va009039 0:417b7ae90eff 54 return 0;
va009039 0:417b7ae90eff 55 }
va009039 0:417b7ae90eff 56
va009039 0:417b7ae90eff 57 void BitPattern::put(uint32_t value, int size)
va009039 0:417b7ae90eff 58 {
va009039 0:417b7ae90eff 59 m_pat <<= size;
va009039 0:417b7ae90eff 60 m_pat |= value;
va009039 0:417b7ae90eff 61 m_size += size;
va009039 0:417b7ae90eff 62 }
va009039 0:417b7ae90eff 63
va009039 0:417b7ae90eff 64 uint32_t BitPattern::peek(int size)
va009039 0:417b7ae90eff 65 {
va009039 0:417b7ae90eff 66 return m_pat >> (m_size - size);
va009039 0:417b7ae90eff 67 }
va009039 0:417b7ae90eff 68
va009039 0:417b7ae90eff 69 uint32_t BitPattern::get(int size)
va009039 0:417b7ae90eff 70 {
va009039 0:417b7ae90eff 71 uint32_t r = peek(size);
va009039 0:417b7ae90eff 72 m_size -= size;
va009039 0:417b7ae90eff 73 m_pat &= (1<<m_size)-1;
va009039 0:417b7ae90eff 74 return r;
va009039 0:417b7ae90eff 75 }
va009039 0:417b7ae90eff 76
va009039 0:417b7ae90eff 77 int BitPattern::size()
va009039 0:417b7ae90eff 78 {
va009039 0:417b7ae90eff 79 return m_size;
va009039 0:417b7ae90eff 80 }
va009039 0:417b7ae90eff 81
va009039 0:417b7ae90eff 82 bool BitPattern::match(BitPattern& b)
va009039 0:417b7ae90eff 83 {
va009039 0:417b7ae90eff 84 if (b.m_size > m_size) {
va009039 0:417b7ae90eff 85 return false;
va009039 0:417b7ae90eff 86 }
va009039 0:417b7ae90eff 87 return peek(b.size()) == b.peek(b.size());
va009039 0:417b7ae90eff 88 }
va009039 0:417b7ae90eff 89
va009039 0:417b7ae90eff 90 bool BitPattern::match(const char* s)
va009039 0:417b7ae90eff 91 {
va009039 0:417b7ae90eff 92 BitPattern a = s;
va009039 0:417b7ae90eff 93 return match(a);
va009039 0:417b7ae90eff 94 }
va009039 0:417b7ae90eff 95
va009039 0:417b7ae90eff 96 bool BitPattern::operator ==(BitPattern& b)
va009039 0:417b7ae90eff 97 {
va009039 0:417b7ae90eff 98 if (b.m_size == m_size) {
va009039 0:417b7ae90eff 99 if (b.m_pat == m_pat) {
va009039 0:417b7ae90eff 100 return true;
va009039 0:417b7ae90eff 101 }
va009039 0:417b7ae90eff 102 }
va009039 0:417b7ae90eff 103 return false;
va009039 0:417b7ae90eff 104 }