protected void CreateYuvDataSegments() { if (noOfChannels == 3) { var startIndex = 0; var width2 = (Width + (1 << xChromaShift) - 1) >> xChromaShift; var height2 = (Height + (1 << yChromaShift) - 1) >> yChromaShift; var length = (Width * Height) + (2 * (width2 * height2)); if (Data == null) Data = new byte[length]; else if (Data.Length != length) throw new InvalidFrameDataException(); yuvFrameSegments = new FrameSegment[noOfChannels]; yuvFrameSegments[0] = new FrameSegment(Data, startIndex, Width * Height, depth); startIndex = startIndex + (Width * Height); yuvFrameSegments[1] = new FrameSegment(Data, startIndex, width2 * height2, depth); startIndex = startIndex + (width2 * height2); yuvFrameSegments[2] = new FrameSegment(Data, startIndex, width2 * height2, depth); } else throw new Exception(); }
private void CreateRgbDataSegments() { var length = noOfChannels * (Width * Height); if (Data == null) Data = new byte[length]; else if (length != Data.Length) throw new InvalidFrameDataException(); rgbFrameSegments = new FrameSegment[noOfChannels]; for (int i = 0, startIndex = 0; i < rgbFrameSegments.Length; i++) { rgbFrameSegments[i] = new FrameSegment(Data, startIndex, Width*Height, depth); startIndex = startIndex + (Width*Height); startIndex++; } }