summaryrefslogtreecommitdiff
path: root/AVStream/avscamera/sys/Synthesizer.cpp
diff options
context:
space:
mode:
authorWei Mao <[email protected]>2017-03-17 20:14:57 -0700
committerWei Mao <[email protected]>2017-03-17 20:14:57 -0700
commit406cf3e4c6cd251bf69cdd8d7b6433f3477d3980 (patch)
tree15ca9253d190ab5e16cde06526dc17b486f32a22 /AVStream/avscamera/sys/Synthesizer.cpp
parent1a3e0d580380e58bf336a242d2affc8a1e2d1ddf (diff)
Use lower case
Diffstat (limited to 'AVStream/avscamera/sys/Synthesizer.cpp')
-rw-r--r--AVStream/avscamera/sys/Synthesizer.cpp1558
1 files changed, 0 insertions, 1558 deletions
diff --git a/AVStream/avscamera/sys/Synthesizer.cpp b/AVStream/avscamera/sys/Synthesizer.cpp
deleted file mode 100644
index 4f591424..00000000
--- a/AVStream/avscamera/sys/Synthesizer.cpp
+++ /dev/null
@@ -1,1558 +0,0 @@
-/**************************************************************************
-
- A/V Stream Camera Sample
-
- Copyright (c) 2014, Microsoft Corporation.
-
- File:
-
- Synthesizer.cpp
-
- Abstract:
-
- This file contains the implementation of CSynthesizer.
-
- The base image synthesis and overlay class. These classes provide
- image synthesis (pixel, color-bar, etc...) onto buffers of various
- formats.
-
- Internally, all CSynthesizer objects represent a pixel as a 32 bit
- quantity with 8 bits per sample. The base CSynthesizer implements
- all rendering functionality with this assumption in mind. It
- simplifies rendering substantially and means we do not need to re-
- implement rendering functions for each format.
-
- Most end formats can be synthesized from this uncompressed format
- with overhead that is slightly worse than a copy. Color spaces are
- handled by using a rendering palette that is unique for each.
-
- History:
-
- created 04/14/2014
-
-**************************************************************************/
-
-#include "Common.h"
-
-/**************************************************************************
-
- PAGED CODE
-
-**************************************************************************/
-
-#ifdef ALLOC_PRAGMA
-#pragma code_seg("PAGE")
-#endif // ALLOC_PRAGMA
-
-/**************************************************************************
-
- Constants
-
-**************************************************************************/
-
-//
-// Standard definition of EIA-189-A color bars. The actual color definitions
-// are either in CRGB24Synthesizer or CYUVSynthesizer.
-//
-
-const COLOR CSynthesizer::m_ColorBars[8] =
-{MAGENTA, BLUE, GREEN, BLACK, WHITE, YELLOW, RED, CYAN };
-
-
-//
-// Corner registration block colors.
-//
-const COLOR g_TopLeft = GREY;
-const COLOR g_TopRight = BLUE;
-const COLOR g_BotLeft = RED;
-const COLOR g_BotRight = GREEN;
-
-//
-// Persistent stats.
-//
-LONGLONG CSynthesizer::m_RelPts=0;
-LONGLONG CSynthesizer::m_QpcTime=0;
-ULONG CSynthesizer::m_Frame=0;
-
-//
-// The following is an 8x8 bitmapped font for use in the text overlay
-// code.
-//
-const UCHAR
-CSynthesizer::
-m_FontData [2][256][8] =
-{
- {
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e},
- {0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e},
- {0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00},
- {0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00},
- {0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c},
- {0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c},
- {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00},
- {0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff},
- {0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00},
- {0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff},
- {0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78},
- {0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18},
- {0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0},
- {0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0},
- {0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99},
- {0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00},
- {0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00},
- {0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18},
- {0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00},
- {0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00},
- {0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78},
- {0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00},
- {0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff},
- {0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00},
- {0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00},
- {0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00},
- {0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00},
- {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00},
- {0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00},
- {0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00},
- {0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00},
- {0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00},
- {0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00},
- {0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00},
- {0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00},
- {0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00},
- {0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00},
- {0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00},
- {0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60},
- {0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00},
- {0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00},
- {0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00},
- {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00},
- {0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00},
- {0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00},
- {0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00},
- {0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00},
- {0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00},
- {0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00},
- {0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00},
- {0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00},
- {0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00},
- {0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60},
- {0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00},
- {0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00},
- {0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00},
- {0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00},
- {0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00},
- {0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00},
- {0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00},
- {0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00},
- {0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00},
- {0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00},
- {0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00},
- {0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00},
- {0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00},
- {0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00},
- {0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00},
- {0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00},
- {0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00},
- {0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00},
- {0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00},
- {0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00},
- {0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00},
- {0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00},
- {0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00},
- {0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00},
- {0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00},
- {0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00},
- {0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00},
- {0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00},
- {0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00},
- {0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00},
- {0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00},
- {0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00},
- {0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00},
- {0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00},
- {0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff},
- {0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00},
- {0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00},
- {0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00},
- {0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00},
- {0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00},
- {0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00},
- {0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8},
- {0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00},
- {0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00},
- {0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78},
- {0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00},
- {0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00},
- {0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00},
- {0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00},
- {0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00},
- {0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0},
- {0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e},
- {0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00},
- {0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00},
- {0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00},
- {0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00},
- {0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00},
- {0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00},
- {0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00},
- {0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8},
- {0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00},
- {0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00},
- {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00},
- {0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00},
- {0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00},
- {0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x18, 0x0c, 0x78},
- {0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00},
- {0x1c, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00},
- {0x7e, 0xc3, 0x3c, 0x06, 0x3e, 0x66, 0x3f, 0x00},
- {0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00},
- {0xe0, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00},
- {0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00},
- {0x00, 0x00, 0x78, 0xc0, 0xc0, 0x78, 0x0c, 0x38},
- {0x7e, 0xc3, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00},
- {0xcc, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00},
- {0xe0, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00},
- {0xcc, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00},
- {0x7c, 0xc6, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00},
- {0xe0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00},
- {0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00},
- {0x30, 0x30, 0x00, 0x78, 0xcc, 0xfc, 0xcc, 0x00},
- {0x1c, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00},
- {0x00, 0x00, 0x7f, 0x0c, 0x7f, 0xcc, 0x7f, 0x00},
- {0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00},
- {0x78, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00},
- {0x00, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00},
- {0x00, 0xe0, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00},
- {0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00},
- {0x00, 0xe0, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00},
- {0x00, 0xcc, 0x00, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8},
- {0xc3, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x00},
- {0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00},
- {0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18},
- {0x38, 0x6c, 0x64, 0xf0, 0x60, 0xe6, 0xfc, 0x00},
- {0xcc, 0xcc, 0x78, 0xfc, 0x30, 0xfc, 0x30, 0x30},
- {0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7},
- {0x0e, 0x1b, 0x18, 0x3c, 0x18, 0x18, 0xd8, 0x70},
- {0x1c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00},
- {0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00},
- {0x00, 0x1c, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00},
- {0x00, 0x1c, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00},
- {0x00, 0xf8, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0x00},
- {0xfc, 0x00, 0xcc, 0xec, 0xfc, 0xdc, 0xcc, 0x00},
- {0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00},
- {0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00},
- {0x30, 0x00, 0x30, 0x60, 0xc0, 0xcc, 0x78, 0x00},
- {0x00, 0x00, 0x00, 0xfc, 0xc0, 0xc0, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00},
- {0xc3, 0xc6, 0xcc, 0xde, 0x33, 0x66, 0xcc, 0x0f},
- {0xc3, 0xc6, 0xcc, 0xdb, 0x37, 0x6f, 0xcf, 0x03},
- {0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00},
- {0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00},
- {0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00},
- {0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88},
- {0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa},
- {0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, 0xdb, 0xee},
- {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18},
- {0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18},
- {0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18},
- {0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36},
- {0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36},
- {0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18},
- {0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36},
- {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36},
- {0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36},
- {0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00},
- {0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00},
- {0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18},
- {0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00},
- {0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18},
- {0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18},
- {0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00},
- {0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18},
- {0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18},
- {0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36},
- {0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36},
- {0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36},
- {0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36},
- {0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00},
- {0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36},
- {0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00},
- {0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18},
- {0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36},
- {0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00},
- {0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18},
- {0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36},
- {0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36},
- {0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18},
- {0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff},
- {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0},
- {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f},
- {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00},
- {0x00, 0x78, 0xcc, 0xf8, 0xcc, 0xf8, 0xc0, 0xc0},
- {0x00, 0xfc, 0xcc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00},
- {0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00},
- {0xfc, 0xcc, 0x60, 0x30, 0x60, 0xcc, 0xfc, 0x00},
- {0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00},
- {0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xc0},
- {0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00},
- {0xfc, 0x30, 0x78, 0xcc, 0xcc, 0x78, 0x30, 0xfc},
- {0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00},
- {0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00},
- {0x1c, 0x30, 0x18, 0x7c, 0xcc, 0xcc, 0x78, 0x00},
- {0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00},
- {0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0},
- {0x38, 0x60, 0xc0, 0xf8, 0xc0, 0x60, 0x38, 0x00},
- {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00},
- {0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00},
- {0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0xfc, 0x00},
- {0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xfc, 0x00},
- {0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xfc, 0x00},
- {0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18},
- {0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70},
- {0x30, 0x30, 0x00, 0xfc, 0x00, 0x30, 0x30, 0x00},
- {0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00},
- {0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00},
- {0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c},
- {0x78, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00},
- {0x70, 0x18, 0x30, 0x60, 0x78, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
- },
- {
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x7e, 0x81, 0xa9, 0x8d, 0x8d, 0xa9, 0x81, 0x7e},
- {0x7e, 0xff, 0xd7, 0xf3, 0xf3, 0xd7, 0xff, 0x7e},
- {0x00, 0x70, 0xf8, 0xfc, 0x7e, 0xfc, 0xf8, 0x70},
- {0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10},
- {0x00, 0x18, 0x5d, 0xff, 0xff, 0xff, 0x5d, 0x18},
- {0x00, 0x08, 0x1d, 0x3f, 0xff, 0x3f, 0x1d, 0x08},
- {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00},
- {0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff},
- {0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00},
- {0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff},
- {0xf0, 0xe0, 0xfe, 0xbf, 0x11, 0x11, 0x1f, 0x0e},
- {0x00, 0x72, 0xfa, 0x8f, 0x8f, 0xfa, 0x72, 0x00},
- {0xe0, 0xe0, 0xa0, 0xa0, 0xfe, 0xff, 0x07, 0x03},
- {0xfc, 0xfe, 0xa6, 0xa0, 0xa0, 0xfe, 0xff, 0x03},
- {0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99},
- {0x00, 0x10, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe},
- {0x00, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x10},
- {0x00, 0x24, 0x66, 0xff, 0xff, 0x66, 0x24, 0x00},
- {0x00, 0xfa, 0xfa, 0x00, 0x00, 0xfa, 0xfa, 0x00},
- {0xfe, 0xfe, 0x80, 0xfe, 0xfe, 0x90, 0xf0, 0x60},
- {0x40, 0xc0, 0x9a, 0xbf, 0xa5, 0xfd, 0x5b, 0x02},
- {0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x00},
- {0x01, 0x29, 0x6d, 0xff, 0xff, 0x6d, 0x29, 0x01},
- {0x00, 0x20, 0x60, 0xfe, 0xfe, 0x60, 0x20, 0x00},
- {0x00, 0x08, 0x0c, 0xfe, 0xfe, 0x0c, 0x08, 0x00},
- {0x00, 0x10, 0x38, 0x7c, 0x54, 0x10, 0x10, 0x10},
- {0x00, 0x10, 0x10, 0x10, 0x54, 0x7c, 0x38, 0x10},
- {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3c, 0x3c},
- {0x10, 0x38, 0x7c, 0x10, 0x10, 0x7c, 0x38, 0x10},
- {0x0c, 0x1c, 0x3c, 0x7c, 0x7c, 0x3c, 0x1c, 0x0c},
- {0x60, 0x70, 0x78, 0x7c, 0x7c, 0x78, 0x70, 0x60},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x60, 0xfa, 0xfa, 0x60, 0x00},
- {0x00, 0x00, 0xe0, 0xe0, 0x00, 0xe0, 0xe0, 0x00},
- {0x00, 0x28, 0xfe, 0xfe, 0x28, 0xfe, 0xfe, 0x28},
- {0x00, 0x00, 0x48, 0x5c, 0xd6, 0xd6, 0x74, 0x24},
- {0x00, 0x46, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x62},
- {0x00, 0x12, 0x5e, 0xec, 0xba, 0xf2, 0x5e, 0x0c},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x20},
- {0x00, 0x00, 0x00, 0x82, 0xc6, 0x7c, 0x38, 0x00},
- {0x00, 0x00, 0x00, 0x38, 0x7c, 0xc6, 0x82, 0x00},
- {0x10, 0x54, 0x7c, 0x38, 0x38, 0x7c, 0x54, 0x10},
- {0x00, 0x00, 0x10, 0x10, 0x7c, 0x7c, 0x10, 0x10},
- {0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x01, 0x00},
- {0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
- {0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00},
- {0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06},
- {0x00, 0x7c, 0xfe, 0xb2, 0x9a, 0x8e, 0xfe, 0x7c},
- {0x00, 0x00, 0x02, 0x02, 0xfe, 0xfe, 0x42, 0x02},
- {0x00, 0x00, 0x66, 0xf6, 0x92, 0x9a, 0xce, 0x46},
- {0x00, 0x00, 0x6c, 0xfe, 0x92, 0x92, 0xc6, 0x44},
- {0x00, 0x0a, 0xfe, 0xfe, 0xca, 0x68, 0x38, 0x18},
- {0x00, 0x00, 0x9c, 0xbe, 0xa2, 0xa2, 0xe6, 0xe4},
- {0x00, 0x00, 0x0c, 0x9e, 0x92, 0xd2, 0x7e, 0x3c},
- {0x00, 0x00, 0xe0, 0xf0, 0x9e, 0x8e, 0xc0, 0xc0},
- {0x00, 0x00, 0x6c, 0xfe, 0x92, 0x92, 0xfe, 0x6c},
- {0x00, 0x00, 0x78, 0xfc, 0x96, 0x92, 0xf2, 0x60},
- {0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x66, 0x67, 0x01, 0x00},
- {0x00, 0x00, 0x00, 0x82, 0xc6, 0x6c, 0x38, 0x10},
- {0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24},
- {0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x82, 0x00},
- {0x00, 0x00, 0x60, 0xf0, 0x9a, 0x8a, 0xc0, 0x40},
- {0x00, 0x78, 0xf8, 0xba, 0xba, 0x82, 0xfe, 0x7c},
- {0x00, 0x00, 0x3e, 0x7e, 0xc8, 0xc8, 0x7e, 0x3e},
- {0x00, 0x6c, 0xfe, 0x92, 0x92, 0xfe, 0xfe, 0x82},
- {0x00, 0x44, 0xc6, 0x82, 0x82, 0xc6, 0x7c, 0x38},
- {0x00, 0x38, 0x7c, 0xc6, 0x82, 0xfe, 0xfe, 0x82},
- {0x00, 0xc6, 0x82, 0xba, 0x92, 0xfe, 0xfe, 0x82},
- {0x00, 0xc0, 0x80, 0xb8, 0x92, 0xfe, 0xfe, 0x82},
- {0x00, 0x4e, 0xce, 0x8a, 0x82, 0xc6, 0x7c, 0x38},
- {0x00, 0x00, 0xfe, 0xfe, 0x10, 0x10, 0xfe, 0xfe},
- {0x00, 0x00, 0x00, 0x82, 0xfe, 0xfe, 0x82, 0x00},
- {0x00, 0x80, 0xfc, 0xfe, 0x82, 0x02, 0x0e, 0x0c},
- {0x00, 0xc6, 0xee, 0x38, 0x10, 0xfe, 0xfe, 0x82},
- {0x00, 0x0e, 0x06, 0x02, 0x82, 0xfe, 0xfe, 0x82},
- {0x00, 0xfe, 0xfe, 0x70, 0x38, 0x70, 0xfe, 0xfe},
- {0x00, 0xfe, 0xfe, 0x18, 0x30, 0x60, 0xfe, 0xfe},
- {0x00, 0x38, 0x7c, 0xc6, 0x82, 0xc6, 0x7c, 0x38},
- {0x00, 0x60, 0xf0, 0x90, 0x92, 0xfe, 0xfe, 0x82},
- {0x00, 0x00, 0x7a, 0xfe, 0x8e, 0x84, 0xfc, 0x78},
- {0x00, 0x66, 0xfe, 0x98, 0x90, 0xfe, 0xfe, 0x82},
- {0x00, 0x00, 0x4c, 0xce, 0x9a, 0xb2, 0xf6, 0x64},
- {0x00, 0x00, 0xc0, 0x82, 0xfe, 0xfe, 0x82, 0xc0},
- {0x00, 0x00, 0xfe, 0xfe, 0x02, 0x02, 0xfe, 0xfe},
- {0x00, 0x00, 0xf8, 0xfc, 0x06, 0x06, 0xfc, 0xf8},
- {0x00, 0xfe, 0xfe, 0x0c, 0x18, 0x0c, 0xfe, 0xfe},
- {0x00, 0xc2, 0xe6, 0x3c, 0x18, 0x3c, 0xe6, 0xc2},
- {0x00, 0x00, 0xe0, 0xf2, 0x1e, 0x1e, 0xf2, 0xe0},
- {0x00, 0xce, 0xe6, 0xb2, 0x9a, 0x8e, 0xc6, 0xe2},
- {0x00, 0x00, 0x00, 0x82, 0x82, 0xfe, 0xfe, 0x00},
- {0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80},
- {0x00, 0x00, 0x00, 0xfe, 0xfe, 0x82, 0x82, 0x00},
- {0x00, 0x10, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x10},
- {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- {0x00, 0x00, 0x00, 0x20, 0xe0, 0xc0, 0x00, 0x00},
- {0x00, 0x02, 0x1e, 0x3c, 0x2a, 0x2a, 0x2e, 0x04},
- {0x00, 0x0c, 0x1e, 0x12, 0x12, 0xfc, 0xfe, 0x82},
- {0x00, 0x00, 0x14, 0x36, 0x22, 0x22, 0x3e, 0x1c},
- {0x00, 0x02, 0xfe, 0xfc, 0x92, 0x12, 0x1e, 0x0c},
- {0x00, 0x00, 0x18, 0x3a, 0x2a, 0x2a, 0x3e, 0x1c},
- {0x00, 0x00, 0x40, 0xc0, 0x92, 0xfe, 0x7e, 0x12},
- {0x00, 0x20, 0x3e, 0x1f, 0x25, 0x25, 0x3d, 0x19},
- {0x00, 0x1e, 0x3e, 0x20, 0x10, 0xfe, 0xfe, 0x82},
- {0x00, 0x00, 0x00, 0x02, 0xbe, 0xbe, 0x22, 0x00},
- {0x00, 0x00, 0xbe, 0xbf, 0x01, 0x01, 0x07, 0x06},
- {0x00, 0x22, 0x36, 0x1c, 0x08, 0xfe, 0xfe, 0x82},
- {0x00, 0x00, 0x00, 0x02, 0xfe, 0xfe, 0x82, 0x00},
- {0x00, 0x1e, 0x3e, 0x38, 0x1c, 0x18, 0x3e, 0x3e},
- {0x00, 0x00, 0x1e, 0x3e, 0x20, 0x20, 0x3e, 0x3e},
- {0x00, 0x00, 0x1c, 0x3e, 0x22, 0x22, 0x3e, 0x1c},
- {0x00, 0x18, 0x3c, 0x24, 0x25, 0x1f, 0x3f, 0x21},
- {0x00, 0x21, 0x3f, 0x1f, 0x25, 0x24, 0x3c, 0x18},
- {0x00, 0x18, 0x38, 0x20, 0x32, 0x1e, 0x3e, 0x22},
- {0x00, 0x00, 0x24, 0x2e, 0x2a, 0x2a, 0x3a, 0x12},
- {0x00, 0x00, 0x24, 0x22, 0xfe, 0x7c, 0x20, 0x00},
- {0x00, 0x02, 0x3e, 0x3c, 0x02, 0x02, 0x3e, 0x3c},
- {0x00, 0x00, 0x38, 0x3c, 0x06, 0x06, 0x3c, 0x38},
- {0x00, 0x3c, 0x3e, 0x0e, 0x1c, 0x0e, 0x3e, 0x3c},
- {0x00, 0x22, 0x36, 0x1c, 0x08, 0x1c, 0x36, 0x22},
- {0x00, 0x00, 0x3e, 0x3f, 0x05, 0x05, 0x3d, 0x39},
- {0x00, 0x00, 0x26, 0x32, 0x3a, 0x2e, 0x26, 0x32},
- {0x00, 0x00, 0x82, 0x82, 0xee, 0x7c, 0x10, 0x10},
- {0x00, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x10, 0x10, 0x7c, 0xee, 0x82, 0x82},
- {0x00, 0x80, 0xc0, 0x40, 0xc0, 0x80, 0xc0, 0x40},
- {0x00, 0x0e, 0x1e, 0x32, 0x62, 0x32, 0x1e, 0x0e},
- {0x00, 0x00, 0x52, 0xdf, 0x8d, 0x89, 0xf9, 0x70},
- {0x00, 0x02, 0x5e, 0x5e, 0x02, 0x02, 0x5e, 0x5c},
- {0x00, 0x00, 0x98, 0xba, 0xaa, 0x2a, 0x3e, 0x1c},
- {0x42, 0xde, 0xbe, 0xaa, 0xaa, 0xae, 0xc4, 0x40},
- {0x00, 0x02, 0x9e, 0xbe, 0x2a, 0x2a, 0xae, 0x84},
- {0x00, 0x02, 0x1e, 0x3e, 0x2a, 0xaa, 0xae, 0x84},
- {0x00, 0x02, 0x1e, 0x3e, 0xea, 0xea, 0x2e, 0x04},
- {0x00, 0x00, 0x02, 0x27, 0x25, 0x25, 0x3c, 0x18},
- {0x40, 0xd8, 0xba, 0xaa, 0xaa, 0xbe, 0xdc, 0x40},
- {0x00, 0x00, 0x98, 0xba, 0x2a, 0x2a, 0xbe, 0x9c},
- {0x00, 0x00, 0x18, 0x3a, 0x2a, 0xaa, 0xbe, 0x9c},
- {0x00, 0x00, 0x80, 0x82, 0x3e, 0x3e, 0xa2, 0x80},
- {0x00, 0x40, 0xc2, 0xbe, 0xbe, 0xa2, 0xc0, 0x40},
- {0x00, 0x00, 0x00, 0x02, 0x3e, 0xbe, 0xa2, 0x80},
- {0x00, 0x9e, 0xbe, 0x68, 0x48, 0x68, 0xbe, 0x9e},
- {0x00, 0x00, 0x0e, 0x1e, 0xd4, 0xd4, 0x1e, 0x0e},
- {0x00, 0x00, 0xa2, 0xaa, 0xaa, 0x3e, 0x3e, 0x22},
- {0x2a, 0x2a, 0x3e, 0x3e, 0x2a, 0x2a, 0x2e, 0x04},
- {0x00, 0x92, 0xfe, 0xfe, 0x90, 0xd0, 0x7e, 0x3e},
- {0x00, 0x00, 0x4c, 0xde, 0x92, 0x92, 0xde, 0x4c},
- {0x00, 0x00, 0x4c, 0x5e, 0x12, 0x12, 0x5e, 0x4c},
- {0x00, 0x00, 0x0c, 0x1e, 0x12, 0x52, 0x5e, 0x4c},
- {0x00, 0x02, 0x5e, 0xde, 0x82, 0x82, 0xde, 0x5c},
- {0x00, 0x02, 0x1e, 0x1e, 0x02, 0x42, 0x5e, 0x5c},
- {0x00, 0x00, 0x5e, 0x5f, 0x05, 0x05, 0x5d, 0x59},
- {0x80, 0x98, 0x3c, 0x66, 0x66, 0x3c, 0x98, 0x80},
- {0x00, 0x00, 0xbc, 0xbe, 0x02, 0x02, 0xbe, 0xbc},
- {0x00, 0x24, 0x24, 0xe7, 0xe7, 0x24, 0x3c, 0x18},
- {0x00, 0x04, 0x66, 0xc2, 0x92, 0xfe, 0x7e, 0x16},
- {0x00, 0x00, 0xd4, 0xf4, 0x3f, 0x3f, 0xf4, 0xd4},
- {0x05, 0x1f, 0x6f, 0xf4, 0x90, 0x90, 0xff, 0xff},
- {0x40, 0xc0, 0x90, 0xfe, 0x7f, 0x11, 0x03, 0x02},
- {0x00, 0x02, 0x9e, 0xbe, 0xaa, 0x2a, 0x2e, 0x04},
- {0x00, 0x00, 0x00, 0x82, 0xbe, 0xbe, 0x22, 0x00},
- {0x00, 0x00, 0x4c, 0x5e, 0x52, 0x12, 0x1e, 0x0c},
- {0x00, 0x02, 0x5e, 0x5e, 0x42, 0x02, 0x1e, 0x1c},
- {0x00, 0x00, 0x0e, 0x5e, 0x50, 0x50, 0x5e, 0x5e},
- {0x00, 0x00, 0xbe, 0xbe, 0x8c, 0x98, 0xbe, 0xbe},
- {0x00, 0x14, 0xf4, 0xf4, 0x94, 0xf4, 0x64, 0x00},
- {0x00, 0x00, 0x64, 0xf4, 0x94, 0xf4, 0x64, 0x00},
- {0x00, 0x00, 0x04, 0x06, 0xa2, 0xb2, 0x1e, 0x0c},
- {0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x1c, 0x1c},
- {0x00, 0x00, 0x1c, 0x1c, 0x10, 0x10, 0x10, 0x10},
- {0x89, 0xdd, 0x77, 0x33, 0x18, 0x0c, 0xf6, 0xf2},
- {0x9f, 0xdf, 0x6e, 0x36, 0x18, 0x0c, 0xf6, 0xf2},
- {0x00, 0x00, 0x00, 0xde, 0xde, 0x00, 0x00, 0x00},
- {0x44, 0x6c, 0x38, 0x10, 0x44, 0x6c, 0x38, 0x10},
- {0x10, 0x38, 0x6c, 0x44, 0x10, 0x38, 0x6c, 0x44},
- {0x00, 0xaa, 0x00, 0x55, 0x00, 0xaa, 0x00, 0x55},
- {0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55},
- {0xee, 0xff, 0x55, 0xbb, 0xee, 0x55, 0xff, 0xbb},
- {0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0xff, 0xff, 0x08, 0x08, 0x08},
- {0x00, 0x00, 0x00, 0xff, 0xff, 0x28, 0x28, 0x28},
- {0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x08, 0x08},
- {0x00, 0x0f, 0x0f, 0x08, 0x0f, 0x0f, 0x08, 0x08},
- {0x00, 0x00, 0x00, 0x3f, 0x3f, 0x28, 0x28, 0x28},
- {0x00, 0xff, 0xff, 0x00, 0xef, 0xef, 0x28, 0x28},
- {0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00},
- {0x00, 0x3f, 0x3f, 0x20, 0x2f, 0x2f, 0x28, 0x28},
- {0x00, 0xf8, 0xf8, 0x08, 0xe8, 0xe8, 0x28, 0x28},
- {0x00, 0xf8, 0xf8, 0x08, 0xf8, 0xf8, 0x08, 0x08},
- {0x00, 0x00, 0x00, 0xf8, 0xf8, 0x28, 0x28, 0x28},
- {0x00, 0x00, 0x00, 0x0f, 0x0f, 0x08, 0x08, 0x08},
- {0x08, 0x08, 0x08, 0xf8, 0xf8, 0x00, 0x00, 0x00},
- {0x08, 0x08, 0x08, 0xf8, 0xf8, 0x08, 0x08, 0x08},
- {0x08, 0x08, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x08},
- {0x08, 0x08, 0x08, 0xff, 0xff, 0x00, 0x00, 0x00},
- {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08},
- {0x08, 0x08, 0x08, 0xff, 0xff, 0x08, 0x08, 0x08},
- {0x28, 0x28, 0x28, 0xff, 0xff, 0x00, 0x00, 0x00},
- {0x08, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00},
- {0x28, 0xe8, 0xe8, 0x08, 0xf8, 0xf8, 0x00, 0x00},
- {0x28, 0x2f, 0x2f, 0x20, 0x3f, 0x3f, 0x00, 0x00},
- {0x28, 0xe8, 0xe8, 0x08, 0xe8, 0xe8, 0x28, 0x28},
- {0x28, 0x2f, 0x2f, 0x20, 0x2f, 0x2f, 0x28, 0x28},
- {0x28, 0xef, 0xef, 0x00, 0xff, 0xff, 0x00, 0x00},
- {0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28},
- {0x28, 0xef, 0xef, 0x00, 0xef, 0xef, 0x28, 0x28},
- {0x28, 0x28, 0x28, 0xe8, 0xe8, 0x28, 0x28, 0x28},
- {0x08, 0xf8, 0xf8, 0x08, 0xf8, 0xf8, 0x08, 0x08},
- {0x28, 0x28, 0x28, 0x2f, 0x2f, 0x28, 0x28, 0x28},
- {0x08, 0x0f, 0x0f, 0x08, 0x0f, 0x0f, 0x08, 0x08},
- {0x08, 0xf8, 0xf8, 0x08, 0xf8, 0xf8, 0x00, 0x00},
- {0x28, 0x28, 0x28, 0xf8, 0xf8, 0x00, 0x00, 0x00},
- {0x28, 0x28, 0x28, 0x3f, 0x3f, 0x00, 0x00, 0x00},
- {0x08, 0x0f, 0x0f, 0x08, 0x0f, 0x0f, 0x00, 0x00},
- {0x08, 0xff, 0xff, 0x08, 0xff, 0xff, 0x08, 0x08},
- {0x28, 0x28, 0x28, 0xff, 0xff, 0x28, 0x28, 0x28},
- {0x00, 0x00, 0x00, 0xf8, 0xf8, 0x08, 0x08, 0x08},
- {0x08, 0x08, 0x08, 0x0f, 0x0f, 0x00, 0x00, 0x00},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f},
- {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff},
- {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00},
- {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0},
- {0x00, 0x22, 0x36, 0x1c, 0x36, 0x22, 0x3e, 0x1c},
- {0x00, 0x00, 0x28, 0x7c, 0x54, 0x54, 0x7f, 0x3f},
- {0x00, 0x00, 0x60, 0x60, 0x40, 0x40, 0x7e, 0x7e},
- {0x00, 0x40, 0x7e, 0x7e, 0x40, 0x7e, 0x7e, 0x40},
- {0x00, 0x00, 0xc6, 0xc6, 0x92, 0xba, 0xee, 0xc6},
- {0x00, 0x20, 0x20, 0x3c, 0x3e, 0x22, 0x3e, 0x1c},
- {0x00, 0x78, 0x7c, 0x04, 0x04, 0x7e, 0x7f, 0x01},
- {0x00, 0x40, 0x60, 0x3e, 0x7e, 0x40, 0x60, 0x20},
- {0x00, 0x00, 0x99, 0xbd, 0xe7, 0xe7, 0xbd, 0x99},
- {0x00, 0x38, 0x7c, 0xd6, 0x92, 0xd6, 0x7c, 0x38},
- {0x00, 0x32, 0x7e, 0xce, 0x80, 0xce, 0x7e, 0x32},
- {0x00, 0x00, 0x9c, 0xbe, 0xf2, 0x52, 0x1e, 0x0c},
- {0x18, 0x3c, 0x24, 0x3c, 0x3c, 0x24, 0x3c, 0x18},
- {0x18, 0xbc, 0xe4, 0x7c, 0x3c, 0x26, 0x3f, 0x19},
- {0x00, 0x00, 0x00, 0x92, 0x92, 0xd6, 0x7c, 0x38},
- {0x00, 0x00, 0x7e, 0xfe, 0x80, 0x80, 0xfe, 0x7e},
- {0x00, 0x00, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54},
- {0x00, 0x00, 0x22, 0x22, 0xfa, 0xfa, 0x22, 0x22},
- {0x00, 0x00, 0x02, 0x22, 0x72, 0xda, 0x8a, 0x02},
- {0x00, 0x00, 0x02, 0x8a, 0xda, 0x72, 0x22, 0x02},
- {0x60, 0xe0, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0xfe, 0xff, 0x01, 0x07, 0x06},
- {0x00, 0x00, 0x10, 0x10, 0xd6, 0xd6, 0x10, 0x10},
- {0x00, 0x48, 0x6c, 0x24, 0x6c, 0x48, 0x6c, 0x24},
- {0x00, 0x00, 0x60, 0xf0, 0x90, 0xf0, 0x60, 0x00},
- {0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00},
- {0x80, 0x80, 0xff, 0xff, 0x03, 0x0e, 0x0c, 0x08},
- {0x00, 0x00, 0x78, 0xf8, 0x80, 0xf8, 0xf8, 0x00},
- {0x00, 0x00, 0x00, 0x48, 0xe8, 0xb8, 0x98, 0x00},
- {0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
- }
-};
-
-BOOLEAN
-CSynthesizer::
-Initialize()
-/*++
-
-Routine Description:
-
- Class initialization.
-
- Set the buffer the synthesizer generates images to.
- Override to do any additional processing you think is needed.
-
-Arguments:
-
- none
-
-Return Value:
-
- TRUE - success.
-
---*/
-{
- PAGED_CODE();
-
- // Capture the working palette.
- // Recast it to a point to an array of primaries.
- if( !(m_Colors = GetPalette()) )
- {
- return FALSE;
- }
-
- // Clear the globals. This occurs redundantly, but hey ...
- // ... test output doesn't make sense if we don't do this.
- m_RelPts=0;
- m_QpcTime=0;
- m_Frame=0;
-
- //
- // Allocate a scratch buffer for the synthesizer.
- //
- NT_ASSERT(m_Length);
- if( !m_Length )
- {
- return FALSE;
- }
-
- m_Buffer = new (PagedPool) UCHAR[m_Length];
- NT_ASSERT(m_Buffer);
- if( !m_Buffer )
- {
- return FALSE;
- }
-
- //
- // Allocate a scratch buffer for the Gradient.
- //
- m_GradientBmp = new (PagedPool) CKsRgbQuad[m_Width * MAX_COLOR];
- NT_ASSERT(m_GradientBmp);
- if( !m_GradientBmp )
- {
- SAFE_DELETE_ARRAY( m_Buffer );
- return FALSE;
- }
-
- return TRUE;
-}
-
-LONGLONG
-ConvertPerfTime(
- _In_ LONGLONG Freq,
- _In_ LONGLONG Time
-)
-{
- PAGED_CODE();
-
- LARGE_INTEGER tL ;
- tL.QuadPart = Time;
- return KSCONVERT_PERFORMANCE_TIME( Freq, tL );
-}
-
-void
-CSynthesizer::
-Destroy()
-/*++
-
-Routine Description:
-
- Clean up from initialize.
-
- Note: A good place to generate synthesis stats.
-
-Arguments:
-
- none
-
-Return Value:
-
- void.
-
---*/
-{
- PAGED_CODE();
-
- SAFE_DELETE_ARRAY( m_Buffer );
- SAFE_DELETE_ARRAY( m_GradientBmp );
-
- // Report rendering times.
- DBG_TRACE( "Synthesis Time - Total = %lld", ConvertPerfTime( m_Frequency.QuadPart, m_SynthesisTime ) );
- DBG_TRACE( " Count = %d", m_SynthesisCount );
- DBG_TRACE( " Avg = %lld", ConvertPerfTime( m_Frequency.QuadPart, m_SynthesisCount ? m_SynthesisTime / m_SynthesisCount : 0 ) );
- DBG_TRACE( " Commit Time - Total = %lld", ConvertPerfTime( m_Frequency.QuadPart, m_CommitTime ) );
- DBG_TRACE( " Count = %d", m_CommitCount );
- DBG_TRACE( " Avg = %lld", ConvertPerfTime( m_Frequency.QuadPart, m_CommitCount ? m_CommitTime / m_CommitCount : 0 ) );
-}
-
-NTSTATUS
-CSynthesizer::
-SynthesizeBars()
-/*++
-
-Routine Description:
-
- Synthesize EIA-189-A standard color bars onto the Image. The image
- in question is the current synthesis buffer.
-
-Arguments:
-
- None
-
-Return Value:
-
- success / failure
-
---*/
-{
- PAGED_CODE();
-
- if( !m_Buffer )
- {
- return STATUS_INVALID_DEVICE_STATE;
- }
-
- const COLOR *CurColor = m_ColorBars;
- ULONG ColorCount = SIZEOF_ARRAY (m_ColorBars);
-
- //
- // Set the default cursor...
- //
- GetImageLocation (0, 0);
-
- //
- // Synthesize a single line.
- //
- PUCHAR ImageStart = m_Cursor;
- for (ULONG x = 0; x < m_Width; x++)
- {
- PutPixel (m_ColorBars [((x * ColorCount) / m_Width)]);
- }
-
- PUCHAR ImageEnd = m_Cursor;
-
- //
- // Copy the synthesized line to all subsequent lines.
- //
- for (ULONG line = 0; line < m_Height; line++)
- {
- GetImageLocation (0, line);
-
- RtlCopyMemory (
- m_Cursor,
- ImageStart,
- ImageEnd - ImageStart
- );
- }
-
- // Paint the top left and top right registrations boxes.
- GetImageLocation(0,0);
-
- ImageStart = m_Cursor;
- for(ULONG x =0; x < m_Width; x++)
- {
- if(x < (m_Height/16))
- {
- PutPixel(g_TopLeft);
- }
- else if(x > (m_Width - (m_Height / 16)))
- {
- PutPixel(g_TopRight);
- }
- else
- {
- PutPixel (m_ColorBars [((x * ColorCount) / m_Width)]);
- }
- }
-
- ImageEnd = m_Cursor;
-
- for (ULONG line = 0; line < m_Height/16; line++)
- {
- GetImageLocation (0, line);
-
- RtlCopyMemory (
- m_Cursor,
- ImageStart,
- ImageEnd - ImageStart
- );
- }
-
- // Paint the bottom left and bottom right registrations boxes.
- GetImageLocation(0, (15*m_Height) / 16);
- ImageStart = m_Cursor;
- for(ULONG x =0; x < m_Width; x++)
- {
- if(x < (m_Height/16))
- {
- PutPixel(g_BotLeft);
- }
- else if(x > (m_Width - (m_Height / 16)))
- {
- PutPixel(g_BotRight);
- }
- else
- {
- PutPixel (m_ColorBars [((x * ColorCount) / m_Width)]);
- }
- }
-
- ImageEnd = m_Cursor;
-
- for (ULONG line = 0; line < m_Height/16; line++)
- {
- GetImageLocation (0, line+(15*m_Height) / 16);
-
- RtlCopyMemory (
- m_Cursor,
- ImageStart,
- ImageEnd - ImageStart
- );
- }
-
- return STATUS_SUCCESS;
-}
-
-void
-CSynthesizer::
-EncodeNumber(
- _In_ ULONG LocY,
- _In_ UINT32 Number,
- _In_ COLOR LowColor,
- _In_ COLOR HighColor
-)
-/*
-Routine Description:
-
- Overlays an encoded number over the synthesized image. The image buffer
- used is the set synthesis buffer. The pattern is scaled to fit the image.
-
-Arguments:
-
- LocY -
- The row on the image to begin the overlay. This must
- be inside the image.
-
- Number -
- The number to encode
-
- LowColor -
- The color to represent 0 (a clear bit)
-
- HighColor -
- The color to represent 1 (a set bit)
-
-Return Value:
-
- void
-
-*/
-{
- PAGED_CODE();
-
- if( !m_Buffer )
- {
- return;
- }
-
- NT_ASSERT(LocY <= m_Height);
-
- GetImageLocation(0, LocY);
- UINT32 mask = 0x1;
-
- PUCHAR ImageStart = m_Cursor;
- for(ULONG i = 0; i < 32; i++)
- {
- for(ULONG j = 0; j < m_Width/32; j++)
- {
- if(Number & mask)
- {
- PutPixel(HighColor);
- }
- else
- {
- PutPixel(LowColor);
- }
- }
- mask = mask << 1;
- }
- PUCHAR ImageEnd = m_Cursor;
-
- //
- // Copy the synthesized line to all subsequent lines.
- //
- for (ULONG line = 1; line < m_Height/16; line++)
- {
- RtlCopyMemory (
- GetImageLocation (0, line + LocY),
- ImageStart,
- ImageEnd - ImageStart
- );
- }
-}
-
-void
-CSynthesizer::
-OverlayText (
- _In_ ULONG LocX,
- _In_ ULONG LocY,
- _In_ ULONG Scaling,
- _In_ LPSTR Text,
- _In_ COLOR BgColor,
- _In_ COLOR FgColor
-)
-/*++
-
-Routine Description:
-
- Overlay text onto the synthesized image. Clip to fit the image
- if the overlay does not fit. The image buffer used is the set
- synthesis buffer.
-
-Arguments:
-
- LocX -
- The X location on the image to begin the overlay. This MUST
- be inside the image or no text will be rendered.
- POSITION_CENTER may be used to indicate horizontal centering.
-
- LocY -
- The Y location on the image to begin the overlay. This MUST
- be inside the image or no text will be rendered.
- POSITION_CENTER may be used to indicate vertical centering.
-
- Scaling -
- Normally, the overlay is done in an 8x8 font. A scaling of
- 2 indicates 16x16, 3 indicates 24x24 and so forth.
-
- Text -
- A null terminated character string containing the information to
- overlay
-
- BgColor -
- The background color of the overlay window. For transparency,
- indicate TRANSPARENT here.
-
- FgColor -
- The foreground color for the text overlay.
-
-Return Value:
-
- None
-
---*/
-
-{
- PAGED_CODE();
-
- // Validate internal state.
- if( !m_Buffer )
- {
- return;
- }
-
- NT_ASSERT( (LocX <= m_Width || LocX == POSITION_CENTER) &&
- (LocY <= m_Height || LocY == POSITION_CENTER) &&
- Text !=nullptr &&
- (BgColor < MAX_COLOR || BgColor == TRANSPARENT) &&
- (FgColor < MAX_COLOR || FgColor == TRANSPARENT)
- );
-
- // Validate parameters.
- if( !( (LocX <= m_Width || LocX == POSITION_CENTER) &&
- (LocY <= m_Height || LocY == POSITION_CENTER) &&
- Text !=nullptr &&
- (BgColor < MAX_COLOR || BgColor == TRANSPARENT) &&
- (FgColor < MAX_COLOR || FgColor == TRANSPARENT) ) )
- {
- return;
- }
-
- size_t StrLen = 0;
- PUCHAR CurChar;
-
- //
- // Determine the character length of the string.
- //
- if( !NT_SUCCESS( RtlStringCchLengthA( Text, m_Width, &StrLen ) ) )
- {
- // Invalid parameter.
- return;
- }
-
- //
- // Determine the physical size of the string plus border. There is
- // a definable NO_CHARACTER_SEPARATION. If this is defined, there will
- // be no added space between font characters. Otherwise, one empty pixel
- // column is added between characters.
- //
-#ifndef NO_CHARACTER_SEPARATION
- ULONG LenX = (ULONG) ((StrLen * (((size_t)Scaling) << 3)) + 1 + StrLen);
-#else // NO_CHARACTER_SEPARATION
- ULONG LenX = (ULONG) ((StrLen * (((size_t_)Scaling) << 3)) + 2);
-#endif // NO_CHARACTER_SEPARATION
-
- ULONG LenY = 2 + (Scaling << 3);
-
- //
- // Adjust for center overlays.
- //
- // NOTE: If the overlay doesn't fit into the synthesis buffer, this
- // merely left aligns the overlay and clips off the right side.
- //
- if (LocX == POSITION_CENTER)
- {
- //LocX = min( 0, ((LONG)m_Width - (LONG)LenX) >> 1);
- if (LenX >= m_Width)
- {
- LocX = 0;
- }
- else
- {
- LocX = (m_Width - LenX) >> 1;
- }
- }
-
- if (LocY == POSITION_CENTER)
- {
- //LocY = min( 0, ((LONG)m_Width - (LONG)LenY) >> 1);
- if (LenY >= m_Height)
- {
- LocY = 0;
- }
- else
- {
- LocY = (m_Height - LenY) >> 1;
- }
- }
-
- //
- // Determine the amount of space available on the synthesis buffer.
- // We will clip anything that finds itself outside the synthesis buffer.
- //
- ULONG SpaceX = m_Width - LocX;
- ULONG SpaceY = m_Height - LocY;
-
- //
- // Set the default cursor position.
- //
- GetImageLocation (LocX, LocY);
-
- //
- // Overlay a background color row.
- //
- if( SpaceY )
- {
- if( BgColor != TRANSPARENT )
- {
- for (ULONG x = 0; x < LenX && x < SpaceX; x++)
- {
- PutPixel (BgColor);
- }
- }
- SpaceY--;
- }
- LocY++;
-
- //
- // Loop across each row of the image.
- //
- for (ULONG row = 0; row < 8 && SpaceY; row++)
- {
- //
- // Generate a line.
- //
- GetImageLocation (LocX, LocY++);
-
- PUCHAR ImageStart = m_Cursor;
-
- ULONG CurSpaceX = SpaceX;
- if (CurSpaceX)
- {
- PutPixel (BgColor);
- CurSpaceX--;
- }
-
- //
- // Generate the row'th row of the overlay.
- //
- CurChar = (PUCHAR) Text;
- while( *CurChar )
- {
- UCHAR CharBase = m_FontData [m_Rotation==AcpiPldRotation90][*CurChar++][row];
- for (ULONG mask = 0x80; mask && CurSpaceX; mask >>= 1)
- {
- for (ULONG scale = 0; scale < Scaling && CurSpaceX; scale++)
- {
- if (CharBase & mask)
- {
- PutPixel (FgColor);
- }
- else
- {
- PutPixel (BgColor);
- }
- CurSpaceX--;
- }
- }
-
- //
- // Separate each character by one space. Account for the border
- // space at the end by placing the separator after the last
- // character also.
- //
-#ifndef NO_CHARACTER_SEPARATION
- if (CurSpaceX)
- {
- PutPixel (BgColor);
- CurSpaceX--;
- }
-#endif // NO_CHARACTER_SEPARATION
- }
-
- //
- // If there is no separation character defined, account for the
- // border.
- //
-#ifdef NO_CHARACTER_SEPARATION
- if (CurSpaceX)
- {
- PutPixel (BgColor);
- CurSpaceX--;
- }
-#endif // NO_CHARACTER_SEPARATION
-
-
- PUCHAR ImageEnd = m_Cursor;
- //
- // Copy the line downward scale times.
- //
- for (ULONG scale = 1; scale < Scaling && SpaceY; scale++)
- {
- GetImageLocation (LocX, LocY++);
- RtlCopyMemory (m_Cursor, ImageStart, ImageEnd - ImageStart);
- SpaceY--;
- }
- }
-
- //
- // Add the bottom section of the overlay.
- //
- GetImageLocation (LocX, LocY);
- if (BgColor != TRANSPARENT && SpaceY)
- {
- for (ULONG x = 0; x < LenX && x < SpaceX; x++)
- {
- PutPixel (BgColor);
- }
- }
-}
-
-void
-CSynthesizer::ApplyGradient(
- _In_ ULONG LocY,
- _In_ COLOR Gradient
-)
-/*++
-
-Routine Description:
-
- Synthesize a horizontal gradient bar from a given color
-
-Arguments:
-
- LocY -
- row
-
- Gradient -
- A starting color
-
-Return Value:
-
- void
-
---*/
-{
- PAGED_CODE();
-
- if( !m_Buffer )
- {
- return;
- }
-
- NT_ASSERT(LocY <= m_Height);
-
- PUCHAR Image = GetImageLocation(0, LocY);
- PUCHAR RowBmp = reinterpret_cast<PUCHAR>(&m_GradientBmp[Gradient*m_Width]);
- ULONG Stride = m_Width * sizeof(CKsRgbQuad);
-
- //
- // Copy the synthesized line to all lines.
- //
- for (ULONG line = 0; line < m_Height/16; line++)
- {
- RtlCopyMemory (
- Image,
- RowBmp,
- Stride
- );
- Image += Stride;
- }
-}
-
-//
-// Synthesize
-//
-// Fill the image buffer with some base image. All h/w simulations will
-// call this function to generate a base image - even for jpeg.
-//
-NTSTATUS
-CSynthesizer::
-Synthesize()
-/*++
-
-Routine Description:
-
- Fill the image buffer with some base image. All h/w simulations will
- call this function to generate a base image.
-
-Arguments:
-
- None
-
-Return Value:
-
- Success / failure
-
---*/
-{
- PAGED_CODE();
-
- if( !m_Buffer )
- {
- return STATUS_INVALID_DEVICE_STATE;
- }
-
- //
- // Generate a "time stamp" just to overlay it onto the capture image.
- // It makes it more exciting than bars that do nothing.
- //
- SynthesizeBars();
-
- ApplyGradient( (m_Height)/16, RED);
- ApplyGradient( (2*m_Height)/16, GREEN);
- ApplyGradient( (3*m_Height)/16, BLUE);
- ApplyGradient( (4*m_Height)/16, WHITE);
-
- EncodeNumber((5*m_Height)/16, (UINT32)m_Frame, BLACK, WHITE);
- EncodeNumber((6*m_Height)/16, (UINT32)(m_QpcTime), BLACK, WHITE);
-
- CHAR Text [256];
- RtlStringCbPrintfA(Text, sizeof(Text), "Frame: %ld", m_Frame);
-
- //
- // Overlay the frame # onto the scratch space image.
- //
- OverlayText (
- POSITION_CENTER,
- (m_Height - 28),
- 1,
- Text,
- BLACK,
- TEXT_COLOR
- );
-
- //
- // Add a description of the frame type/width/height.
- //
- RtlStringCbPrintfA(Text, sizeof(Text), "%s (%dx%d)", m_FormatName, m_Width, m_Height);
- OverlayText (
- 0,
- (m_Height - 28),
- 1,
- Text,
- TRANSPARENT,
- TEXT_COLOR
- );
-
- //
- // Add a description of the mounting.
- //
- RtlStringCbPrintfA(Text, sizeof(Text), "%d\370 Mounting", DbgRotation2Degrees(m_Rotation));
- size_t len = 0;
- RtlStringCchLengthA(Text, sizeof(Text), &len);
- OverlayText (
- (m_Width - (((ULONG)len*8))), // right-adjust text.
- (m_Height - 28),
- 1,
- Text,
- TRANSPARENT,
- TEXT_COLOR
- );
-
- return STATUS_SUCCESS;
-}
-
-void
-CSynthesizer::PutPixel (
- COLOR Color
-)
-/*++
-
-Routine Description:
-
- Place a pixel at the default cursor location. The cursor location
- must be set via GetImageLocation(x, y).
-
-Arguments:
-
- Color -
- The pixel color to render
-
-Return Value:
-
- void
-
---*/
-{
- PAGED_CODE();
-
- PKS_RGBQUAD &pPixel = (PKS_RGBQUAD &) m_Cursor;
-
- if (Color != TRANSPARENT)
- {
- *pPixel = CKsRgbQuad( m_Colors[Color][2], m_Colors[Color][1], m_Colors[Color][0] );
- }
-
- // Next pixel
- pPixel++;
-}
-
-//
-// PutPixel():
-//
-// Place a pixel at the default cursor location. The cursor location
-// must be set via GetImageLocation(x, y).
-//
-void
-CSynthesizer::PutPixel (
- UCHAR colorR,
- UCHAR colorB,
- UCHAR colorG
-)
-/*++
-
-Routine Description:
-
- Place a pixel at the default cursor location. The cursor location
- must be set via GetImageLocation(x, y).
-
- TODO: Remove. This function appears to be dead code.
-
-Arguments:
-
- colorR -
- The first color primary of the pixel.
-
- colorB -
- The third color primary of the pixel.
-
- colorG -
- The second color primary of the pixel.
-
-
-Return Value:
-
- void
-
---*/
-{
- PAGED_CODE();
-
- PKS_RGBQUAD &pPixel = (PKS_RGBQUAD &) m_Cursor;
-
- *pPixel++ = CKsRgbQuad( colorR, colorG, colorB );
-}
-
-
-//
-// Synthesize
-//
-// Fill the image buffer with some base image. All h/w simulations will
-// call this function to generate a base image - even for jpeg.
-//
-NTSTATUS
-CSynthesizer::
-DoSynthesize()
-{
- PAGED_CODE();
-
- LARGE_INTEGER StartTime = {0};
- LARGE_INTEGER EndTime = {0};
-
- StartTime = KeQueryPerformanceCounter(NULL);
-
- NTSTATUS Status = Synthesize();
-
- m_SynthesisTime += KeQueryPerformanceCounter(NULL).QuadPart - StartTime.QuadPart;
- m_SynthesisCount++;
-
- return Status;
-}
-
-//
-// Commit
-//
-// Copy (and reformat, if necessary) pixels from the internal scratch
-// buffer. If the output format decimates chrominance, do it here.
-//
-_Success_(return > 0)
-ULONG
-CSynthesizer::
-DoCommit(
- _Out_writes_bytes_(Size)
- PUCHAR Buffer,
- _In_ ULONG Size,
- _In_ ULONG Stride
-)
-{
- PAGED_CODE();
-
- LARGE_INTEGER StartTime = KeQueryPerformanceCounter(NULL);
-
- ULONG n = Commit( Buffer, Size, Stride );
-
- m_CommitTime += KeQueryPerformanceCounter(NULL).QuadPart - StartTime.QuadPart;
- m_CommitCount++;
-
- return n;
-}
-
-//
-// DoCommit
-//
-// Note: The stride needs to be a function of the bits per pixel of the
-// OUTPUT format - not the format we store it in. The class ctor
-// must initialize m_OutputStride to a default stride value.
-//
-_Success_(return > 0)
-ULONG
-CSynthesizer::
-DoCommit(
- _Out_writes_bytes_(Size)
- PUCHAR Buffer,
- _In_ ULONG Size
-)
-{
- PAGED_CODE();
-
- LARGE_INTEGER StartTime = KeQueryPerformanceCounter(NULL);
-
- ULONG n = Commit( Buffer, Size );
-
- m_CommitTime += KeQueryPerformanceCounter(NULL).QuadPart - StartTime.QuadPart;
- m_CommitCount++;
-
- return n;
-}
-
-#define CLEAR_HISTOGRAM( H ) \
- if( H ) \
- { \
- RtlZeroMemory( H, 256*sizeof(*H) ); \
- }
-
-#define BUMP_HISTOGRAM_PRIMARY( H, C ) \
- if( H ) \
- { \
- H[C]++; \
- }
-
-//
-// Histogram
-//
-// Fill an array with histogram data.
-//
-void
-CSynthesizer::
-Histogram(
- _Out_writes_opt_(256)
- PULONG HistogramP0, // rgbRed
- _Out_writes_opt_(256)
- PULONG HistogramP1, // rgbGreen
- _Out_writes_opt_(256)
- PULONG HistogramP2 // rgbBlue
-)
-/*++
-
-Routine Description:
-
- Fill array(s) with histogram data.
-
-Arguments:
-
- HistogramP0 -
- Stats on the first primary.
-
- HistogramP1 -
- Stats on the second primary.
-
- HistogramP2 -
- Stats on the third primary.
-
-Return Value:
-
- void
-
---*/
-{
- PAGED_CODE();
-
- CLEAR_HISTOGRAM( HistogramP0 );
- CLEAR_HISTOGRAM( HistogramP1 );
- CLEAR_HISTOGRAM( HistogramP2 );
-
- ULONG row, col;
-
- for( row=0; row<m_Height; row++ )
- {
- PKS_RGBQUAD pPixel = (PKS_RGBQUAD) GetImageLocation(0, row);
-
- for( col=0; col<m_Width; col++ )
- {
- BUMP_HISTOGRAM_PRIMARY( HistogramP0, pPixel->rgbRed );
- BUMP_HISTOGRAM_PRIMARY( HistogramP1, pPixel->rgbGreen );
- BUMP_HISTOGRAM_PRIMARY( HistogramP2, pPixel->rgbBlue );
- }
- }
-}