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