Example #1
0
        public AsfCodecListObjectItem(Stream stream)
            : base("Codec List Object", AsfGuid.ASF_Codec_List_Object, stream)
        {
            AsfCodecListObject asfCodecListObject = new AsfCodecListObject(stream);

            Properties.Add("Codec ID", asfCodecListObject.CodecId.ToString());

            int index = 0;

            foreach (var property in asfCodecListObject.CodecProperties)
            {
                Dictionary <string, object> codecProperties = new Dictionary <string, object>();
                Subsections.Add(string.Format("Codec Info [{0}]", ++index), codecProperties);

                foreach (var item in property)
                {
                    codecProperties.Add(item.Key, item.Value);
                }
            }
        }
        private AsfCodecListObject parseAsfCodecListObject(Stream inStream, long currentOffset)
        {
            AsfCodecListObject codecList = new AsfCodecListObject();

            codecList.ObjectGuid = new Guid(ParseFile.ParseSimpleOffset(inStream, currentOffset, 0x10));
            codecList.ObjectSize = BitConverter.ToUInt64(ParseFile.ParseSimpleOffset(inStream, (currentOffset + 0x10), 8), 0);
            codecList.RawBlock   = ParseFile.ParseSimpleOffset(inStream, currentOffset, (int)codecList.ObjectSize);

            codecList.CodecEntriesCount = BitConverter.ToUInt32(ParseFile.ParseSimpleOffset(inStream, (currentOffset + 0x28), 4), 0);
            codecList.CodecEntries      = new AsfCodecEntryObject[codecList.CodecEntriesCount];

            currentOffset += 0x2C;

            for (uint i = 0; i < codecList.CodecEntriesCount; i++)
            {
                codecList.CodecEntries[i]           = new AsfCodecEntryObject();
                codecList.CodecEntries[i].CodecType = BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(inStream, currentOffset, 2), 0);

                codecList.CodecEntries[i].CodecNameLength = BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(inStream, currentOffset + 2, 2), 0);
                codecList.CodecEntries[i].CodecNameBytes  = ParseFile.ParseSimpleOffset(inStream, currentOffset + 4, (int)(2 * codecList.CodecEntries[i].CodecNameLength));
                codecList.CodecEntries[i].CodecName       = Encoding.Unicode.GetString(codecList.CodecEntries[i].CodecNameBytes);

                codecList.CodecEntries[i].CodecDescriptionLength = BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(inStream, (currentOffset + 4 + (2 * codecList.CodecEntries[i].CodecNameLength)), 2), 0);
                codecList.CodecEntries[i].CodecDescriptionBytes  = ParseFile.ParseSimpleOffset(inStream, (currentOffset + 6 + (2 * codecList.CodecEntries[i].CodecNameLength)), (int)(2 * codecList.CodecEntries[i].CodecDescriptionLength));
                codecList.CodecEntries[i].CodecDescription       = Encoding.Unicode.GetString(codecList.CodecEntries[i].CodecDescriptionBytes);

                codecList.CodecEntries[i].CodecInformationLength = BitConverter.ToUInt16(ParseFile.ParseSimpleOffset(inStream, (currentOffset + 6 + (2 * codecList.CodecEntries[i].CodecNameLength) + (2 * codecList.CodecEntries[i].CodecDescriptionLength)), 2), 0);
                codecList.CodecEntries[i].CodecInformationBytes  = ParseFile.ParseSimpleOffset(inStream, (currentOffset + 8 + (2 * codecList.CodecEntries[i].CodecNameLength) + (2 * codecList.CodecEntries[i].CodecDescriptionLength)), (int)codecList.CodecEntries[i].CodecInformationLength);

                codecList.CodecEntries[i].ObjectSize = (8 + (ulong)(2 * codecList.CodecEntries[i].CodecNameLength) +
                                                        (ulong)(2 * codecList.CodecEntries[i].CodecDescriptionLength) +
                                                        (ulong)codecList.CodecEntries[i].CodecInformationLength);

                currentOffset += (long)codecList.CodecEntries[i].ObjectSize;
            }

            return(codecList);
        }