/// <summary>
        /// タグ情報を読み取ります。
        /// </summary>
        /// <param name="src">情報を読み取るストリーム。</param>
        /// <param name="tag">タグ。</param>
        /// <returns>成功時はタグ情報。それ以外は null 参照。</returns>
        /// <exception cref="NotSupportedException">未サポートの操作です。</exception>
        public object Read( Stream src, AsfTagInfo tag )
        {
            if( tag == null ) { throw new ArgumentNullException( "tag" ); }

            ObjectTagValue data;
            return ( this._tags.TryGetValue( tag.Name, out data ) ? data.Read( tag.Type, src ) : null );
        }
 /// <summary>
 /// 指定されたタグ情報を所有していることを調べます。
 /// </summary>
 /// <param name="tag">タグ。</param>
 /// <returns>所有している場合は true。それ以外は false。</returns>
 public bool HasValue( AsfTagInfo tag )
 {
     return this._tags.ContainsKey( tag.Name );
 }
        /// <summary>
        /// タグ情報を書き込みます。
        /// 既存のタグがなければ追加、ある場合は更新をおこないます。
        /// </summary>
        /// <param name="tag">タグ。</param>
        /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param>
        /// <exception cref="ArgumentNullException">tag が null 参照です。</exception>
        /// <exception cref="NotSupportedException">指定されたタグは読み取り専用です。</exception>
        public void Write( AsfTagInfo tag, object value )
        {
            if( tag == null  ) { throw new ArgumentNullException( "tag" ); }
            if( !tag.CanEdit ) { throw new NotSupportedException( "Tag is read-only." ); }

            ObjectTagValue tagValue;
            if( value == null )
            {
                // 削除
                if( this._tags.TryGetValue( tag.Name, out tagValue ) )
                {
                    this.Size -= tagValue.Length;
                    this._tags.Remove( tag.Name );
                }
            }
            else
            {
                // 更新と追加
                if( this._tags.TryGetValue( tag.Name, out tagValue ) )
                {
                    // 更新
                    this.Size -= tagValue.Length;
                    tagValue = new ObjectTagValue( tag.Type, value );
                    this.Size += tagValue.Length;
                    this._tags[ tag.Name ] = tagValue;
                }
                else
                {
                    // 追加
                    tagValue = new ObjectTagValue( tag.Type, value );
                    this.Size += tagValue.Length;
                    this._tags.Add( tag.Name, tagValue );
                }
            }
        }
Example #4
0
 /// <summary>
 /// タグ情報を読み取ります。
 /// </summary>
 /// <param name="src">情報を読み取るストリーム。</param>
 /// <param name="tag">タグ。</param>
 /// <returns>成功時はタグ情報。それ以外は null 参照。</returns>
 /// <exception cref="NotSupportedException">未サポートの操作です。</exception>
 public object Read( Stream src, AsfTagInfo tag )
 {
     throw new NotSupportedException();
 }
Example #5
0
 /// <summary>
 /// 指定されたタグ情報を所有していることを調べます。
 /// </summary>
 /// <param name="tag">タグ。</param>
 /// <returns>所有している場合は true。それ以外は false。</returns>
 /// <exception cref="NotSupportedException">未サポートの操作です。</exception>
 public bool HasValue( AsfTagInfo tag )
 {
     throw new NotSupportedException();
 }
Example #6
0
 /// <summary>
 /// タグ情報を追加、更新、または削除します。
 /// </summary>
 /// <param name="tag">タグ。</param>
 /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param>
 /// <exception cref="NotSupportedException">未サポートの操作です。</exception>
 public void Write( AsfTagInfo tag, object value )
 {
     throw new NotSupportedException();
 }
Example #7
0
 /// <summary>
 /// タグ情報を書き込みます。
 /// 既存のタグがなければ追加、ある場合は更新をおこないます。
 /// </summary>
 /// <param name="tag">タグ。</param>
 /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param>
 public void Write( AsfTagInfo tag, object value )
 {
     throw new NotSupportedException( "This object is read-only." );
 }
Example #8
0
        /// <summary>
        /// タグ情報を読み取ります。
        /// </summary>
        /// <param name="src">情報を読み取るストリーム。</param>
        /// <param name="tag">タグ。</param>
        /// <returns>成功時はタグ情報。それ以外は null 参照。</returns>
        /// <exception cref="NotSupportedException">未サポートの操作です。</exception>
        public object Read( Stream src, AsfTagInfo tag )
        {
            if( tag == AsfTags.Duration )
            {
                return this.Duration;
            }
            else if( tag == AsfTags.FileSize )
            {
                return this.FileSize;
            }

            return null;
        }
Example #9
0
 /// <summary>
 /// 指定されたタグ情報を所有していることを調べます。
 /// </summary>
 /// <param name="tag">タグ。</param>
 /// <returns>所有している場合は true。それ以外は false。</returns>
 public bool HasValue( AsfTagInfo tag )
 {
     return ( tag == AsfTags.Duration || tag == AsfTags.FileSize );
 }
Example #10
0
        /// <summary>
        /// タグ情報を書き込みます。
        /// 既存のタグがなければ追加、ある場合は更新をおこないます。
        /// </summary>
        /// <param name="tag">タグ。</param>
        /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param>
        public void Write( AsfTagInfo tag, object value )
        {
            IAsfObject obj;
            if( this._objects.TryGetValue( tag.HeaderObject, out obj ) )
            {
                var old = obj.Size;
                obj.Write( tag, value );

                var size = obj.Size - old;
                this.Size += size;

                // ファイル サイズを更新
                var file = this._objects[ HeaderObjectType.FileProperties ] as FilePropertiesObject;
                file.FileSize += ( ulong )( size );
            }
        }
Example #11
0
        /// <summary>
        /// タグ情報を読み取ります。
        /// </summary>
        /// <param name="tag">タグ。</param>
        /// <param name="src">情報を読み取るストリーム。</param>
        /// <returns>成功時はタグ情報。それ以外は null 参照。</returns>
        /// <exception cref="ArgumentNullException">tag が null 参照です。</exception>
        public object Read( AsfTagInfo tag )
        {
            if( tag == null ) { throw new ArgumentNullException( "'tag' is null." ); }

            IAsfObject obj;
            return ( this._objects.TryGetValue( tag.HeaderObject, out obj ) ? obj.Read( this._src, tag ) : null );
        }
Example #12
0
        /// <summary>
        /// 指定されたタグ情報を所有していることを調べます。
        /// </summary>
        /// <param name="tag">タグ。</param>
        /// <returns>所有している場合は true。それ以外は false。</returns>
        /// <exception cref="ArgumentNullException">tag が null 参照です。</exception>
        public bool HasValue( AsfTagInfo tag )
        {
            if( tag == null ) { throw new ArgumentNullException( "'tag' is null." ); }

            IAsfObject asfObject;
            return ( this._objects.TryGetValue( tag.HeaderObject, out asfObject ) ? asfObject.HasValue( tag ) : false );
        }