public IndexTableSegment()

in src/main/java/com/netflix/imflibrary/st0377/IndexTableSegment.java [85:147]


    public IndexTableSegment(ByteProvider byteProvider, KLVPacket.Header header) throws IOException
    {

        if (!IndexTableSegment.isValidKey(header.getKey()))
        {
            throw new MXFException(String.format("IndexTableSegment key = %s invalid", Arrays.toString(header.getKey())));
        }

        this.header = header;
        if ((this.header.getKey()[5] != 0x53) && (this.header.getKey()[5] != 0x13))
        {
            throw new MXFException(String.format("Found index table segment with registry designator byte value = 0x%x, only 0x53h or 0x13h are supported presently",
                    this.header.getKey()[5]));
        }

        long numBytesToRead = this.header.getVSize();
        long numBytesRead = 0;

        IndexEntryArray indexEntryArray = null;
        while (numBytesRead < numBytesToRead)
        {
            Integer itemTag = MXFPropertyPopulator.getUnsignedShortAsInt(byteProvider.getBytes(2), KLVPacket.BYTE_ORDER);
            numBytesRead += 2;

            long itemSize;
            if (this.header.getKey()[5] == 0x53)
            {
                itemSize = MXFPropertyPopulator.getUnsignedShortAsInt(byteProvider.getBytes(2), KLVPacket.BYTE_ORDER);
                numBytesRead += 2;
            }
            else
            {//(this.header.getKey()[5] == 0x13)
                KLVPacket.LengthField lengthField = KLVPacket.getLength(byteProvider);
                itemSize = lengthField.value;
                numBytesRead += lengthField.sizeOfLengthField;
            }

            String itemName = IndexTableSegment.LOCAL_TAG_TO_ITEM_NAME.get(itemTag);
            if (itemName != null)
            {
                int expectedLength = MXFPropertyPopulator.getFieldSizeInBytes(this, itemName);
                if((expectedLength > 0) && (itemSize != expectedLength))
                {
                    throw new MXFException(String.format("Actual length from bitstream = %d is different from expected length = %d",
                            itemSize, expectedLength));
                }
                MXFPropertyPopulator.populateField(byteProvider, this, itemName);
                numBytesRead += itemSize;
            }
            else if (itemTag == 0x3f0a)
            {
                indexEntryArray = new IndexEntryArray(byteProvider);
                numBytesRead += itemSize;
            }
            else
            {
                byteProvider.skipBytes(itemSize);
                numBytesRead += itemSize;
            }
        }
        this.indexEntryArray = indexEntryArray;

    }