⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metadata.h

📁 tcpmp.src.0.72RC1 优秀的多媒体播放器TCPMP的源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
/* libFLAC++ - Free Lossless Audio Codec library * Copyright (C) 2002,2003,2004,2005  Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#ifndef FLACPP__METADATA_H#define FLACPP__METADATA_H#include "export.h"#include "FLAC/metadata.h"// ===============================================================////  Full documentation for the metadata interface can be found//  in the C layer in include/FLAC/metadata.h//// ===============================================================/** \file include/FLAC++/metadata.h * *  \brief *  This module provides classes for creating and manipulating FLAC *  metadata blocks in memory, and three progressively more powerful *  interfaces for traversing and editing metadata in FLAC files. * *  See the detailed documentation for each interface in the *  \link flacpp_metadata metadata \endlink module. *//** \defgroup flacpp_metadata FLAC++/metadata.h: metadata interfaces *  \ingroup flacpp * *  \brief *  This module provides classes for creating and manipulating FLAC *  metadata blocks in memory, and three progressively more powerful *  interfaces for traversing and editing metadata in FLAC files. * *  The behavior closely mimics the C layer interface; be sure to read *  the detailed description of the *  \link flac_metadata C metadata module \endlink. */namespace FLAC {	namespace Metadata {		// ============================================================		//		//  Metadata objects		//		// ============================================================		/** \defgroup flacpp_metadata_object FLAC++/metadata.h: metadata object classes		 *  \ingroup flacpp_metadata		 *		 * This module contains classes representing FLAC metadata		 * blocks in memory.		 *		 * The behavior closely mimics the C layer interface; be		 * sure to read the detailed description of the		 * \link flac_metadata_object C metadata object module \endlink.		 *		 * Any time a metadata object is constructed or assigned, you		 * should check is_valid() to make sure the underlying		 * ::FLAC__StreamMetadata object was able to be created.		 *		 * \warning		 * When the get_*() methods of any metadata object method		 * return you a const pointer, DO NOT disobey and write into it.		 * Always use the set_*() methods.		 *		 * \{		 */		/** Base class for all metadata block types.		 */		class FLACPP_API Prototype {		protected:			//@{			/** Constructs a copy of the given object.  This form			 *  always performs a deep copy.			 */			Prototype(const Prototype &);			Prototype(const ::FLAC__StreamMetadata &);			Prototype(const ::FLAC__StreamMetadata *);			//@}			/** Constructs an object with copy control.  When \a copy			 *  is \c true, behaves identically to			 *  FLAC::Metadata::Prototype::Prototype(const ::FLAC__StreamMetadata *object).			 *  When \a copy is \c false, the instance takes ownership of			 *  the pointer and the ::FLAC__StreamMetadata object will			 *  be freed by the destructor.			 *			 *  \assert			 *    \code object != NULL \endcode			 */			Prototype(::FLAC__StreamMetadata *object, bool copy);			//@{			/** Assign from another object.  Always performs a deep copy. */			Prototype &operator=(const Prototype &);			Prototype &operator=(const ::FLAC__StreamMetadata &);			Prototype &operator=(const ::FLAC__StreamMetadata *);			//@}			/** Assigns an object with copy control.  See			 *  Prototype(::FLAC__StreamMetadata *object, bool copy).			 */			Prototype &assign_object(::FLAC__StreamMetadata *object, bool copy);			/** Deletes the underlying ::FLAC__StreamMetadata object.			 */			virtual void clear();			::FLAC__StreamMetadata *object_;		public:			/** Deletes the underlying ::FLAC__StreamMetadata object.			 */			virtual ~Prototype();			//@{			/** Check for equality, performing a deep compare by following pointers. */			inline bool operator==(const Prototype &) const;			inline bool operator==(const ::FLAC__StreamMetadata &) const;			inline bool operator==(const ::FLAC__StreamMetadata *) const;			//@}			//@{			/** Check for inequality, performing a deep compare by following pointers. */			inline bool operator!=(const Prototype &) const;			inline bool operator!=(const ::FLAC__StreamMetadata &) const;			inline bool operator!=(const ::FLAC__StreamMetadata *) const;			//@}			friend class SimpleIterator;			friend class Iterator;			/** Returns \c true if the object was correctly constructed			 *  (i.e. the underlying ::FLAC__StreamMetadata object was			 *  properly allocated), else \c false.			 */			inline bool is_valid() const;			/** Returns \c true if this block is the last block in a			 *  stream, else \c false.			 *			 * \assert			 *   \code is_valid() \endcode			 */			bool get_is_last() const;			/** Returns the type of the block.			 *			 * \assert			 *   \code is_valid() \endcode			 */			::FLAC__MetadataType get_type() const;			/** Returns the stream length of the metadata block.			 *			 * \note			 *   The length does not include the metadata block header,			 *   per spec.			 *			 * \assert			 *   \code is_valid() \endcode			 */			unsigned get_length() const;			/** Sets the "is_last" flag for the block.  When using the iterators			 *  it is not necessary to set this flag; they will do it for you.			 *			 * \assert			 *   \code is_valid() \endcode			 */			void set_is_last(bool);			/** Returns a pointer to the underlying ::FLAC__StreamMetadata			 *  object.  This can be useful for plugging any holes between			 *  the C++ and C interfaces.			 *			 * \assert			 *   \code is_valid() \endcode			 */			inline operator const ::FLAC__StreamMetadata *() const;		private:			/** Private and undefined so you can't use it. */			Prototype();			// These are used only by Iterator			bool is_reference_;			inline void set_reference(bool x) { is_reference_ = x; }		};#ifdef _MSC_VER// warning C4800: 'int' : forcing to bool 'true' or 'false' (performance warning)#pragma warning ( disable : 4800 )#endif		inline bool Prototype::operator==(const Prototype &object) const		{ return (bool)::FLAC__metadata_object_is_equal(object_, object.object_); }		inline bool Prototype::operator==(const ::FLAC__StreamMetadata &object) const		{ return (bool)::FLAC__metadata_object_is_equal(object_, &object); }		inline bool Prototype::operator==(const ::FLAC__StreamMetadata *object) const		{ return (bool)::FLAC__metadata_object_is_equal(object_, object); }#ifdef _MSC_VER// @@@ how to re-enable?  the following doesn't work// #pragma warning ( enable : 4800 )#endif		inline bool Prototype::operator!=(const Prototype &object) const		{ return !operator==(object); }		inline bool Prototype::operator!=(const ::FLAC__StreamMetadata &object) const		{ return !operator==(object); }		inline bool Prototype::operator!=(const ::FLAC__StreamMetadata *object) const		{ return !operator==(object); }		inline bool Prototype::is_valid() const		{ return 0 != object_; }		inline Prototype::operator const ::FLAC__StreamMetadata *() const		{ return object_; }		/** Create a deep copy of an object and return it. */		FLACPP_API Prototype *clone(const Prototype *);		/** STREAMINFO metadata block.		 *  See <A HREF="../format.html#metadata_block_streaminfo">format specification</A>.		 */		class FLACPP_API StreamInfo : public Prototype {		public:			StreamInfo();			//@{			/** Constructs a copy of the given object.  This form			 *  always performs a deep copy.			 */			inline StreamInfo(const StreamInfo &object): Prototype(object) { }			inline StreamInfo(const ::FLAC__StreamMetadata &object): Prototype(object) { }			inline StreamInfo(const ::FLAC__StreamMetadata *object): Prototype(object) { }			//@}			/** Constructs an object with copy control.  See			 *  Prototype(::FLAC__StreamMetadata *object, bool copy).			 */			inline StreamInfo(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }			~StreamInfo();			//@{			/** Assign from another object.  Always performs a deep copy. */			inline StreamInfo &operator=(const StreamInfo &object) { Prototype::operator=(object); return *this; }			inline StreamInfo &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }			inline StreamInfo &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }			//@}			/** Assigns an object with copy control.  See			 *  Prototype::assign_object(::FLAC__StreamMetadata *object, bool copy).			 */			inline StreamInfo &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }			//@{			/** Check for equality, performing a deep compare by following pointers. */			inline bool operator==(const StreamInfo &object) const { return Prototype::operator==(object); }			inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }			inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }			//@}			//@{			/** Check for inequality, performing a deep compare by following pointers. */			inline bool operator!=(const StreamInfo &object) const { return Prototype::operator!=(object); }			inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }			inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }			//@}			//@{			/** See <A HREF="../format.html#metadata_block_streaminfo">format specification</A>. */			unsigned get_min_blocksize() const;			unsigned get_max_blocksize() const;			unsigned get_min_framesize() const;			unsigned get_max_framesize() const;			unsigned get_sample_rate() const;			unsigned get_channels() const;			unsigned get_bits_per_sample() const;			FLAC__uint64 get_total_samples() const;			const FLAC__byte *get_md5sum() const;			void set_min_blocksize(unsigned value);			void set_max_blocksize(unsigned value);			void set_min_framesize(unsigned value);			void set_max_framesize(unsigned value);			void set_sample_rate(unsigned value);			void set_channels(unsigned value);			void set_bits_per_sample(unsigned value);			void set_total_samples(FLAC__uint64 value);			void set_md5sum(const FLAC__byte value[16]);			//@}		};		/** PADDING metadata block.		 *  See <A HREF="../format.html#metadata_block_padding">format specification</A>.		 */		class FLACPP_API Padding : public Prototype {		public:			Padding();			//@{			/** Constructs a copy of the given object.  This form			 *  always performs a deep copy.			 */			inline Padding(const Padding &object): Prototype(object) { }			inline Padding(const ::FLAC__StreamMetadata &object): Prototype(object) { }			inline Padding(const ::FLAC__StreamMetadata *object): Prototype(object) { }			//@}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -