コード例 #1
0
        private IEnumerable <RiffElement> GetChildren(List <byte> bytes)
        {
            var result = new List <RiffElement>();

            for (int i = 0; i < bytes.Count;)
            {
                int elementSize = GetInt32FromByteSequence(bytes.GetRange(i + 4, 4)) + 8;
                if ((elementSize & 1) != 0)
                {
                    elementSize++;
                }
                RiffElement element;
                int         startPosition = this.StartPosition + 12;
                if (GetFourCCFromBytes(bytes.GetRange(i, 4)) == "LIST")
                {
                    element = new RiffList(startPosition + i, this);
                }
                else
                {
                    var id = GetFourCCFromBytes(bytes.GetRange(i, 4));
                    switch (id)
                    {
                    case "avih":
                        element = new RiffChunk <AviMainHeader>(startPosition + i, this);
                        break;

                    case "strh":
                        element = new RiffChunk <AviStreamHeader>(startPosition + i, this);
                        break;

                    default:
                        element = new RiffChunk <byte>(startPosition + i, this);
                        break;
                    }
                }
                element.Parse(bytes.GetRange(i, elementSize));
                result.Add(element);
                i += elementSize;
            }
            return(result);
        }
コード例 #2
0
 private IEnumerable <RiffElement> GetChunk <T>(RiffList list) where T : struct
 {
     foreach (var child in list.Children)
     {
         if (child is RiffChunk <T> )
         {
             yield return(child);
         }
     }
     foreach (var newList in list.Children.Where(x => x is RiffList))
     {
         var result = this.GetChunk <T>(newList as RiffList);
         if (!result.Any())
         {
             break;
         }
         foreach (var element in result.ToList())
         {
             yield return(element);
         }
     }
 }
コード例 #3
0
 public RiffList(int startPosition, RiffList parent) : base(startPosition, parent)
 {
 }
コード例 #4
0
 protected RiffElement(int startPosition, RiffList parent)
 {
     this.StartPosition = startPosition;
     this.Parent        = parent;
 }