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++;
            }
        }