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

📄 vlc_aout.h

📁 mips版本的VLC视频服务器
💻 H
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * audio_output.h : audio output interface ***************************************************************************** * Copyright (C) 2002-2005 the VideoLAN team * $Id: 98a2a584749596f7c9cc444909fbac4167a1a479 $ * * Authors: Christophe Massiot <massiot@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#ifndef VLC_AOUT_H#define VLC_AOUT_H 1/** * \file * This file defines functions, structures and macros for audio output object */# ifdef __cplusplusextern "C" {# endif#include "vlc_es.h"#define AOUT_FMTS_IDENTICAL( p_first, p_second ) (                          \    ((p_first)->i_format == (p_second)->i_format)                           \      && ((p_first)->i_rate == (p_second)->i_rate)                          \      && ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\      && ((p_first)->i_original_channels == (p_second)->i_original_channels) )/* Check if i_rate == i_rate and i_channels == i_channels */#define AOUT_FMTS_SIMILAR( p_first, p_second ) (                            \    ((p_first)->i_rate == (p_second)->i_rate)                               \      && ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\      && ((p_first)->i_original_channels == (p_second)->i_original_channels) )#ifdef WORDS_BIGENDIAN#   define AOUT_FMT_S16_NE VLC_FOURCC('s','1','6','b')#   define AOUT_FMT_U16_NE VLC_FOURCC('u','1','6','b')#   define AOUT_FMT_S24_NE VLC_FOURCC('s','2','4','b')#   define AOUT_FMT_S32_NE VLC_FOURCC('s','3','2','b')#   define AOUT_FMT_SPDIF_NE VLC_FOURCC('s','p','d','b')#else#   define AOUT_FMT_S16_NE VLC_FOURCC('s','1','6','l')#   define AOUT_FMT_U16_NE VLC_FOURCC('u','1','6','l')#   define AOUT_FMT_S24_NE VLC_FOURCC('s','2','4','l')#   define AOUT_FMT_S32_NE VLC_FOURCC('s','3','2','l')#   define AOUT_FMT_SPDIF_NE VLC_FOURCC('s','p','d','i')#endif#define AOUT_FMT_NON_LINEAR( p_format )                                    \    ( ((p_format)->i_format == VLC_FOURCC('s','p','d','i'))                \       || ((p_format)->i_format == VLC_FOURCC('s','p','d','b'))            \       || ((p_format)->i_format == VLC_FOURCC('a','5','2',' '))            \       || ((p_format)->i_format == VLC_FOURCC('d','t','s',' ')) )/* This is heavily borrowed from libmad, by Robert Leslie <rob@mars.org> *//* * Fixed-point format: 0xABBBBBBB * A == whole part      (sign + 3 bits) * B == fractional part (28 bits) * * Values are signed two's complement, so the effective range is: * 0x80000000 to 0x7fffffff *       -8.0 to +7.9999999962747097015380859375 * * The smallest representable value is: * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9) * * 28 bits of fractional accuracy represent about * 8.6 digits of decimal accuracy. * * Fixed-point numbers can be added or subtracted as normal * integers, but multiplication requires shifting the 64-bit result * from 56 fractional bits back to 28 (and rounding.) */typedef int32_t vlc_fixed_t;#define FIXED32_FRACBITS 28#define FIXED32_MIN ((vlc_fixed_t) -0x80000000L)#define FIXED32_MAX ((vlc_fixed_t) +0x7fffffffL)#define FIXED32_ONE ((vlc_fixed_t) 0x10000000)/* * Channels descriptions *//* Values available for physical and original channels */#define AOUT_CHAN_CENTER            0x1#define AOUT_CHAN_LEFT              0x2#define AOUT_CHAN_RIGHT             0x4#define AOUT_CHAN_REARCENTER        0x10#define AOUT_CHAN_REARLEFT          0x20#define AOUT_CHAN_REARRIGHT         0x40#define AOUT_CHAN_MIDDLELEFT        0x100#define AOUT_CHAN_MIDDLERIGHT       0x200#define AOUT_CHAN_LFE               0x1000/* Values available for original channels only */#define AOUT_CHAN_DOLBYSTEREO       0x10000#define AOUT_CHAN_DUALMONO          0x20000#define AOUT_CHAN_REVERSESTEREO     0x40000#define AOUT_CHAN_PHYSMASK          0xFFFF#define AOUT_CHAN_MAX               9/* Values used for the audio-device and audio-channels object variables */#define AOUT_VAR_MONO               1#define AOUT_VAR_STEREO             2#define AOUT_VAR_2F2R               4#define AOUT_VAR_3F2R               5#define AOUT_VAR_5_1                6#define AOUT_VAR_6_1                7#define AOUT_VAR_7_1                8#define AOUT_VAR_SPDIF              10#define AOUT_VAR_CHAN_STEREO        1#define AOUT_VAR_CHAN_RSTEREO       2#define AOUT_VAR_CHAN_LEFT          3#define AOUT_VAR_CHAN_RIGHT         4#define AOUT_VAR_CHAN_DOLBYS        5/***************************************************************************** * Main audio output structures *****************************************************************************//** audio output buffer */struct aout_buffer_t{    uint8_t *               p_buffer;    int                     i_alloc_type;    /* i_size is the real size of the buffer (used for debug ONLY), i_nb_bytes     * is the number of significative bytes in it. */    size_t                  i_size, i_nb_bytes;    unsigned int            i_nb_samples;    mtime_t                 start_date, end_date;    bool                    b_discontinuity; /* Set on discontinuity (for non pcm stream) */    struct aout_buffer_t *  p_next;    /** Private data (aout_buffer_t will disappear soon so no need for an     * aout_buffer_sys_t type) */    void * p_sys;    /** This way the release can be overloaded */    void (*pf_release)( aout_buffer_t * );};#define aout_BufferFree( p_buffer ) do {                                    \    if( p_buffer != NULL && (p_buffer)->i_alloc_type == AOUT_ALLOC_HEAP )   \    {                                                                       \        free( p_buffer );                                                   \    }                                                                       \    p_buffer = NULL; } while(0)/* Size of a frame for S/PDIF output. */#define AOUT_SPDIF_SIZE 6144/* Number of samples in an A/52 frame. */#define A52_FRAME_NB 1536/* Max input rate factor (1/4 -> 4) */#define AOUT_MAX_INPUT_RATE (4)/** date incrementation helper structure without long-term * rounding errors */struct audio_date_t{    mtime_t  date;    uint32_t i_divider;    uint32_t i_remainder;};/** allocation of memory in the audio output */typedef struct aout_alloc_t{    int                     i_alloc_type;    int                     i_bytes_per_sec;} aout_alloc_t;#define AOUT_ALLOC_NONE     0#define AOUT_ALLOC_STACK    1#define AOUT_ALLOC_HEAP     2/** audio output mixer */typedef struct aout_mixer_t{    audio_sample_format_t   mixer;    aout_alloc_t            output_alloc;    module_t *              p_module;    struct aout_mixer_sys_t * p_sys;    void                 (* pf_do_work)( struct aout_instance_t *,                                         struct aout_buffer_t * );    /** If b_error == 1, there is no mixer. */    bool              b_error;    /** Multiplier used to raise or lower the volume of the sound in     * software. Beware, this creates sound distortion and should be avoided     * as much as possible. This isn't available for non-float32 mixer. */    float                   f_multiplier;} aout_mixer_t;/** audio output buffer FIFO */struct aout_fifo_t{    aout_buffer_t *         p_first;    aout_buffer_t **        pp_last;    audio_date_t            end_date;};/* */typedef struct{    vout_thread_t  *(*pf_request_vout)( void *,

⌨️ 快捷键说明

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