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

📄 metadata.h

📁 在x86平台上运行不可信任代码的sandbox。
💻 H
📖 第 1 页 / 共 5 页
字号:
/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2001,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 FLAC__METADATA_H#define FLAC__METADATA_H#include "export.h"#include "callback.h"#include "format.h"/******************************************************************************	(For an example of how all these routines are used, see the source	code for the unit tests in src/test_libFLAC/metadata_*.c, or metaflac	in src/metaflac/)******************************************************************************//** \file include/FLAC/metadata.h * *  \brief *  This module provides functions 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 flac_metadata metadata \endlink module. *//** \defgroup flac_metadata FLAC/metadata.h: metadata interfaces *  \ingroup flac * *  \brief *  This module provides functions for creating and manipulating FLAC *  metadata blocks in memory, and three progressively more powerful *  interfaces for traversing and editing metadata in FLAC files. * *  There are three metadata interfaces of increasing complexity: * *  Level 0: *  Read-only access to the STREAMINFO and VORBIS_COMMENT blocks. * *  Level 1: *  Read-write access to all metadata blocks.  This level is write- *  efficient in most cases (more on this below), and uses less memory *  than level 2. * *  Level 2: *  Read-write access to all metadata blocks.  This level is write- *  efficient in all cases, but uses more memory since all metadata for *  the whole file is read into memory and manipulated before writing *  out again. * *  What do we mean by efficient?  Since FLAC metadata appears at the *  beginning of the file, when writing metadata back to a FLAC file *  it is possible to grow or shrink the metadata such that the entire *  file must be rewritten.  However, if the size remains the same during *  changes or PADDING blocks are utilized, only the metadata needs to be *  overwritten, which is much faster. * *  Efficient means the whole file is rewritten at most one time, and only *  when necessary.  Level 1 is not efficient only in the case that you *  cause more than one metadata block to grow or shrink beyond what can *  be accomodated by padding.  In this case you should probably use level *  2, which allows you to edit all the metadata for a file in memory and *  write it out all at once. * *  All levels know how to skip over and not disturb an ID3v2 tag at the *  front of the file. * *  All levels access files via their filenames.  In addition, level 2 *  has additional alternative read and write functions that take an I/O *  handle and callbacks, for times when access by filename is not possible. * *  In addition to the three interfaces, this module defines functions for *  creating and manipulating various metadata objects in memory.  As we see *  from the Format module, FLAC metadata blocks in memory are very primitive *  structures for storing information in an efficient way.  Reading *  information from the structures is easy but creating or modifying them *  directly is more complex.  The metadata object routines here facilitate *  this by taking care of the consistency and memory management drudgery. * *  Unless you will be using the level 1 or 2 interfaces to modify existing *  metadata however, you will not probably not need these. * *  From a dependency standpoint, none of the encoders or decoders require *  the metadata module.  This is so that embedded users can strip out the *  metadata module from libFLAC to reduce the size and complexity. */#ifdef __cplusplusextern "C" {#endif/** \defgroup flac_metadata_level0 FLAC/metadata.h: metadata level 0 interface *  \ingroup flac_metadata * *  \brief *  The level 0 interface consists of individual routines to read the *  STREAMINFO and VORBIS_COMMENT blocks, requiring only a filename. * *  It skips any ID3v2 tag at the head of the file. * * \{ *//** Read the STREAMINFO metadata block of the given FLAC file.  This function *  will skip any ID3v2 tag at the head of the file. * * \param filename    The path to the FLAC file to read. * \param streaminfo  A pointer to space for the STREAMINFO block.  Since *                    FLAC__StreamMetadata is a simple structure with no *                    memory allocation involved, you pass the address of *                    an existing structure.  It need not be initialized. * \assert *    \code filename != NULL \endcode *    \code streaminfo != NULL \endcode * \retval FLAC__bool *    \c true if a valid STREAMINFO block was read from \a filename.  Returns *    \c false if there was a memory allocation error, a file decoder error, *    or the file contained no STREAMINFO block.  (A memory allocation error *    is possible because this function must set up a file decoder.) */FLAC_API FLAC__bool FLAC__metadata_get_streaminfo(const char *filename, FLAC__StreamMetadata *streaminfo);/** Read the VORBIS_COMMENT metadata block of the given FLAC file.  This *  function will skip any ID3v2 tag at the head of the file. * * \param filename    The path to the FLAC file to read. * \param tags        The address where the returned pointer will be *                    stored.  The \a tags object must be deleted by *                    the caller using FLAC__metadata_object_delete(). * \assert *    \code filename != NULL \endcode *    \code streaminfo != NULL \endcode * \retval FLAC__bool *    \c true if a valid VORBIS_COMMENT block was read from \a filename, *    and \a *tags will be set to the address of the tag structure. *    Returns \c false if there was a memory allocation error, a file *    decoder error, or the file contained no VORBIS_COMMENT block, and *    \a *tags will be set to \c NULL. */FLAC_API FLAC__bool FLAC__metadata_get_tags(const char *filename, FLAC__StreamMetadata **tags);/* \} *//** \defgroup flac_metadata_level1 FLAC/metadata.h: metadata level 1 interface *  \ingroup flac_metadata * * \brief * The level 1 interface provides read-write access to FLAC file metadata and * operates directly on the FLAC file. * * The general usage of this interface is: * * - Create an iterator using FLAC__metadata_simple_iterator_new() * - Attach it to a file using FLAC__metadata_simple_iterator_init() and check *   the exit code.  Call FLAC__metadata_simple_iterator_is_writable() to *   see if the file is writable, or read-only access is allowed. * - Use FLAC__metadata_simple_iterator_next() and *   FLAC__metadata_simple_iterator_prev() to move around the blocks. *   This is does not read the actual blocks themselves. *   FLAC__metadata_simple_iterator_next() is relatively fast. *   FLAC__metadata_simple_iterator_prev() is slower since it needs to search *   forward from the front of the file. * - Use FLAC__metadata_simple_iterator_get_block_type() or *   FLAC__metadata_simple_iterator_get_block() to access the actual data at *   the current iterator position.  The returned object is yours to modify *   and free. * - Use FLAC__metadata_simple_iterator_set_block() to write a modified block *   back.  You must have write permission to the original file.  Make sure to *   read the whole comment to FLAC__metadata_simple_iterator_set_block() *   below. * - Use FLAC__metadata_simple_iterator_insert_block_after() to add new blocks. *   Use the object creation functions from *   \link flac_metadata_object here \endlink to generate new objects. * - Use FLAC__metadata_simple_iterator_delete_block() to remove the block *   currently referred to by the iterator, or replace it with padding. * - Destroy the iterator with FLAC__metadata_simple_iterator_delete() when *   finished. * * \note * The FLAC file remains open the whole time between * FLAC__metadata_simple_iterator_init() and * FLAC__metadata_simple_iterator_delete(), so make sure you are not altering * the file during this time. * * \note * Do not modify the \a is_last, \a length, or \a type fields of returned * FLAC__StreamMetadata objects.  These are managed automatically. * * \note * If any of the modification functions * (FLAC__metadata_simple_iterator_set_block(), * FLAC__metadata_simple_iterator_delete_block(), * FLAC__metadata_simple_iterator_insert_block_after(), etc.) return \c false, * you should delete the iterator as it may no longer be valid. * * \{ */struct FLAC__Metadata_SimpleIterator;/** The opaque structure definition for the level 1 iterator type. *  See the *  \link flac_metadata_level1 metadata level 1 module \endlink *  for a detailed description. */typedef struct FLAC__Metadata_SimpleIterator FLAC__Metadata_SimpleIterator;/** Status type for FLAC__Metadata_SimpleIterator. * *  The iterator's current status can be obtained by calling FLAC__metadata_simple_iterator_status(). */typedef enum {	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK = 0,	/**< The iterator is in the normal OK state */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT,	/**< The data passed into a function violated the function's usage criteria */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE,	/**< The iterator could not open the target file */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_A_FLAC_FILE,	/**< The iterator could not find the FLAC signature at the start of the file */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_WRITABLE,	/**< The iterator tried to write to a file that was not writable */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_BAD_METADATA,	/**< The iterator encountered input that does not conform to the FLAC metadata specification */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR,	/**< The iterator encountered an error while reading the FLAC file */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR,	/**< The iterator encountered an error while seeking in the FLAC file */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR,	/**< The iterator encountered an error while writing the FLAC file */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_RENAME_ERROR,	/**< The iterator encountered an error renaming the FLAC file */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_UNLINK_ERROR,	/**< The iterator encountered an error removing the temporary file */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR,	/**< Memory allocation failed */	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_INTERNAL_ERROR	/**< The caller violated an assertion or an unexpected error occurred */} FLAC__Metadata_SimpleIteratorStatus;/** Maps a FLAC__Metadata_SimpleIteratorStatus to a C string. * *  Using a FLAC__Metadata_SimpleIteratorStatus as the index to this array *  will give the string equivalent.  The contents should not be modified. */extern FLAC_API const char * const FLAC__Metadata_SimpleIteratorStatusString[];/** Create a new iterator instance. * * \retval FLAC__Metadata_SimpleIterator* *    \c NULL if there was an error allocating memory, else the new instance. */FLAC_API FLAC__Metadata_SimpleIterator *FLAC__metadata_simple_iterator_new();/** Free an iterator instance.  Deletes the object pointed to by \a iterator.

⌨️ 快捷键说明

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