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

📄 araw.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************** * araw.c: Pseudo audio decoder; for raw pcm data ***************************************************************************** * Copyright (C) 2001, 2003 VideoLAN * $Id: araw.c 10380 2005-03-17 21:50:29Z gbazin $ * * Authors: Laurent Aimar <fenrir@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., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include <vlc/vlc.h>#include <vlc/decoder.h>/***************************************************************************** * Module descriptor *****************************************************************************/static int  DecoderOpen ( vlc_object_t * );static void DecoderClose( vlc_object_t * );#ifdef ENABLE_SOUTstatic int  EncoderOpen ( vlc_object_t * );static void EncoderClose( vlc_object_t * );#endifvlc_module_begin();    /* audio decoder module */    set_description( _("Raw/Log Audio decoder") );    set_capability( "decoder", 100 );    set_category( CAT_INPUT );    set_subcategory( SUBCAT_INPUT_ACODEC );    set_callbacks( DecoderOpen, DecoderClose );#ifdef ENABLE_SOUT    /* audio encoder submodule */    add_submodule();    set_description( _("Raw audio encoder") );    set_capability( "encoder", 150 );    set_callbacks( EncoderOpen, EncoderClose );#endifvlc_module_end();/***************************************************************************** * Local prototypes *****************************************************************************/static aout_buffer_t *DecodeBlock( decoder_t *, block_t ** );static block_t *EncoderEncode( encoder_t *, aout_buffer_t * );struct decoder_sys_t{    int16_t *p_logtos16;  /* used with m/alaw to int16_t */    audio_date_t end_date;};static int pi_channels_maps[] ={    0,    AOUT_CHAN_CENTER,    AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT,    AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER,    AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_REARLEFT     | AOUT_CHAN_REARRIGHT,    AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER     | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT,    AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER     | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_LFE,    AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER     | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT     | AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT,    AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER     | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT     | AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT | AOUT_CHAN_LFE};static int16_t ulawtos16[256] ={    -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,    -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,    -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,    -11900, -11388, -10876, -10364,  -9852,  -9340,  -8828,  -8316,     -7932,  -7676,  -7420,  -7164,  -6908,  -6652,  -6396,  -6140,     -5884,  -5628,  -5372,  -5116,  -4860,  -4604,  -4348,  -4092,     -3900,  -3772,  -3644,  -3516,  -3388,  -3260,  -3132,  -3004,     -2876,  -2748,  -2620,  -2492,  -2364,  -2236,  -2108,  -1980,     -1884,  -1820,  -1756,  -1692,  -1628,  -1564,  -1500,  -1436,     -1372,  -1308,  -1244,  -1180,  -1116,  -1052,   -988,   -924,      -876,   -844,   -812,   -780,   -748,   -716,   -684,   -652,      -620,   -588,   -556,   -524,   -492,   -460,   -428,   -396,      -372,   -356,   -340,   -324,   -308,   -292,   -276,   -260,      -244,   -228,   -212,   -196,   -180,   -164,   -148,   -132,      -120,   -112,   -104,    -96,    -88,    -80,    -72,    -64,       -56,    -48,    -40,    -32,    -24,    -16,     -8,      0,     32124,  31100,  30076,  29052,  28028,  27004,  25980,  24956,     23932,  22908,  21884,  20860,  19836,  18812,  17788,  16764,     15996,  15484,  14972,  14460,  13948,  13436,  12924,  12412,     11900,  11388,  10876,  10364,   9852,   9340,   8828,   8316,      7932,   7676,   7420,   7164,   6908,   6652,   6396,   6140,      5884,   5628,   5372,   5116,   4860,   4604,   4348,   4092,      3900,   3772,   3644,   3516,   3388,   3260,   3132,   3004,      2876,   2748,   2620,   2492,   2364,   2236,   2108,   1980,      1884,   1820,   1756,   1692,   1628,   1564,   1500,   1436,      1372,   1308,   1244,   1180,   1116,   1052,    988,    924,       876,    844,    812,    780,    748,    716,    684,    652,       620,    588,    556,    524,    492,    460,    428,    396,       372,    356,    340,    324,    308,    292,    276,    260,       244,    228,    212,    196,    180,    164,    148,    132,       120,    112,    104,     96,     88,     80,     72,     64,        56,     48,     40,     32,     24,     16,      8,      0};static int16_t alawtos16[256] ={     -5504,  -5248,  -6016,  -5760,  -4480,  -4224,  -4992,  -4736,     -7552,  -7296,  -8064,  -7808,  -6528,  -6272,  -7040,  -6784,     -2752,  -2624,  -3008,  -2880,  -2240,  -2112,  -2496,  -2368,     -3776,  -3648,  -4032,  -3904,  -3264,  -3136,  -3520,  -3392,    -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,    -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,    -11008, -10496, -12032, -11520,  -8960,  -8448,  -9984,  -9472,    -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,      -344,   -328,   -376,   -360,   -280,   -264,   -312,   -296,      -472,   -456,   -504,   -488,   -408,   -392,   -440,   -424,       -88,    -72,   -120,   -104,    -24,     -8,    -56,    -40,      -216,   -200,   -248,   -232,   -152,   -136,   -184,   -168,     -1376,  -1312,  -1504,  -1440,  -1120,  -1056,  -1248,  -1184,     -1888,  -1824,  -2016,  -1952,  -1632,  -1568,  -1760,  -1696,      -688,   -656,   -752,   -720,   -560,   -528,   -624,   -592,      -944,   -912,  -1008,   -976,   -816,   -784,   -880,   -848,      5504,   5248,   6016,   5760,   4480,   4224,   4992,   4736,      7552,   7296,   8064,   7808,   6528,   6272,   7040,   6784,      2752,   2624,   3008,   2880,   2240,   2112,   2496,   2368,      3776,   3648,   4032,   3904,   3264,   3136,   3520,   3392,     22016,  20992,  24064,  23040,  17920,  16896,  19968,  18944,     30208,  29184,  32256,  31232,  26112,  25088,  28160,  27136,     11008,  10496,  12032,  11520,   8960,   8448,   9984,   9472,     15104,  14592,  16128,  15616,  13056,  12544,  14080,  13568,       344,    328,    376,    360,    280,    264,    312,    296,       472,    456,    504,    488,    408,    392,    440,    424,        88,     72,    120,    104,     24,      8,     56,     40,       216,    200,    248,    232,    152,    136,    184,    168,      1376,   1312,   1504,   1440,   1120,   1056,   1248,   1184,      1888,   1824,   2016,   1952,   1632,   1568,   1760,   1696,       688,    656,    752,    720,    560,    528,    624,    592,       944,    912,   1008,    976,    816,    784,    880,    848};/***************************************************************************** * DecoderOpen: probe the decoder and return score *****************************************************************************/static int DecoderOpen( vlc_object_t *p_this ){    decoder_t *p_dec = (decoder_t*)p_this;    decoder_sys_t *p_sys;    switch( p_dec->fmt_in.i_codec )    {    /* from wav/avi/asf file */    case VLC_FOURCC('a','r','a','w'):    case VLC_FOURCC('a','f','l','t'):    /* _signed_ big endian samples (mov)*/    case VLC_FOURCC('t','w','o','s'):    /* _signed_ little endian samples (mov)*/    case VLC_FOURCC('s','o','w','t'):    case VLC_FOURCC('a','l','a','w'):    case VLC_FOURCC('u','l','a','w'):    case VLC_FOURCC('m','l','a','w'):    case VLC_FOURCC('f','l','6','4'):    case VLC_FOURCC('f','l','3','2'):    case VLC_FOURCC('s','3','2','l'):    case VLC_FOURCC('s','3','2','b'):    case VLC_FOURCC('s','2','4','l'):    case VLC_FOURCC('s','2','4','b'):    case VLC_FOURCC('s','1','6','l'):    case VLC_FOURCC('s','1','6','b'):    case VLC_FOURCC('s','8',' ',' '):    case VLC_FOURCC('u','8',' ',' '):        break;    default:        return VLC_EGENERIC;    }    if( p_dec->fmt_in.audio.i_channels <= 0 ||        p_dec->fmt_in.audio.i_channels > 8 )    {        msg_Err( p_dec, "bad channels count (1-8)" );        return VLC_EGENERIC;    }    if( p_dec->fmt_in.audio.i_rate <= 0 )    {        msg_Err( p_dec, "bad samplerate" );        return VLC_EGENERIC;    }    /* Allocate the memory needed to store the decoder's structure */    if( ( p_dec->p_sys = p_sys =          (decoder_sys_t *)malloc(sizeof(decoder_sys_t)) ) == NULL )    {        msg_Err( p_dec, "out of memory" );        return VLC_EGENERIC;    }    p_sys->p_logtos16 = NULL;

⌨️ 快捷键说明

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