public void CreateVideo() { const int width = 640; const int height = 480; const int frames = 30; Stopwatch stopwatch = Stopwatch.StartNew(); var parameters = new FlashScreenVideoParameters(width, height, 5) { BlockWidth = 256, BlockHeight = 256 }; video = new FlashScreenVideo(parameters); stopwatch.Stop(); Bitmap bitmap = new Bitmap(width, height); BitmapVideoFrame bitmapVideoFrame = new BitmapVideoFrame(bitmap); for (int frame = 0; frame < frames; frame++) { BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); try { int offset = 0; for (int y = 0; y < height; y++) { int scanOffset = offset; for (int x = 0; x < width; x++) { int color = (x * 255 / width) << 16 | (y * 255 / height) << 8 | frame * 255 / frames; Marshal.WriteInt32(bitmapData.Scan0, scanOffset, color); scanOffset += 4; } offset += bitmapData.Stride; } } finally { bitmap.UnlockBits(bitmapData); } stopwatch.Start(); video.AddFrame(bitmapVideoFrame); stopwatch.Stop(); } TestLog.WriteLine("Video encoding {2} frames at {0}x{1} took {3}s", width, height, frames, stopwatch.Elapsed.TotalSeconds); }
public void KeyFramePeriod_CanGetAndSetValue() { var parameters = new FlashScreenVideoParameters(32, 16, 30); Assert.AreEqual(TimeSpan.FromSeconds(2), parameters.KeyFramePeriod); parameters.KeyFramePeriod = TimeSpan.FromSeconds(0); Assert.AreEqual(TimeSpan.FromSeconds(0), parameters.KeyFramePeriod); var ex = Assert.Throws <ArgumentOutOfRangeException>(() => parameters.KeyFramePeriod = TimeSpan.FromSeconds(-1)); Assert.Contains(ex.Message, "Key frame period must not be negative."); }
public void CompressionLevel_CanGetAndSetValue() { var parameters = new FlashScreenVideoParameters(32, 16, 30); Assert.AreEqual(6, parameters.CompressionLevel); parameters.CompressionLevel = 9; Assert.AreEqual(9, parameters.CompressionLevel); parameters.CompressionLevel = 0; Assert.AreEqual(0, parameters.CompressionLevel); var ex = Assert.Throws <ArgumentOutOfRangeException>(() => parameters.CompressionLevel = -1); Assert.Contains(ex.Message, "Compression level must be between 0 and 9."); ex = Assert.Throws <ArgumentOutOfRangeException>(() => parameters.CompressionLevel = 10); Assert.Contains(ex.Message, "Compression level must be between 0 and 9."); }
public void BlockHeight_CanGetAndSetValue() { var parameters = new FlashScreenVideoParameters(32, 16, 30); Assert.AreEqual(64, parameters.BlockHeight); parameters.BlockHeight = 256; Assert.AreEqual(256, parameters.BlockHeight); parameters.BlockHeight = 16; Assert.AreEqual(16, parameters.BlockHeight); var ex = Assert.Throws <ArgumentOutOfRangeException>(() => parameters.BlockHeight = 0); Assert.Contains(ex.Message, "Block height must be a multiple of 16 between 16 and 256."); ex = Assert.Throws <ArgumentOutOfRangeException>(() => parameters.BlockHeight = 256 + 16); Assert.Contains(ex.Message, "Block height must be a multiple of 16 between 16 and 256."); ex = Assert.Throws <ArgumentOutOfRangeException>(() => parameters.BlockHeight = 17); Assert.Contains(ex.Message, "Block height must be a multiple of 16 between 16 and 256."); }
public void FramesPerSecond_ReturnsFramesPerSecond() { var parameters = new FlashScreenVideoParameters(32, 16, 30); Assert.AreEqual(30, parameters.FramesPerSecond); }
public void Height_ReturnsHeight() { var parameters = new FlashScreenVideoParameters(32, 16, 30); Assert.AreEqual(16, parameters.Height); }
public void Width_ReturnsWidth() { var parameters = new FlashScreenVideoParameters(32, 16, 30); Assert.AreEqual(32, parameters.Width); }