Richard Sewell
/
ucam
This is the code we showed at Uncraftivism
Frame.h@2:01115080f6da, 2009-12-14 (annotated)
- Committer:
- jarkman
- Date:
- Mon Dec 14 08:28:21 2009 +0000
- Revision:
- 2:01115080f6da
- Parent:
- 0:57f4fdadc97f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jarkman | 0:57f4fdadc97f | 1 | |
jarkman | 0:57f4fdadc97f | 2 | // We're on an LPC2368: |
jarkman | 0:57f4fdadc97f | 3 | // http://www.standardics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc23xx.pdf |
jarkman | 0:57f4fdadc97f | 4 | // so we have 32k of RAM available |
jarkman | 0:57f4fdadc97f | 5 | // The faster MBEDs use the 1768, with 64k of RAM |
jarkman | 0:57f4fdadc97f | 6 | |
jarkman | 0:57f4fdadc97f | 7 | // Assume we will work at 80x60, 1 byte per pixel, hence 5k/frame |
jarkman | 0:57f4fdadc97f | 8 | |
jarkman | 0:57f4fdadc97f | 9 | // This class keeps an array of reusable frames - |
jarkman | 0:57f4fdadc97f | 10 | // Get one with a call of Frame::allocFrame, |
jarkman | 0:57f4fdadc97f | 11 | // Give it back with Frame::releaseFrame |
jarkman | 0:57f4fdadc97f | 12 | |
jarkman | 0:57f4fdadc97f | 13 | #define MAX_FRAMES 10 |
jarkman | 0:57f4fdadc97f | 14 | |
jarkman | 0:57f4fdadc97f | 15 | class Frame |
jarkman | 0:57f4fdadc97f | 16 | { |
jarkman | 0:57f4fdadc97f | 17 | private: |
jarkman | 0:57f4fdadc97f | 18 | Frame(); |
jarkman | 0:57f4fdadc97f | 19 | ~Frame(); |
jarkman | 0:57f4fdadc97f | 20 | void init( uint8_t pixelFormat, uint16_t width, uint16_t height, uint32_t frameSize ); |
jarkman | 0:57f4fdadc97f | 21 | |
jarkman | 0:57f4fdadc97f | 22 | public: |
jarkman | 0:57f4fdadc97f | 23 | uint16_t getPixel( uint32_t p ); |
jarkman | 0:57f4fdadc97f | 24 | void setPixel( uint32_t p, uint16_t ); |
jarkman | 0:57f4fdadc97f | 25 | void writeToFile( char *filename ); |
jarkman | 0:57f4fdadc97f | 26 | static void readFromFile( char *filename, Frame **frame ); |
jarkman | 0:57f4fdadc97f | 27 | |
jarkman | 0:57f4fdadc97f | 28 | |
jarkman | 0:57f4fdadc97f | 29 | // Use these methods to manage a pool of frames to avoid fragmentation |
jarkman | 0:57f4fdadc97f | 30 | static void initFrames(); |
jarkman | 0:57f4fdadc97f | 31 | static void allocFrame( Frame **frame, uint8_t pixelFormat, uint16_t width, uint16_t height, uint16_t frameSize ); |
jarkman | 0:57f4fdadc97f | 32 | static void releaseFrame( Frame **frame ); |
jarkman | 0:57f4fdadc97f | 33 | static void cloneFrame( Frame **clone, Frame* original ); |
jarkman | 0:57f4fdadc97f | 34 | |
jarkman | 0:57f4fdadc97f | 35 | private: |
jarkman | 0:57f4fdadc97f | 36 | static Frame* m_frames[MAX_FRAMES]; |
jarkman | 0:57f4fdadc97f | 37 | |
jarkman | 0:57f4fdadc97f | 38 | public: |
jarkman | 0:57f4fdadc97f | 39 | uint8_t *m_pixels; |
jarkman | 0:57f4fdadc97f | 40 | uint16_t m_width; |
jarkman | 0:57f4fdadc97f | 41 | uint16_t m_height; |
jarkman | 0:57f4fdadc97f | 42 | uint8_t m_pixelFormat; |
jarkman | 0:57f4fdadc97f | 43 | uint32_t m_frameSize; |
jarkman | 0:57f4fdadc97f | 44 | uint8_t m_bitsPerPixel; |
jarkman | 0:57f4fdadc97f | 45 | uint32_t m_numPixels; |
jarkman | 0:57f4fdadc97f | 46 | bool m_deleted; |
jarkman | 0:57f4fdadc97f | 47 | bool m_bad; |
jarkman | 0:57f4fdadc97f | 48 | |
jarkman | 0:57f4fdadc97f | 49 | }; |