public static byte[] DecodeRLE(VideoModeResolution size, byte[] data) { byte[] res = new byte[size.GetByteCount()]; int p = 0; const int colBytes = 8; for (int i = 0; i < data.Length; i += 8) { // Ensure it looks correct if (!IsTerminator(data, i)) { Array.Copy(data, i, res, p, colBytes); p += colBytes; continue; } long count = BitConverter.ToInt64(data.Skip(i + 8).Take(8).Reverse().ToArray(), 0); i += 16; if (count == 0) { continue; } // Find the pixels to repeat for (int o = 0; o < count; o++) { Array.Copy(data, i, res, p, colBytes); p += colBytes; } } return(res); }
// TODO - name to use public DownloadMediaStillJob(uint index, VideoModeResolution resolution, Action <AtemFrame> onComplete, TimeSpan?timeout = null) : base(0, timeout) { _index = index; _resolution = resolution; _onComplete = onComplete; _receivedData = new List <byte[]>(); }
public static uint MaxClipLength(this VideoMode mode, DeviceProfile profile) { VideoModeResolution res = mode.GetResolution(); switch (res) { case VideoModeResolution.PAL: case VideoModeResolution.NTSC: return(profile.VideoModes.MaxFrames.SD); case VideoModeResolution._720: return(profile.VideoModes.MaxFrames._720); case VideoModeResolution._1080: return(profile.VideoModes.MaxFrames._1080); case VideoModeResolution._4K: return(profile.VideoModes.MaxFrames._4K); default: throw new Exception("Unknown VideoModeResolution in DeviceProfileExtensions.MaxClipLength: "); } }
public static int GetByteCount(this VideoModeResolution res) { var size = res.GetAttribute <VideoModeResolution, SizeAttribute>().Size; return((int)(size.Item1 * size.Item2 * 4)); }
public static Tuple <uint, uint> GetSize(this VideoModeResolution res) { return(res.GetAttribute <VideoModeResolution, SizeAttribute>().Size); }
public VideoModeResolutionAttribute(VideoModeResolution res) { Resolution = res; }
public static AtemFrame FromAtem(VideoModeResolution res, string name, byte[] data) { return(new AtemFrame(name, FrameEncodingUtil.DecodeRLE(res, data))); }
public static byte[] DecodeRLE(VideoModeResolution size, byte[] data) { return(DecodeRLESegment((uint)size.GetByteCount(), data).Item2); }
public StillDownloadJobEntry(string deviceId, uint index, VideoModeResolution res, Action <DataTransferJob> notifyChanged) : this(deviceId, new DownloadMediaStillJob3(index, res.GetByteCount()), notifyChanged) { }