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

📄 stream_decoder.h

📁 在x86平台上运行不可信任代码的sandbox。
💻 H
📖 第 1 页 / 共 3 页
字号:
/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,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__STREAM_DECODER_H#define FLAC__STREAM_DECODER_H#include "export.h"#include "format.h"#ifdef __cplusplusextern "C" {#endif/** \file include/FLAC/stream_decoder.h * *  \brief *  This module contains the functions which implement the stream *  decoder. * *  See the detailed documentation in the *  \link flac_stream_decoder stream decoder \endlink module. *//** \defgroup flac_decoder FLAC/ *_decoder.h: decoder interfaces *  \ingroup flac * *  \brief *  This module describes the three decoder layers provided by libFLAC. * * For decoding FLAC streams, libFLAC provides three layers of access.  The * lowest layer is non-seekable stream-level decoding, the next is seekable * stream-level decoding, and the highest layer is file-level decoding.  The * interfaces are described in the \link flac_stream_decoder stream decoder * \endlink, \link flac_seekable_stream_decoder seekable stream decoder * \endlink, and \link flac_file_decoder file decoder \endlink modules * respectively.  Typically you will choose the highest layer that your input * source will support. * * The stream decoder relies on callbacks for all input and output and has no * provisions for seeking.  The seekable stream decoder wraps the stream * decoder and exposes functions for seeking.  However, you must provide * extra callbacks for seek-related operations on your stream, like seek and * tell.  The file decoder wraps the seekable stream decoder and supplies * most of the callbacks internally, simplifying the processing of standard * files. *//** \defgroup flac_stream_decoder FLAC/stream_decoder.h: stream decoder interface *  \ingroup flac_decoder * *  \brief *  This module contains the functions which implement the stream *  decoder. * * The basic usage of this decoder is as follows: * - The program creates an instance of a decoder using *   FLAC__stream_decoder_new(). * - The program overrides the default settings and sets callbacks for *   reading, writing, error reporting, and metadata reporting using *   FLAC__stream_decoder_set_*() functions. * - The program initializes the instance to validate the settings and *   prepare for decoding using FLAC__stream_decoder_init(). * - The program calls the FLAC__stream_decoder_process_*() functions *   to decode data, which subsequently calls the callbacks. * - The program finishes the decoding with FLAC__stream_decoder_finish(), *   which flushes the input and output and resets the decoder to the *   uninitialized state. * - The instance may be used again or deleted with *   FLAC__stream_decoder_delete(). * * In more detail, the program will create a new instance by calling * FLAC__stream_decoder_new(), then call FLAC__stream_decoder_set_*() * functions to set the callbacks and client data, and call * FLAC__stream_decoder_init().  The required callbacks are: * * - Read callback - This function will be called when the decoder needs *   more input data.  The address of the buffer to be filled is supplied, *   along with the number of bytes the buffer can hold.  The callback may *   choose to supply less data and modify the byte count but must be careful *   not to overflow the buffer.  The callback then returns a status code *   chosen from FLAC__StreamDecoderReadStatus. * - Write callback - This function will be called when the decoder has *   decoded a single frame of data.  The decoder will pass the frame *   metadata as well as an array of pointers (one for each channel) *   pointing to the decoded audio. * - Metadata callback - This function will be called when the decoder has *   decoded a metadata block.  In a valid FLAC file there will always be *   one STREAMINFO block, followed by zero or more other metadata *   blocks.  These will be supplied by the decoder in the same order as *   they appear in the stream and always before the first audio frame *   (i.e. write callback).  The metadata block that is passed in must not *   be modified, and it doesn't live beyond the callback, so you should *   make a copy of it with FLAC__metadata_object_clone() if you will need *   it elsewhere.  Since metadata blocks can potentially be large, by *   default the decoder only calls the metadata callback for the STREAMINFO *   block; you can instruct the decoder to pass or filter other blocks with *   FLAC__stream_decoder_set_metadata_*() calls. * - Error callback - This function will be called whenever an error occurs *   during decoding. * * Once the decoder is initialized, your program will call one of several * functions to start the decoding process: * * - FLAC__stream_decoder_process_single() - Tells the decoder to process at *   most one metadata block or audio frame and return, calling either the *   metadata callback or write callback, respectively, once.  If the decoder *   loses sync it will return with only the error callback being called. * - FLAC__stream_decoder_process_until_end_of_metadata() - Tells the decoder *   to process the stream from the current location and stop upon reaching *   the first audio frame.  The user will get one metadata, write, or error *   callback per metadata block, audio frame, or sync error, respectively. * - FLAC__stream_decoder_process_until_end_of_stream() - Tells the decoder *   to process the stream from the current location until the read callback *   returns FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM or *   FLAC__STREAM_DECODER_READ_STATUS_ABORT.  The user will get one metadata, *   write, or error callback per metadata block, audio frame, or sync error, *   respectively. * * When the decoder has finished decoding (normally or through an abort), * the instance is finished by calling FLAC__stream_decoder_finish(), which * ensures the decoder is in the correct state and frees memory.  Then the * instance may be deleted with FLAC__stream_decoder_delete() or initialized * again to decode another stream. * * Note that the stream decoder has no real concept of stream position, it * just converts data.  To seek within a stream the callbacks have only to * flush the decoder using FLAC__stream_decoder_flush() and start feeding * data from the new position through the read callback.  The seekable * stream decoder does just this. * * The FLAC__stream_decoder_set_metadata_*() functions deserve special * attention.  By default, the decoder only calls the metadata_callback for * the STREAMINFO block.  These functions allow you to tell the decoder * explicitly which blocks to parse and return via the metadata_callback * and/or which to skip.  Use a FLAC__stream_decoder_set_metadata_respond_all(), * FLAC__stream_decoder_set_metadata_ignore() ... or FLAC__stream_decoder_set_metadata_ignore_all(), * FLAC__stream_decoder_set_metadata_respond() ... sequence to exactly specify which * blocks to return.  Remember that some metadata blocks can be big so * filtering out the ones you don't use can reduce the memory requirements * of the decoder.  Also note the special forms * FLAC__stream_decoder_set_metadata_respond_application(id) and * FLAC__stream_decoder_set_metadata_ignore_application(id) for filtering APPLICATION * blocks based on the application ID. * * STREAMINFO and SEEKTABLE blocks are always parsed and used internally, but * they still can legally be filtered from the metadata_callback. * * \note * The "set" functions may only be called when the decoder is in the * state FLAC__STREAM_DECODER_UNINITIALIZED, i.e. after * FLAC__stream_decoder_new() or FLAC__stream_decoder_finish(), but * before FLAC__stream_decoder_init().  If this is the case they will * return \c true, otherwise \c false. * * \note * FLAC__stream_decoder_finish() resets all settings to the constructor * defaults, including the callbacks. * * \{ *//** State values for a FLAC__StreamDecoder * *  The decoder's state can be obtained by calling FLAC__stream_decoder_get_state(). */typedef enum {	FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0,	/**< The decoder is ready to search for metadata. */	FLAC__STREAM_DECODER_READ_METADATA,	/**< The decoder is ready to or is in the process of reading metadata. */	FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC,	/**< The decoder is ready to or is in the process of searching for the frame sync code. */	FLAC__STREAM_DECODER_READ_FRAME,	/**< The decoder is ready to or is in the process of reading a frame. */	FLAC__STREAM_DECODER_END_OF_STREAM,	/**< The decoder has reached the end of the stream. */	FLAC__STREAM_DECODER_ABORTED,	/**< The decoder was aborted by the read callback. */	FLAC__STREAM_DECODER_UNPARSEABLE_STREAM,	/**< The decoder encountered reserved fields in use in the stream. */	FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,	/**< An error occurred allocating memory. */	FLAC__STREAM_DECODER_ALREADY_INITIALIZED,	/**< FLAC__stream_decoder_init() was called when the decoder was	 * already initialized, usually because	 * FLAC__stream_decoder_finish() was not called.	 */	FLAC__STREAM_DECODER_INVALID_CALLBACK,	/**< FLAC__stream_decoder_init() was called without all callbacks being set. */	FLAC__STREAM_DECODER_UNINITIALIZED	/**< The decoder is in the uninitialized state. */} FLAC__StreamDecoderState;/** Maps a FLAC__StreamDecoderState to a C string. * *  Using a FLAC__StreamDecoderState as the index to this array *  will give the string equivalent.  The contents should not be modified. */extern FLAC_API const char * const FLAC__StreamDecoderStateString[];/** Return values for the FLAC__StreamDecoder read callback. */typedef enum {	FLAC__STREAM_DECODER_READ_STATUS_CONTINUE,	/**< The read was OK and decoding can continue. */	FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM,	/**< The read was attempted at the end of the stream. */	FLAC__STREAM_DECODER_READ_STATUS_ABORT	/**< An unrecoverable error occurred.  The decoder will return from the process call. */} FLAC__StreamDecoderReadStatus;/** Maps a FLAC__StreamDecoderReadStatus to a C string. * *  Using a FLAC__StreamDecoderReadStatus as the index to this array *  will give the string equivalent.  The contents should not be modified. */extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[];/** Return values for the FLAC__StreamDecoder write callback. */typedef enum {	FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE,	/**< The write was OK and decoding can continue. */	FLAC__STREAM_DECODER_WRITE_STATUS_ABORT	/**< An unrecoverable error occurred.  The decoder will return from the process call. */} FLAC__StreamDecoderWriteStatus;/** Maps a FLAC__StreamDecoderWriteStatus to a C string. * *  Using a FLAC__StreamDecoderWriteStatus as the index to this array *  will give the string equivalent.  The contents should not be modified. */extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[];/** Possible values passed in to the FLAC__StreamDecoder error callback. */typedef enum {	FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC,	/**< An error in the stream caused the decoder to lose synchronization. */

⌨️ 快捷键说明

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