示例#1
0
        /// <summary>
        ///    Saves the changes made in the current instance to the
        ///    file it represents.
        /// </summary>
        public override void Save()
        {
            Mode = AccessMode.Write;
            try {
                HeaderObject header = new HeaderObject(this, 0);

                if (asf_tag == null)
                {
                    header.RemoveContentDescriptors();
                    TagTypesOnDisk &= ~TagTypes.Asf;
                }
                else
                {
                    TagTypesOnDisk |= TagTypes.Asf;
                    header.AddUniqueObject(
                        asf_tag.ContentDescriptionObject);
                    header.AddUniqueObject(
                        asf_tag.ExtendedContentDescriptionObject);
                    header.Extension.AddUniqueObject(
                        asf_tag.MetadataLibraryObject);
                }

                ByteVector output = header.Render();
                long       diff   = output.Count - (long)header.OriginalSize;
                Insert(output, 0, (long)header.OriginalSize);

                InvariantStartPosition += diff;
                InvariantEndPosition   += diff;
            } finally {
                Mode = AccessMode.Closed;
            }
        }
示例#2
0
        /// <summary>
        ///    Constructs and initializes a new instance of <see
        ///    cref="Tag" /> using the children of a <see
        ///    cref="HeaderObject" /> object.
        /// </summary>
        /// <param name="header">
        ///    A <see cref="HeaderObject" /> object whose children are
        ///    are to be used by the new instance.
        /// </param>
        /// <exception cref="ArgumentNullException">
        ///    <paramref name="header" /> is <see langword="null" />.
        /// </exception>
        public Tag(HeaderObject header)
        {
            if (header == null)
            {
                throw new ArgumentNullException("header");
            }

            foreach (Object child in header.Children)
            {
                if (child is ContentDescriptionObject)
                {
                    description =
                        child as ContentDescriptionObject;
                }

                if (child is ExtendedContentDescriptionObject)
                {
                    ext_description =
                        child as ExtendedContentDescriptionObject;
                }
            }

            foreach (Object child in header.Extension.Children)
            {
                if (child is MetadataLibraryObject)
                {
                    metadata_library =
                        child as MetadataLibraryObject;
                }
            }
        }
示例#3
0
		/// <summary>
		///    Constructs and initializes a new instance of <see
		///    cref="Tag" /> using the children of a <see
		///    cref="HeaderObject" /> object.
		/// </summary>
		/// <param name="header">
		///    A <see cref="HeaderObject" /> object whose children are
		///    are to be used by the new instance.
		/// </param>
		/// <exception cref="ArgumentNullException">
		///    <paramref name="header" /> is <see langword="null" />.
		/// </exception>
		public Tag (HeaderObject header)
		{
			if (header == null)
				throw new ArgumentNullException ("header");
			
			foreach (Object child in header.Children) {
				if (child is ContentDescriptionObject)
					description =
						child as ContentDescriptionObject;
			
				if (child is ExtendedContentDescriptionObject)
					ext_description =
						child as ExtendedContentDescriptionObject;
			}
			
			foreach (Object child in header.Extension.Children)
				if (child is MetadataLibraryObject)
					metadata_library =
						child as MetadataLibraryObject;
		}
示例#4
0
        /// <summary>
        ///    Reads the contents of the current instance.
        /// </summary>
        /// <param name="propertiesStyle">
        ///    A <see cref="ReadStyle" /> value specifying at what level
        ///    of accuracy to read the media properties, or <see
        ///    cref="ReadStyle.None" /> to ignore the properties.
        /// </param>
        private void Read(ReadStyle propertiesStyle)
        {
            Mode = AccessMode.Read;
            try {
                HeaderObject header = new HeaderObject(this, 0);

                if (header.HasContentDescriptors)
                {
                    TagTypesOnDisk |= TagTypes.Asf;
                }

                asf_tag = new Asf.Tag(header);

                InvariantStartPosition = (long)header.OriginalSize;
                InvariantEndPosition   = Length;

                if (propertiesStyle != ReadStyle.None)
                {
                    properties = header.Properties;
                }
            } finally {
                Mode = AccessMode.Closed;
            }
        }
示例#5
0
		/// <summary>
		///    Reads the contents of the current instance.
		/// </summary>
		/// <param name="propertiesStyle">
		///    A <see cref="ReadStyle" /> value specifying at what level
		///    of accuracy to read the media properties, or <see
		///    cref="ReadStyle.None" /> to ignore the properties.
		/// </param>
		private void Read (ReadStyle propertiesStyle)
		{
			Mode = AccessMode.Read;
			try {
				HeaderObject header = new HeaderObject (this, 0);
				
				if (header.HasContentDescriptors)
					TagTypesOnDisk |= TagTypes.Asf;
				
				asf_tag = new Asf.Tag (header);
				
				InvariantStartPosition = (long) header.OriginalSize;
				InvariantEndPosition = Length;
				
				if (propertiesStyle != ReadStyle.None)
					properties = header.Properties;
			} finally {
				Mode = AccessMode.Closed;
			}
		}
示例#6
0
		/// <summary>
		///    Saves the changes made in the current instance to the
		///    file it represents.
		/// </summary>
		public override void Save ()
		{
			Mode = AccessMode.Write;
			try {
				HeaderObject header = new HeaderObject (this, 0);
				
				if (asf_tag == null) {
					header.RemoveContentDescriptors ();
					TagTypesOnDisk &= ~ TagTypes.Asf;
				} else {
					TagTypesOnDisk |= TagTypes.Asf;
					header.AddUniqueObject (
						asf_tag.ContentDescriptionObject);
					header.AddUniqueObject (
						asf_tag.ExtendedContentDescriptionObject);
					header.Extension.AddUniqueObject (
						asf_tag.MetadataLibraryObject);
				}
				
				ByteVector output = header.Render ();
				long diff = output.Count - (long) header.OriginalSize;
				Insert (output, 0, (long) header.OriginalSize);
				
				InvariantStartPosition += diff;
				InvariantEndPosition += diff;
			} finally {
				Mode = AccessMode.Closed;
			}
		}