
BaseJpegDeocde exampe program
Dependencies: BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos
Fork of BaseJpegDecode by
benchmark_BaseJpegDecode.cpp@1:58dfd5386a92, 2012-10-08 (annotated)
- Committer:
- va009039
- Date:
- Mon Oct 08 11:38:57 2012 +0000
- Revision:
- 1:58dfd5386a92
- Child:
- 3:2709bbf8baae
add HuffmanDecode::Lookup2()
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 1:58dfd5386a92 | 1 | #if 0 |
va009039 | 1:58dfd5386a92 | 2 | #include "mbed.h" |
va009039 | 1:58dfd5386a92 | 3 | #include "BaseJpegDecode.h" |
va009039 | 1:58dfd5386a92 | 4 | #include <vector> |
va009039 | 1:58dfd5386a92 | 5 | |
va009039 | 1:58dfd5386a92 | 6 | #define DBG(...) do{fprintf(stderr,"[%s@%d] ",__PRETTY_FUNCTION__,__LINE__);fprintf(stderr,__VA_ARGS__);} while(0); |
va009039 | 1:58dfd5386a92 | 7 | #define ASSERT(A) while(!(A)){fprintf(stderr,"\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);}; |
va009039 | 1:58dfd5386a92 | 8 | |
va009039 | 1:58dfd5386a92 | 9 | LocalFileSystem local("local"); |
va009039 | 1:58dfd5386a92 | 10 | DigitalOut myled(LED1); |
va009039 | 1:58dfd5386a92 | 11 | Serial pc(USBTX, USBRX); |
va009039 | 1:58dfd5386a92 | 12 | |
va009039 | 1:58dfd5386a92 | 13 | class JpegDecode : public BaseJpegDecode { |
va009039 | 1:58dfd5386a92 | 14 | public: |
va009039 | 1:58dfd5386a92 | 15 | JpegDecode(); |
va009039 | 1:58dfd5386a92 | 16 | virtual void outputDC(int mcu, int block, int value); |
va009039 | 1:58dfd5386a92 | 17 | virtual void outputAC(int mcu, int block, int scan, int value); |
va009039 | 1:58dfd5386a92 | 18 | virtual void outputMARK(uint8_t c); |
va009039 | 1:58dfd5386a92 | 19 | int DC_count; |
va009039 | 1:58dfd5386a92 | 20 | int AC_count; |
va009039 | 1:58dfd5386a92 | 21 | }; |
va009039 | 1:58dfd5386a92 | 22 | |
va009039 | 1:58dfd5386a92 | 23 | JpegDecode::JpegDecode() |
va009039 | 1:58dfd5386a92 | 24 | { |
va009039 | 1:58dfd5386a92 | 25 | DC_count = 0; |
va009039 | 1:58dfd5386a92 | 26 | AC_count = 0; |
va009039 | 1:58dfd5386a92 | 27 | } |
va009039 | 1:58dfd5386a92 | 28 | |
va009039 | 1:58dfd5386a92 | 29 | void JpegDecode::outputDC(int mcu, int block, int value) |
va009039 | 1:58dfd5386a92 | 30 | { |
va009039 | 1:58dfd5386a92 | 31 | DC_count++; |
va009039 | 1:58dfd5386a92 | 32 | } |
va009039 | 1:58dfd5386a92 | 33 | |
va009039 | 1:58dfd5386a92 | 34 | void JpegDecode::outputAC(int mcu, int block, int scan, int value) |
va009039 | 1:58dfd5386a92 | 35 | { |
va009039 | 1:58dfd5386a92 | 36 | AC_count++; |
va009039 | 1:58dfd5386a92 | 37 | } |
va009039 | 1:58dfd5386a92 | 38 | |
va009039 | 1:58dfd5386a92 | 39 | void JpegDecode::outputMARK(uint8_t c) |
va009039 | 1:58dfd5386a92 | 40 | { |
va009039 | 1:58dfd5386a92 | 41 | } |
va009039 | 1:58dfd5386a92 | 42 | |
va009039 | 1:58dfd5386a92 | 43 | int main() { |
va009039 | 1:58dfd5386a92 | 44 | pc.baud(921600); |
va009039 | 1:58dfd5386a92 | 45 | printf("%s\n", __FILE__); |
va009039 | 1:58dfd5386a92 | 46 | |
va009039 | 1:58dfd5386a92 | 47 | JpegDecode* decode = new JpegDecode; |
va009039 | 1:58dfd5386a92 | 48 | ASSERT(decode); |
va009039 | 1:58dfd5386a92 | 49 | while(1) { |
va009039 | 1:58dfd5386a92 | 50 | char path[128]; |
va009039 | 1:58dfd5386a92 | 51 | printf("JPEG file: "); |
va009039 | 1:58dfd5386a92 | 52 | gets(path); |
va009039 | 1:58dfd5386a92 | 53 | FILE* fp = fopen(path, "rb"); |
va009039 | 1:58dfd5386a92 | 54 | if (fp == NULL) { |
va009039 | 1:58dfd5386a92 | 55 | printf("file open error %s\n", path); |
va009039 | 1:58dfd5386a92 | 56 | continue; |
va009039 | 1:58dfd5386a92 | 57 | } |
va009039 | 1:58dfd5386a92 | 58 | vector<uint8_t> image; |
va009039 | 1:58dfd5386a92 | 59 | while(1) { |
va009039 | 1:58dfd5386a92 | 60 | int c = fgetc(fp); |
va009039 | 1:58dfd5386a92 | 61 | if (c == EOF) { |
va009039 | 1:58dfd5386a92 | 62 | break; |
va009039 | 1:58dfd5386a92 | 63 | } |
va009039 | 1:58dfd5386a92 | 64 | image.push_back(c); |
va009039 | 1:58dfd5386a92 | 65 | } |
va009039 | 1:58dfd5386a92 | 66 | fclose(fp); |
va009039 | 1:58dfd5386a92 | 67 | printf("%s %d bytes\n", path, image.size()); |
va009039 | 1:58dfd5386a92 | 68 | decode->DC_count = 0; |
va009039 | 1:58dfd5386a92 | 69 | decode->AC_count = 0; |
va009039 | 1:58dfd5386a92 | 70 | Timer t; |
va009039 | 1:58dfd5386a92 | 71 | t.reset(); |
va009039 | 1:58dfd5386a92 | 72 | t.start(); |
va009039 | 1:58dfd5386a92 | 73 | decode->clear(); |
va009039 | 1:58dfd5386a92 | 74 | for(int i = 0; i < image.size(); i++) { |
va009039 | 1:58dfd5386a92 | 75 | decode->input(image[i]); |
va009039 | 1:58dfd5386a92 | 76 | } |
va009039 | 1:58dfd5386a92 | 77 | t.stop(); |
va009039 | 1:58dfd5386a92 | 78 | printf("DC: %d AC: %d benchmark: %d ms\n", decode->DC_count, decode->AC_count, t.read_ms()); |
va009039 | 1:58dfd5386a92 | 79 | } |
va009039 | 1:58dfd5386a92 | 80 | } |
va009039 | 1:58dfd5386a92 | 81 | |
va009039 | 1:58dfd5386a92 | 82 | #endif |