Ejemplo n.º 1
0
        internal void ReadMultiProcessElementsTagDataEntry(byte[] data, IccMultiProcessElementsTagDataEntry expected)
        {
            IccDataReader reader = CreateReader(data);

            IccMultiProcessElementsTagDataEntry output = reader.ReadMultiProcessElementsTagDataEntry();

            Assert.Equal(expected, output);
        }
        internal void WriteMultiProcessElementsTagDataEntry(byte[] expected, IccMultiProcessElementsTagDataEntry data)
        {
            IccDataWriter writer = CreateWriter();

            writer.WriteMultiProcessElementsTagDataEntry(data);
            byte[] output = writer.GetData();

            Assert.Equal(expected, output);
        }
        /// <summary>
        /// Writes a <see cref="IccMultiProcessElementsTagDataEntry"/>
        /// </summary>
        /// <param name="value">The entry to write</param>
        /// <returns>The number of bytes written</returns>
        public int WriteMultiProcessElementsTagDataEntry(IccMultiProcessElementsTagDataEntry value)
        {
            long start = this.dataStream.Position - 8;  // 8 is the tag header size

            int count = this.WriteUInt16((ushort)value.InputChannelCount);

            count += this.WriteUInt16((ushort)value.OutputChannelCount);
            count += this.WriteUInt32((uint)value.Data.Length);

            // Jump over position table
            long tpos = this.dataStream.Position;

            this.dataStream.Position += value.Data.Length * 8;

            IccPositionNumber[] posTable = new IccPositionNumber[value.Data.Length];
            for (int i = 0; i < value.Data.Length; i++)
            {
                uint offset = (uint)(this.dataStream.Position - start);
                int  size   = this.WriteMultiProcessElement(value.Data[i]);
                count      += this.WritePadding();
                posTable[i] = new IccPositionNumber(offset, (uint)size);
                count      += size;
            }

            // Write position table
            long lpos = this.dataStream.Position;

            this.dataStream.Position = tpos;
            foreach (IccPositionNumber pos in posTable)
            {
                count += this.WritePositionNumber(pos);
            }

            this.dataStream.Position = lpos;
            return(count);
        }