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);
        }
Esempio n. 2
0
 // 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[]>();
 }
Esempio n. 3
0
        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: ");
            }
        }
Esempio n. 4
0
        public static int GetByteCount(this VideoModeResolution res)
        {
            var size = res.GetAttribute <VideoModeResolution, SizeAttribute>().Size;

            return((int)(size.Item1 * size.Item2 * 4));
        }
Esempio n. 5
0
 public static Tuple <uint, uint> GetSize(this VideoModeResolution res)
 {
     return(res.GetAttribute <VideoModeResolution, SizeAttribute>().Size);
 }
Esempio n. 6
0
 public VideoModeResolutionAttribute(VideoModeResolution res)
 {
     Resolution = res;
 }
Esempio n. 7
0
 public static AtemFrame FromAtem(VideoModeResolution res, string name, byte[] data)
 {
     return(new AtemFrame(name, FrameEncodingUtil.DecodeRLE(res, data)));
 }
Esempio n. 8
0
 public static byte[] DecodeRLE(VideoModeResolution size, byte[] data)
 {
     return(DecodeRLESegment((uint)size.GetByteCount(), data).Item2);
 }
Esempio n. 9
0
 public StillDownloadJobEntry(string deviceId, uint index, VideoModeResolution res, Action <DataTransferJob> notifyChanged) : this(deviceId,
                                                                                                                                   new DownloadMediaStillJob3(index, res.GetByteCount()), notifyChanged)
 {
 }