Exemplo n.º 1
0
        public override bool IsSuitableParent(Mpeg4Header parent)
        {
            // Header is allowed in its suitable parent (correct files)
            if (HeaderName.GetSuitableParents().Contains(parent.HeaderName))
            {
                return(true);
            }

            // Header ends up in the root if no suitable parent was found (partial files)
            if (!parent.IsRoot)
            {
                return(false);
            }

            // Atoms of partial files are allowed in the root if empty
            if (!parent.HasChildren())
            {
                return(true);
            }

            // Root should not already contain top-level atoms (FileType, MediaData or Movie)
            // Otherwise, the top-level parent of this header should have been in the root as well
            foreach (Mpeg4Header header in parent.Children)
            {
                if (header.HeaderName.IsTopLevel())
                {
                    return(false);
                }
            }

            return(true);
        }
        public override bool IsSuitableParent(AsfObject parent)
        {
            if (!parent.IsRoot)
            {
                // Should fit in parent object
                if (Offset < parent.Offset || RelativeEndOffset > parent.RelativeEndOffset)
                {
                    return(false);
                }
            }

            // First object should not be unknown
            if (IsUnknown && parent.IsRoot && !parent.HasChildren())
            {
                return(false);
            }

            // ASF object should have no duplicates in its parent if DuplicatesAllowed is false
            if (!HeaderName.IsFlagSet(ObjectFlags.DuplicatesAllowed) && parent.HasChild(HeaderName))
            {
                // ASF object of partial files may end up in the root
                // Therefore, duplicates are allowed, except for top-level atoms
                if (!parent.IsRoot || HeaderName.IsTopLevel())
                {
                    return(false);
                }
            }

            // Header object is always the first object
            if (HeaderName == AsfObjectName.HeaderObject && parent.HasChildren())
            {
                return(false);
            }

            // Object is allowed in its suitable parent (correct files)
            if (HeaderName.GetSuitableParents().Contains(parent.HeaderName))
            {
                return(true);
            }

            // Object ends up in the root if no suitable parent was found (partial files)
            if (!parent.IsRoot)
            {
                return(false);
            }

            return(true);
        }
        public override bool IsSuitableParent(QtAtom parent)
        {
            if (!parent.IsRoot)
            {
                // Should fit in parent atom (box)
                if ((Offset < parent.Offset) || (RelativeEndOffset > parent.RelativeEndOffset))
                {
                    return(false);
                }
            }

            // First atom should not be unknown
            if (IsUnknown && parent.IsRoot && !parent.HasChildren())
            {
                return(false);
            }

            // Atom should have no duplicates in its parent if DuplicatesAllowed is false
            if (!HeaderName.IsFlagSet(AtomFlags.DuplicatesAllowed) && parent.HasChild(HeaderName))
            {
                // Atoms of partial files may end up in the root
                // Therefore, duplicates are allowed, except for top-level atoms
                if (!parent.IsRoot || HeaderName.IsTopLevel())
                {
                    return(false);
                }
            }

            // Atom is allowed in its suitable parent (correct files)
            if (HeaderName.GetSuitableParents().Contains(parent.HeaderName))
            {
                return(true);
            }

            // Atom ends up in the root if no suitable parent was found (partial files)
            if (!parent.IsRoot)
            {
                return(false);
            }

            // Atoms of partial files are allowed in the root if empty
            if (!parent.HasChildren())
            {
                return(true);
            }

            // Root should not already contain top-level atoms (FileType, MediaData or Movie)
            // Otherwise, the top-level parent of this atom should have been in the root as well
            foreach (QtAtom atom in parent.Children)
            {
                if (atom.HeaderName.IsTopLevel())
                {
                    return(false);
                }
            }

            // Depth of this atom should be equal or lower than last child of the root
            //if (!IsAtomTypeAllowedInRootAtThisPoint(parent, HeaderName))
            //{
            //    return false;
            //}

            // Root should not contain only suitable ancestor of the atom
            //if (false)
            //{
            //    return false;
            //}

            // No 'higher atoms' than its suitable parent (siblings of an ancestor)
            //if (false)
            //{
            //    return false;
            //}

            return(true);
        }