public void TestBitPacking_Single16BitFrame() { // 1 frame, 5x3 // 11111 // 10010 // 00000 // continuous bit stream: 11111100 1000000x // continuous LE byte stream: 00111111 x0000001 const string expectedResult = "111111001000000"; var overlayPixels = SwapBytes(new byte[] // written in big endian for ease of reading { 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); // little endian test { const int pixelCount = 3 * 5; byte[] packedBits = new byte[(int)(Math.Ceiling(pixelCount / 8.0))]; OverlayData.TestPack(overlayPixels, packedBits, 0, pixelCount, (ushort)0x00FF, false); var actualResult = FormatBits(packedBits, false).Substring(0, pixelCount); Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for 16-bit case (little endian)"); } // big endian test { const int pixelCount = 3 * 5; byte[] packedBits = new byte[(int)(Math.Ceiling(pixelCount / 8.0))]; OverlayData.TestPack(overlayPixels, packedBits, 0, pixelCount, (ushort)0x00FF, true); var actualResult = FormatBits(packedBits, true).Substring(0, pixelCount); Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for 16-bit case (big endian)"); } }
public void TestBitPacking_Multiple16BitFrames() { // 7 frames, each 3x2 (cols, rows) = 42 bits = 6 bytes // 111 111 111 111 111 111 111 // 000 001 010 011 100 101 110 // continuous bit stream: 11100011 10011110 10111011 11110011 11011111 10xxxxxx // continuous LE byte stream: 11000111 01111001 11011101 11001111 11111011 xxxxxx01 const string expectedResult = "111000111001111010111011111100111101111110"; var overlayPixels = SwapBytes(new byte[] // written in big endian for convenience { // frame 1 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // frame 2 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, // frame 3 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // frame 4 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, // frame 5 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // frame 6 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, // frame 7 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, }); // little endian test { const bool bigEndian = false; const int frames = 7; const int pixelCount = 2 * 3; byte[] packedBits = new byte[(int)(Math.Ceiling(frames * pixelCount / 8.0))]; // pack the individual frames in no specific order OverlayData.TestPack(Subarray(overlayPixels, 2 * 0 * pixelCount, 2 * pixelCount), packedBits, 0 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 4 * pixelCount, 2 * pixelCount), packedBits, 4 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 1 * pixelCount, 2 * pixelCount), packedBits, 1 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 5 * pixelCount, 2 * pixelCount), packedBits, 5 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 2 * pixelCount, 2 * pixelCount), packedBits, 2 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 6 * pixelCount, 2 * pixelCount), packedBits, 6 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 3 * pixelCount, 2 * pixelCount), packedBits, 3 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); var actualResult = FormatBits(packedBits, bigEndian).Substring(0, frames * pixelCount); Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for multiframe 8-bit case (little endian)"); } // big endian test { const bool bigEndian = true; const int frames = 7; const int pixelCount = 2 * 3; byte[] packedBits = new byte[(int)(Math.Ceiling(frames * pixelCount / 8.0))]; // pack the individual frames in no specific order OverlayData.TestPack(Subarray(overlayPixels, 2 * 0 * pixelCount, 2 * pixelCount), packedBits, 0 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 4 * pixelCount, 2 * pixelCount), packedBits, 4 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 1 * pixelCount, 2 * pixelCount), packedBits, 1 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 5 * pixelCount, 2 * pixelCount), packedBits, 5 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 2 * pixelCount, 2 * pixelCount), packedBits, 2 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 6 * pixelCount, 2 * pixelCount), packedBits, 6 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); OverlayData.TestPack(Subarray(overlayPixels, 2 * 3 * pixelCount, 2 * pixelCount), packedBits, 3 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian); var actualResult = FormatBits(packedBits, bigEndian).Substring(0, frames * pixelCount); Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for multiframe 8-bit case (big endian)"); } }