BaseJpegDeocde exampe program
Dependencies: BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos
Fork of BaseJpegDecode by
benchmark_BaseJpegDecode.cpp@3:2709bbf8baae, 2012-10-25 (annotated)
- Committer:
- va009039
- Date:
- Thu Oct 25 11:02:17 2012 +0000
- Revision:
- 3:2709bbf8baae
- Parent:
- 1:58dfd5386a92
support DQT
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 | 3:2709bbf8baae | 4 | #include "Benchmark_data.h" |
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 | Serial pc(USBTX, USBRX); |
va009039 | 1:58dfd5386a92 | 10 | |
va009039 | 1:58dfd5386a92 | 11 | class JpegDecode : public BaseJpegDecode { |
va009039 | 1:58dfd5386a92 | 12 | public: |
va009039 | 1:58dfd5386a92 | 13 | JpegDecode(); |
va009039 | 1:58dfd5386a92 | 14 | virtual void outputDC(int mcu, int block, int value); |
va009039 | 1:58dfd5386a92 | 15 | virtual void outputAC(int mcu, int block, int scan, int value); |
va009039 | 1:58dfd5386a92 | 16 | virtual void outputMARK(uint8_t c); |
va009039 | 1:58dfd5386a92 | 17 | int DC_count; |
va009039 | 1:58dfd5386a92 | 18 | int AC_count; |
va009039 | 1:58dfd5386a92 | 19 | }; |
va009039 | 1:58dfd5386a92 | 20 | |
va009039 | 1:58dfd5386a92 | 21 | JpegDecode::JpegDecode() |
va009039 | 1:58dfd5386a92 | 22 | { |
va009039 | 1:58dfd5386a92 | 23 | DC_count = 0; |
va009039 | 1:58dfd5386a92 | 24 | AC_count = 0; |
va009039 | 1:58dfd5386a92 | 25 | } |
va009039 | 1:58dfd5386a92 | 26 | |
va009039 | 1:58dfd5386a92 | 27 | void JpegDecode::outputDC(int mcu, int block, int value) |
va009039 | 1:58dfd5386a92 | 28 | { |
va009039 | 1:58dfd5386a92 | 29 | DC_count++; |
va009039 | 1:58dfd5386a92 | 30 | } |
va009039 | 1:58dfd5386a92 | 31 | |
va009039 | 1:58dfd5386a92 | 32 | void JpegDecode::outputAC(int mcu, int block, int scan, int value) |
va009039 | 1:58dfd5386a92 | 33 | { |
va009039 | 1:58dfd5386a92 | 34 | AC_count++; |
va009039 | 1:58dfd5386a92 | 35 | } |
va009039 | 1:58dfd5386a92 | 36 | |
va009039 | 1:58dfd5386a92 | 37 | void JpegDecode::outputMARK(uint8_t c) |
va009039 | 1:58dfd5386a92 | 38 | { |
va009039 | 1:58dfd5386a92 | 39 | } |
va009039 | 1:58dfd5386a92 | 40 | |
va009039 | 3:2709bbf8baae | 41 | JpegDecode* decode; |
va009039 | 3:2709bbf8baae | 42 | |
va009039 | 3:2709bbf8baae | 43 | void benchmark(uint8_t* image, int size) |
va009039 | 3:2709bbf8baae | 44 | { |
va009039 | 3:2709bbf8baae | 45 | decode->DC_count = 0; |
va009039 | 3:2709bbf8baae | 46 | decode->AC_count = 0; |
va009039 | 3:2709bbf8baae | 47 | #ifdef JPEG_USE_REPORT_CODE |
va009039 | 3:2709bbf8baae | 48 | decode->report_scan_count = 0; |
va009039 | 3:2709bbf8baae | 49 | decode->report_scan_dc_count = 0; |
va009039 | 3:2709bbf8baae | 50 | decode->report_scan_ac_count = 0; |
va009039 | 3:2709bbf8baae | 51 | #endif |
va009039 | 3:2709bbf8baae | 52 | Timer t; |
va009039 | 3:2709bbf8baae | 53 | t.reset(); |
va009039 | 3:2709bbf8baae | 54 | t.start(); |
va009039 | 3:2709bbf8baae | 55 | decode->clear(); |
va009039 | 3:2709bbf8baae | 56 | for(int i = 0; i < size; i++) { |
va009039 | 3:2709bbf8baae | 57 | decode->input(image[i]); |
va009039 | 3:2709bbf8baae | 58 | } |
va009039 | 3:2709bbf8baae | 59 | t.stop(); |
va009039 | 3:2709bbf8baae | 60 | |
va009039 | 3:2709bbf8baae | 61 | printf("%p %d bytes\n", image, size); |
va009039 | 3:2709bbf8baae | 62 | for(int tq = 0; tq < 2; tq++) { |
va009039 | 3:2709bbf8baae | 63 | printf("DQT(%d):", tq); |
va009039 | 3:2709bbf8baae | 64 | for(int i = 0; i < 64; i++) { |
va009039 | 3:2709bbf8baae | 65 | printf(" %d", decode->qt[tq][i]); |
va009039 | 3:2709bbf8baae | 66 | } |
va009039 | 3:2709bbf8baae | 67 | printf("\n"); |
va009039 | 3:2709bbf8baae | 68 | } |
va009039 | 3:2709bbf8baae | 69 | printf("SOF0: width: %d height: %d yblocks: %d\n", decode->width, decode->height, decode->m_yblocks); |
va009039 | 3:2709bbf8baae | 70 | printf("Scan: DC: %d AC: %d\n", decode->DC_count, decode->AC_count); |
va009039 | 3:2709bbf8baae | 71 | #ifdef JPEG_USE_REPORT_CODE |
va009039 | 3:2709bbf8baae | 72 | printf("report: scan_count: %d\n", decode->report_scan_count); |
va009039 | 3:2709bbf8baae | 73 | printf("report: scan_dc_count: %d\n", decode->report_scan_dc_count); |
va009039 | 3:2709bbf8baae | 74 | printf("report: scan_ac_count: %d\n", decode->report_scan_ac_count); |
va009039 | 3:2709bbf8baae | 75 | #endif |
va009039 | 3:2709bbf8baae | 76 | printf("benchmark: %d ms\n", t.read_ms()); |
va009039 | 3:2709bbf8baae | 77 | } |
va009039 | 3:2709bbf8baae | 78 | |
va009039 | 1:58dfd5386a92 | 79 | int main() { |
va009039 | 1:58dfd5386a92 | 80 | pc.baud(921600); |
va009039 | 1:58dfd5386a92 | 81 | printf("%s\n", __FILE__); |
va009039 | 1:58dfd5386a92 | 82 | |
va009039 | 3:2709bbf8baae | 83 | decode = new JpegDecode; |
va009039 | 1:58dfd5386a92 | 84 | ASSERT(decode); |
va009039 | 3:2709bbf8baae | 85 | |
va009039 | 3:2709bbf8baae | 86 | benchmark(c270_cam0001_jpg, sizeof(c270_cam0001_jpg)); |
va009039 | 3:2709bbf8baae | 87 | benchmark(vx700_cam0001_jpg, sizeof(vx700_cam0001_jpg)); |
va009039 | 3:2709bbf8baae | 88 | |
va009039 | 3:2709bbf8baae | 89 | printf("----\n"); |
va009039 | 3:2709bbf8baae | 90 | exit(1); |
va009039 | 1:58dfd5386a92 | 91 | } |
va009039 | 1:58dfd5386a92 | 92 | |
va009039 | 3:2709bbf8baae | 93 | #endif |