コード例 #1
0
ファイル: File.cs プロジェクト: JayDown/taglib-sharp
        /// <summary>
        ///    Reads the file with a specified read style.
        /// </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>
        void Read (ReadStyle propertiesStyle)
        {
            // TODO: Support Id3v2 boxes!!!
            tag = new CombinedTag ();
            Mode = AccessMode.Read;
            try {
                var parser = new FileParser (this);

                if ((propertiesStyle & ReadStyle.Average) == 0)
                    parser.ParseTag ();
                else
                    parser.ParseTagAndProperties ();

                InvariantStartPosition = parser.MdatStartPosition;
                InvariantEndPosition = parser.MdatEndPosition;

                UdtaBoxes.AddRange (parser.UserDataBoxes);

                // Ensure our collection contains at least a single empty box
                if (UdtaBoxes.Count == 0) {
                    var dummy = new IsoUserDataBox ();
                    UdtaBoxes.Add (dummy);
                }

                // Check if a udta with ILST actually exists
                if (IsAppleTagUdtaPresent ())
                    TagTypesOnDisk |= TagTypes.Apple;   //There is an udta present with ILST info

                // Find the udta box with the Apple Tag ILST
                IsoUserDataBox udtaBox = FindAppleTagUdta ();
                if (null == udtaBox) {
                    udtaBox = new IsoUserDataBox ();
                }
                apple_tag = new AppleTag (udtaBox);
                tag.SetTags (apple_tag);

                // If we're not reading properties, we're done.
                if ((propertiesStyle & ReadStyle.Average) == 0) {
                    Mode = AccessMode.Closed;
                    return;
                }

                // Get the movie header box.
                var mvhd_box = parser.MovieHeaderBox;
                if (mvhd_box == null) {
                    Mode = AccessMode.Closed;
                    throw new CorruptFileException ("mvhd box not found.");
                }

                var audio_sample_entry = parser.AudioSampleEntry;
                var visual_sample_entry = parser.VisualSampleEntry;

                // Read the properties.
                properties = new Properties (mvhd_box.Duration, audio_sample_entry, visual_sample_entry);
            } finally {
                Mode = AccessMode.Closed;
            }
        }
コード例 #2
0
 private void Read(ReadStyle propertiesStyle)
 {
     tag  = new CombinedTag();
     Mode = AccessMode.Read;
     try
     {
         FileParser parser = new FileParser(this);
         if (propertiesStyle == ReadStyle.None)
         {
             parser.ParseTag();
         }
         else
         {
             parser.ParseTagAndProperties();
         }
         InvariantStartPosition = parser.MdatStartPosition;
         InvariantEndPosition   = parser.MdatEndPosition;
         udta_boxes.AddRange(parser.UserDataBoxes);
         if (udta_boxes.Count == 0)
         {
             IsoUserDataBox dummy = new IsoUserDataBox();
             udta_boxes.Add(dummy);
         }
         if (IsAppleTagUdtaPresent())
         {
             TagTypesOnDisk |= TagTypes.Apple;
         }
         IsoUserDataBox udtaBox = FindAppleTagUdta();
         if (null == udtaBox)
         {
             udtaBox = new IsoUserDataBox();
         }
         apple_tag = new AppleTag(udtaBox);
         tag.SetTags(apple_tag);
         if (propertiesStyle == ReadStyle.None)
         {
             Mode = AccessMode.Closed;
             return;
         }
         IsoMovieHeaderBox mvhd_box = parser.MovieHeaderBox;
         if (mvhd_box == null)
         {
             Mode = AccessMode.Closed;
             throw new CorruptFileException("mvhd box not found.");
         }
         IsoAudioSampleEntry  audio_sample_entry  = parser.AudioSampleEntry;
         IsoVisualSampleEntry visual_sample_entry = parser.VisualSampleEntry;
         properties = new Properties(mvhd_box.Duration, audio_sample_entry, visual_sample_entry);
     }
     finally
     {
         Mode = AccessMode.Closed;
     }
 }
コード例 #3
0
        /// <summary>
        ///    Gets a tag of a specified type from the current instance,
        ///    optionally creating a new tag if possible.
        /// </summary>
        /// <param name="type">
        ///    A <see cref="TagLib.TagTypes" /> value indicating the
        ///    type of tag to read.
        /// </param>
        /// <param name="create">
        ///    A <see cref="bool" /> value specifying whether or not to
        ///    try and create the tag if one is not found.
        /// </param>
        /// <returns>
        ///    A <see cref="Tag" /> object containing the tag that was
        ///    found in or added to the current instance. If no
        ///    matching tag was found and none was created, <see
        ///    langword="null" /> is returned.
        /// </returns>
        public override TagLib.Tag GetTag(TagTypes type, bool create)
        {
            TagLib.Tag tag = null;

            switch (type)
            {
            case TagTypes.Id3v2:
                if (id32_tag == null && create)
                {
                    id32_tag         = new Id3v2.Tag();
                    id32_tag.Version = 4;
                    id32_tag.Flags  |= Id3v2.HeaderFlags
                                       .FooterPresent;
                    this.tag.CopyTo(id32_tag, true);
                }

                tag = id32_tag;
                break;

            case TagTypes.RiffInfo:
                if (info_tag == null && create)
                {
                    info_tag = new InfoTag();
                    this.tag.CopyTo(info_tag, true);
                }

                tag = info_tag;
                break;

            case TagTypes.MovieId:
                if (mid_tag == null && create)
                {
                    mid_tag = new MovieIdTag();
                    this.tag.CopyTo(mid_tag, true);
                }

                tag = mid_tag;
                break;

            case TagTypes.DivX:
                if (divx_tag == null && create)
                {
                    divx_tag = new DivXTag();
                    this.tag.CopyTo(divx_tag, true);
                }

                tag = divx_tag;
                break;
            }

            this.tag.SetTags(id32_tag, info_tag, mid_tag, divx_tag);
            return(tag);
        }
コード例 #4
0
ファイル: File.cs プロジェクト: Sirais/taglib-sharp-portable
        /// <summary>
        ///    Gets a tag of a specified type from the current instance,
        ///    optionally creating a new tag if possible.
        /// </summary>
        /// <param name="type">
        ///    A <see cref="TagLib.TagTypes" /> value indicating the
        ///    type of tag to read.
        /// </param>
        /// <param name="create">
        ///    A <see cref="bool" /> value specifying whether or not to
        ///    try and create the tag if one is not found.
        /// </param>
        /// <returns>
        ///    A <see cref="Tag" /> object containing the tag that was
        ///    found in or added to the current instance. If no
        ///    matching tag was found and none was created, <see
        ///    langword="null" /> is returned.
        /// </returns>
        public override TagLib.Tag GetTag(TagTypes type, bool create)
        {
            TagLib.Tag tag = null;

            switch (type)
            {
            case TagTypes.Id3v2:
                if (id32_tag == null && create) {
                    id32_tag = new Id3v2.Tag ();
                    id32_tag.Version = 4;
                    id32_tag.Flags |= Id3v2.HeaderFlags
                        .FooterPresent;
                    this.tag.CopyTo (id32_tag, true);
                }

                tag = id32_tag;
                break;

            case TagTypes.RiffInfo:
                if (info_tag == null && create) {
                    info_tag = new InfoTag ();
                    this.tag.CopyTo (info_tag, true);
                }

                tag = info_tag;
                break;

            case TagTypes.MovieId:
                if (mid_tag == null && create) {
                    mid_tag = new MovieIdTag ();
                    this.tag.CopyTo (mid_tag, true);
                }

                tag = mid_tag;
                break;

            case TagTypes.DivX:
                if (divx_tag == null && create) {
                    divx_tag = new DivXTag ();
                    this.tag.CopyTo (divx_tag, true);
                }

                tag = divx_tag;
                break;
            }

            this.tag.SetTags (id32_tag, info_tag, mid_tag, divx_tag);
            return tag;
        }
コード例 #5
0
ファイル: File.cs プロジェクト: Sirais/taglib-sharp-portable
        /// <summary>
        ///    Reads format specific information at the end of the
        ///    file.
        /// </summary>
        /// <param name="end">
        ///    A <see cref="long" /> value containing the seek position
        ///    at which the media data ends and the tags begin.
        /// </param>
        /// <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>
        protected override void ReadEnd(long end,
		                                 ReadStyle propertiesStyle)
        {
            tag = new CombinedTag (metadata, base.Tag);
            GetTag (TagTypes.Xiph, true);
        }
コード例 #6
0
ファイル: File.cs プロジェクト: joconno4/MediaPortal-2
		/// <summary>
		///    Reads the file with a specified read style.
		/// </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)
		{
			// TODO: Support Id3v2 boxes!!!
			tag = new CombinedTag ();
			Mode = AccessMode.Read;
			try {
				FileParser parser = new FileParser (this);
				
				if (propertiesStyle == ReadStyle.None)
					parser.ParseTag ();
				else
					parser.ParseTagAndProperties ();
				
				InvariantStartPosition = parser.MdatStartPosition;
				InvariantEndPosition = parser.MdatEndPosition;
				
				udta_box = parser.UserDataBox;
				
				if (udta_box != null && udta_box.GetChild (BoxType.Meta)
					!= null && udta_box.GetChild (BoxType.Meta
					).GetChild (BoxType.Ilst) != null)
					TagTypesOnDisk |= TagTypes.Apple;
				
				if (udta_box == null)
					udta_box = new IsoUserDataBox ();
				
				apple_tag = new AppleTag (udta_box);
				tag.SetTags (apple_tag);
				
				// If we're not reading properties, we're done.
				if (propertiesStyle == ReadStyle.None) {
					Mode = AccessMode.Closed;
					return;
				}
				
				// Get the movie header box.
				IsoMovieHeaderBox mvhd_box = parser.MovieHeaderBox;
				if(mvhd_box == null) {
					Mode = AccessMode.Closed;
					throw new CorruptFileException (
						"mvhd box not found.");
				}
				
				IsoAudioSampleEntry  audio_sample_entry =
					parser.AudioSampleEntry;
				IsoVisualSampleEntry visual_sample_entry =
					parser.VisualSampleEntry;
				
				// Read the properties.
				properties = new Properties (mvhd_box.Duration,
					audio_sample_entry, visual_sample_entry);
			} finally {
				Mode = AccessMode.Closed;
			}
		}
コード例 #7
0
 /// <summary>
 ///    Reads format specific information at the end of the
 ///    file.
 /// </summary>
 /// <param name="end">
 ///    A <see cref="long" /> value containing the seek position
 ///    at which the media data ends and the tags begin.
 /// </param>
 /// <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>
 protected override void ReadEnd(long end,
                                 ReadStyle propertiesStyle)
 {
     tag = new CombinedTag(metadata, base.Tag);
     GetTag(TagTypes.Xiph, true);
 }
コード例 #8
0
        /// <summary>
        ///    Reads the file with a specified read style.
        /// </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)
        {
            // TODO: Support Id3v2 boxes!!!
            tag  = new CombinedTag();
            Mode = AccessMode.Read;
            try {
                FileParser parser = new FileParser(this);

                if (propertiesStyle == ReadStyle.None)
                {
                    parser.ParseTag();
                }
                else
                {
                    parser.ParseTagAndProperties();
                }

                InvariantStartPosition = parser.MdatStartPosition;
                InvariantEndPosition   = parser.MdatEndPosition;

                udta_box = parser.UserDataBox;

                if (udta_box != null && udta_box.GetChild(BoxType.Meta)
                    != null && udta_box.GetChild(BoxType.Meta
                                                 ).GetChild(BoxType.Ilst) != null)
                {
                    TagTypesOnDisk |= TagTypes.Apple;
                }

                if (udta_box == null)
                {
                    udta_box = new IsoUserDataBox();
                }

                apple_tag = new AppleTag(udta_box);
                tag.SetTags(apple_tag);

                // If we're not reading properties, we're done.
                if (propertiesStyle == ReadStyle.None)
                {
                    Mode = AccessMode.Closed;
                    return;
                }

                // Get the movie header box.
                IsoMovieHeaderBox mvhd_box = parser.MovieHeaderBox;
                if (mvhd_box == null)
                {
                    Mode = AccessMode.Closed;
                    throw new CorruptFileException(
                              "mvhd box not found.");
                }

                IsoAudioSampleEntry audio_sample_entry =
                    parser.AudioSampleEntry;
                IsoVisualSampleEntry visual_sample_entry =
                    parser.VisualSampleEntry;

                // Read the properties.
                properties = new Properties(mvhd_box.Duration,
                                            audio_sample_entry, visual_sample_entry);
            } finally {
                Mode = AccessMode.Closed;
            }
        }
コード例 #9
0
        /// <summary>
        ///    Reads the file with a specified read style.
        /// </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)
        {
            // TODO: Support Id3v2 boxes!!!
            tag = new CombinedTag ();
            Mode = AccessMode.Read;
            try {
                FileParser parser = new FileParser (this);

                if (propertiesStyle == ReadStyle.None)
                    parser.ParseTag ();
                else
                    parser.ParseTagAndProperties ();

                InvariantStartPosition = parser.MdatStartPosition;
                InvariantEndPosition = parser.MdatEndPosition;

                udta_boxes.AddRange(parser.UserDataBoxes);

                // Ensure our collection contains at least a single empty box
                if (udta_boxes.Count == 0) {
                    IsoUserDataBox dummy = new IsoUserDataBox ();
                    udta_boxes.Add(dummy);
                }

                // Check if a udta with ILST actually exists
                if (IsAppleTagUdtaPresent ())
                    TagTypesOnDisk |= TagTypes.Apple;	//There is an udta present with ILST info

                // Find the udta box with the Apple Tag ILST
                IsoUserDataBox udtaBox = FindAppleTagUdta();
                if (null == udtaBox) {
                    udtaBox = new IsoUserDataBox();
                }
                apple_tag = new AppleTag (udtaBox);
                tag.SetTags (apple_tag);

                // If we're not reading properties, we're done.
                if (propertiesStyle == ReadStyle.None) {
                    Mode = AccessMode.Closed;
                    return;
                }

                // Get the movie header box.
                IsoMovieHeaderBox mvhd_box = parser.MovieHeaderBox;
                if(mvhd_box == null) {
                    Mode = AccessMode.Closed;
                    throw new CorruptFileException (
                        "mvhd box not found.");
                }

                IsoAudioSampleEntry  audio_sample_entry =
                    parser.AudioSampleEntry;
                IsoVisualSampleEntry visual_sample_entry =
                    parser.VisualSampleEntry;

                // Read the properties.
                properties = new Properties (mvhd_box.Duration,
                    audio_sample_entry, visual_sample_entry);
            } finally {
                Mode = AccessMode.Closed;
            }
        }