亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? adpcm.c

?? mediastreamer2是開源的網(wǎng)絡(luò)傳輸媒體流的庫
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* * ADPCM codecs * Copyright (c) 2001-2003 The ffmpeg Project * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */#include "avcodec.h"#include "bitstream.h"#include "bytestream.h"/** * @file adpcm.c * ADPCM codecs. * First version by Francois Revol (revol@free.fr) * Fringe ADPCM codecs (e.g., DK3, DK4, Westwood) *   by Mike Melanson (melanson@pcisys.net) * CD-ROM XA ADPCM codec by BERO * EA ADPCM decoder by Robin Kay (komadori@myrealbox.com) * EA ADPCM R1/R2/R3 decoder by Peter Ross (pross@xvid.org) * EA IMA EACS decoder by Peter Ross (pross@xvid.org) * EA IMA SEAD decoder by Peter Ross (pross@xvid.org) * EA ADPCM XAS decoder by Peter Ross (pross@xvid.org) * THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl) * * Features and limitations: * * Reference documents: * http://www.pcisys.net/~melanson/codecs/simpleaudio.html * http://www.geocities.com/SiliconValley/8682/aud3.txt * http://openquicktime.sourceforge.net/plugins.htm * XAnim sources (xa_codec.c) http://www.rasnaimaging.com/people/lapus/download.html * http://www.cs.ucla.edu/~leec/mediabench/applications.html * SoX source code http://home.sprynet.com/~cbagwell/sox.html * * CD-ROM XA: * http://ku-www.ss.titech.ac.jp/~yatsushi/xaadpcm.html * vagpack & depack http://homepages.compuserve.de/bITmASTER32/psx-index.html * readstr http://www.geocities.co.jp/Playtown/2004/ */#define BLKSIZE 1024/* step_table[] and index_table[] are from the ADPCM reference source *//* This is the index table: */static const int index_table[16] = {    -1, -1, -1, -1, 2, 4, 6, 8,    -1, -1, -1, -1, 2, 4, 6, 8,};/** * This is the step table. Note that many programs use slight deviations from * this table, but such deviations are negligible: */static const int step_table[89] = {    7, 8, 9, 10, 11, 12, 13, 14, 16, 17,    19, 21, 23, 25, 28, 31, 34, 37, 41, 45,    50, 55, 60, 66, 73, 80, 88, 97, 107, 118,    130, 143, 157, 173, 190, 209, 230, 253, 279, 307,    337, 371, 408, 449, 494, 544, 598, 658, 724, 796,    876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,    2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,    5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,    15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767};/* These are for MS-ADPCM *//* AdaptationTable[], AdaptCoeff1[], and AdaptCoeff2[] are from libsndfile */static const int AdaptationTable[] = {        230, 230, 230, 230, 307, 409, 512, 614,        768, 614, 512, 409, 307, 230, 230, 230};static const int AdaptCoeff1[] = {        256, 512, 0, 192, 240, 460, 392};static const int AdaptCoeff2[] = {        0, -256, 0, 64, 0, -208, -232};/* These are for CD-ROM XA ADPCM */static const int xa_adpcm_table[5][2] = {   {   0,   0 },   {  60,   0 },   { 115, -52 },   {  98, -55 },   { 122, -60 }};static const int ea_adpcm_table[] = {    0, 240, 460, 392, 0, 0, -208, -220, 0, 1,    3, 4, 7, 8, 10, 11, 0, -1, -3, -4};static const int ct_adpcm_table[8] = {    0x00E6, 0x00E6, 0x00E6, 0x00E6,    0x0133, 0x0199, 0x0200, 0x0266};// padded to zero where table size is less then 16static const int swf_index_tables[4][16] = {    /*2*/ { -1, 2 },    /*3*/ { -1, -1, 2, 4 },    /*4*/ { -1, -1, -1, -1, 2, 4, 6, 8 },    /*5*/ { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 }};static const int yamaha_indexscale[] = {    230, 230, 230, 230, 307, 409, 512, 614,    230, 230, 230, 230, 307, 409, 512, 614};static const int yamaha_difflookup[] = {    1, 3, 5, 7, 9, 11, 13, 15,    -1, -3, -5, -7, -9, -11, -13, -15};/* end of tables */typedef struct ADPCMChannelStatus {    int predictor;    short int step_index;    int step;    /* for encoding */    int prev_sample;    /* MS version */    short sample1;    short sample2;    int coeff1;    int coeff2;    int idelta;} ADPCMChannelStatus;typedef struct ADPCMContext {    int channel; /* for stereo MOVs, decode left, then decode right, then tell it's decoded */    ADPCMChannelStatus status[6];} ADPCMContext;/* XXX: implement encoding */#ifdef CONFIG_ENCODERSstatic int adpcm_encode_init(AVCodecContext *avctx){    if (avctx->channels > 2)        return -1; /* only stereo or mono =) */    switch(avctx->codec->id) {    case CODEC_ID_ADPCM_IMA_WAV:        avctx->frame_size = (BLKSIZE - 4 * avctx->channels) * 8 / (4 * avctx->channels) + 1; /* each 16 bits sample gives one nibble */                                                             /* and we have 4 bytes per channel overhead */        avctx->block_align = BLKSIZE;        /* seems frame_size isn't taken into account... have to buffer the samples :-( */        break;    case CODEC_ID_ADPCM_MS:        avctx->frame_size = (BLKSIZE - 7 * avctx->channels) * 2 / avctx->channels + 2; /* each 16 bits sample gives one nibble */                                                             /* and we have 7 bytes per channel overhead */        avctx->block_align = BLKSIZE;        break;    case CODEC_ID_ADPCM_YAMAHA:        avctx->frame_size = BLKSIZE * avctx->channels;        avctx->block_align = BLKSIZE;        break;    case CODEC_ID_ADPCM_SWF:        if (avctx->sample_rate != 11025 &&            avctx->sample_rate != 22050 &&            avctx->sample_rate != 44100) {            av_log(avctx, AV_LOG_ERROR, "Sample rate must be 11025, 22050 or 44100\n");            return -1;        }        avctx->frame_size = 512 * (avctx->sample_rate / 11025);        break;    default:        return -1;        break;    }    avctx->coded_frame= avcodec_alloc_frame();    avctx->coded_frame->key_frame= 1;    return 0;}static int adpcm_encode_close(AVCodecContext *avctx){    av_freep(&avctx->coded_frame);    return 0;}static inline unsigned char adpcm_ima_compress_sample(ADPCMChannelStatus *c, short sample){    int delta = sample - c->prev_sample;    int nibble = FFMIN(7, abs(delta)*4/step_table[c->step_index]) + (delta<0)*8;    c->prev_sample += ((step_table[c->step_index] * yamaha_difflookup[nibble]) / 8);    c->prev_sample = av_clip_int16(c->prev_sample);    c->step_index = av_clip(c->step_index + index_table[nibble], 0, 88);    return nibble;}static inline unsigned char adpcm_ms_compress_sample(ADPCMChannelStatus *c, short sample){    int predictor, nibble, bias;    predictor = (((c->sample1) * (c->coeff1)) + ((c->sample2) * (c->coeff2))) / 256;    nibble= sample - predictor;    if(nibble>=0) bias= c->idelta/2;    else          bias=-c->idelta/2;    nibble= (nibble + bias) / c->idelta;    nibble= av_clip(nibble, -8, 7)&0x0F;    predictor += (signed)((nibble & 0x08)?(nibble - 0x10):(nibble)) * c->idelta;    c->sample2 = c->sample1;    c->sample1 = av_clip_int16(predictor);    c->idelta = (AdaptationTable[(int)nibble] * c->idelta) >> 8;    if (c->idelta < 16) c->idelta = 16;    return nibble;}static inline unsigned char adpcm_yamaha_compress_sample(ADPCMChannelStatus *c, short sample){    int nibble, delta;    if(!c->step) {        c->predictor = 0;        c->step = 127;    }    delta = sample - c->predictor;    nibble = FFMIN(7, abs(delta)*4/c->step) + (delta<0)*8;    c->predictor += ((c->step * yamaha_difflookup[nibble]) / 8);    c->predictor = av_clip_int16(c->predictor);    c->step = (c->step * yamaha_indexscale[nibble]) >> 8;    c->step = av_clip(c->step, 127, 24567);    return nibble;}typedef struct TrellisPath {    int nibble;    int prev;} TrellisPath;typedef struct TrellisNode {    uint32_t ssd;    int path;    int sample1;    int sample2;    int step;} TrellisNode;static void adpcm_compress_trellis(AVCodecContext *avctx, const short *samples,                                   uint8_t *dst, ADPCMChannelStatus *c, int n){#define FREEZE_INTERVAL 128    //FIXME 6% faster if frontier is a compile-time constant    const int frontier = 1 << avctx->trellis;    const int stride = avctx->channels;    const int version = avctx->codec->id;    const int max_paths = frontier*FREEZE_INTERVAL;    TrellisPath paths[max_paths], *p;    TrellisNode node_buf[2][frontier];    TrellisNode *nodep_buf[2][frontier];    TrellisNode **nodes = nodep_buf[0]; // nodes[] is always sorted by .ssd    TrellisNode **nodes_next = nodep_buf[1];    int pathn = 0, froze = -1, i, j, k;    assert(!(max_paths&(max_paths-1)));    memset(nodep_buf, 0, sizeof(nodep_buf));    nodes[0] = &node_buf[1][0];    nodes[0]->ssd = 0;    nodes[0]->path = 0;    nodes[0]->step = c->step_index;    nodes[0]->sample1 = c->sample1;    nodes[0]->sample2 = c->sample2;    if((version == CODEC_ID_ADPCM_IMA_WAV) || (version == CODEC_ID_ADPCM_SWF))        nodes[0]->sample1 = c->prev_sample;    if(version == CODEC_ID_ADPCM_MS)        nodes[0]->step = c->idelta;    if(version == CODEC_ID_ADPCM_YAMAHA) {        if(c->step == 0) {            nodes[0]->step = 127;            nodes[0]->sample1 = 0;        } else {            nodes[0]->step = c->step;            nodes[0]->sample1 = c->predictor;        }    }    for(i=0; i<n; i++) {        TrellisNode *t = node_buf[i&1];        TrellisNode **u;        int sample = samples[i*stride];        memset(nodes_next, 0, frontier*sizeof(TrellisNode*));        for(j=0; j<frontier && nodes[j]; j++) {            // higher j have higher ssd already, so they're unlikely to use a suboptimal next sample too            const int range = (j < frontier/2) ? 1 : 0;            const int step = nodes[j]->step;            int nidx;            if(version == CODEC_ID_ADPCM_MS) {                const int predictor = ((nodes[j]->sample1 * c->coeff1) + (nodes[j]->sample2 * c->coeff2)) / 256;                const int div = (sample - predictor) / step;                const int nmin = av_clip(div-range, -8, 6);                const int nmax = av_clip(div+range, -7, 7);                for(nidx=nmin; nidx<=nmax; nidx++) {                    const int nibble = nidx & 0xf;                    int dec_sample = predictor + nidx * step;#define STORE_NODE(NAME, STEP_INDEX)\                    int d;\                    uint32_t ssd;\                    dec_sample = av_clip_int16(dec_sample);\                    d = sample - dec_sample;\                    ssd = nodes[j]->ssd + d*d;\                    if(nodes_next[frontier-1] && ssd >= nodes_next[frontier-1]->ssd)\                        continue;\                    /* Collapse any two states with the same previous sample value. \                     * One could also distinguish states by step and by 2nd to last                     * sample, but the effects of that are negligible. */\                    for(k=0; k<frontier && nodes_next[k]; k++) {\                        if(dec_sample == nodes_next[k]->sample1) {\                            assert(ssd >= nodes_next[k]->ssd);\                            goto next_##NAME;\                        }\                    }\                    for(k=0; k<frontier; k++) {\                        if(!nodes_next[k] || ssd < nodes_next[k]->ssd) {\                            TrellisNode *u = nodes_next[frontier-1];\                            if(!u) {\                                assert(pathn < max_paths);\                                u = t++;\                                u->path = pathn++;\                            }\                            u->ssd = ssd;\                            u->step = STEP_INDEX;\                            u->sample2 = nodes[j]->sample1;\                            u->sample1 = dec_sample;\                            paths[u->path].nibble = nibble;\                            paths[u->path].prev = nodes[j]->path;\                            memmove(&nodes_next[k+1], &nodes_next[k], (frontier-k-1)*sizeof(TrellisNode*));\                            nodes_next[k] = u;\                            break;\                        }\                    }\                    next_##NAME:;                    STORE_NODE(ms, FFMAX(16, (AdaptationTable[nibble] * step) >> 8));                }            } else if((version == CODEC_ID_ADPCM_IMA_WAV)|| (version == CODEC_ID_ADPCM_SWF)) {#define LOOP_NODES(NAME, STEP_TABLE, STEP_INDEX)\                const int predictor = nodes[j]->sample1;\                const int div = (sample - predictor) * 4 / STEP_TABLE;\                int nmin = av_clip(div-range, -7, 6);\                int nmax = av_clip(div+range, -6, 7);\                if(nmin<=0) nmin--; /* distinguish -0 from +0 */\                if(nmax<0) nmax--;\                for(nidx=nmin; nidx<=nmax; nidx++) {\                    const int nibble = nidx<0 ? 7-nidx : nidx;\                    int dec_sample = predictor + (STEP_TABLE * yamaha_difflookup[nibble]) / 8;\                    STORE_NODE(NAME, STEP_INDEX);\                }                LOOP_NODES(ima, step_table[step], av_clip(step + index_table[nibble], 0, 88));            } else { //CODEC_ID_ADPCM_YAMAHA                LOOP_NODES(yamaha, step, av_clip((step * yamaha_indexscale[nibble]) >> 8, 127, 24567));#undef LOOP_NODES#undef STORE_NODE            }        }        u = nodes;        nodes = nodes_next;        nodes_next = u;        // prevent overflow        if(nodes[0]->ssd > (1<<28)) {            for(j=1; j<frontier && nodes[j]; j++)                nodes[j]->ssd -= nodes[0]->ssd;            nodes[0]->ssd = 0;        }        // merge old paths to save memory

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
3d动漫精品啪啪1区2区免费| 亚洲一级在线观看| 国产日产欧产精品推荐色| 欧美一级生活片| 日韩欧美一级二级三级久久久| 欧美日韩在线播放三区四区| 欧美午夜理伦三级在线观看| 欧美视频一二三区| 久久综合久久99| 欧美色综合天天久久综合精品| 粉嫩欧美一区二区三区高清影视| 国产传媒欧美日韩成人| 国产在线麻豆精品观看| 国产精品1区2区| 国产激情视频一区二区三区欧美| 国产aⅴ综合色| 白白色亚洲国产精品| 99久久免费视频.com| 色香蕉久久蜜桃| 91精品福利在线| 欧美日韩激情在线| 欧美不卡123| 久久精品一区二区三区不卡| 亚洲国产精品黑人久久久| 亚洲人精品一区| 亚洲国产精品欧美一二99| 日本免费新一区视频| 久久电影网站中文字幕| 国产精品18久久久久久久久久久久| 国产a视频精品免费观看| 91网站在线观看视频| 欧美三级电影在线观看| 日韩欧美视频一区| 国产午夜精品一区二区三区嫩草| 国产精品高潮久久久久无| 亚洲成在线观看| 久久成人久久鬼色| av不卡在线观看| 欧美日韩的一区二区| 精品成a人在线观看| 国产精品不卡在线| 亚洲aⅴ怡春院| 精品一区二区三区不卡| 成人深夜视频在线观看| 欧美午夜精品一区二区三区| 欧美tk—视频vk| 最近日韩中文字幕| 久久国产福利国产秒拍| 91蜜桃在线观看| 欧美精品一区二区三区蜜桃| 综合亚洲深深色噜噜狠狠网站| 日韩国产欧美三级| 丁香网亚洲国际| 欧美丝袜丝交足nylons| 久久久影视传媒| 亚洲一区二区三区爽爽爽爽爽| 国产一区二区三区综合| 欧美日韩一区小说| 国产日韩欧美麻豆| 日韩中文字幕不卡| 99视频有精品| 久久这里只有精品6| 一区二区三区四区不卡在线 | 久久久美女艺术照精彩视频福利播放| 一区免费观看视频| 久久99精品久久久| 欧美日韩国产小视频在线观看| 久久久精品蜜桃| 日本不卡一二三| 色一情一伦一子一伦一区| 国产日韩视频一区二区三区| 肉色丝袜一区二区| 91亚洲午夜精品久久久久久| 久久久午夜电影| 日韩影视精彩在线| 在线一区二区三区四区五区| 欧美激情一区二区三区| 六月丁香婷婷色狠狠久久| 欧美午夜在线一二页| 中文字幕一区二区三区蜜月| 精品系列免费在线观看| 欧美日韩色一区| 亚洲女人小视频在线观看| 国产91精品一区二区麻豆网站 | 国产亚洲精品中文字幕| 青青草国产成人99久久| 欧美日韩美女一区二区| 亚洲天天做日日做天天谢日日欢| 国产精品亚洲专一区二区三区| 91精品蜜臀在线一区尤物| 亚洲一区在线观看视频| 色吧成人激情小说| 亚洲人成网站色在线观看| 成人a区在线观看| 久久久精品国产免大香伊| 国产一区美女在线| 久久综合九色综合97婷婷女人| 麻豆91在线看| 日韩免费看的电影| 男女性色大片免费观看一区二区| 欧美日韩亚洲综合一区| 亚洲制服欧美中文字幕中文字幕| 91久久一区二区| 亚洲欧美日韩一区二区三区在线观看 | 天堂va蜜桃一区二区三区漫画版| 91福利视频在线| 亚洲综合男人的天堂| 在线免费观看一区| 一个色综合av| 欧美三级电影精品| 日本麻豆一区二区三区视频| 91超碰这里只有精品国产| 亚洲va在线va天堂| 欧美一区二区三区喷汁尤物| 免费高清不卡av| 精品日韩欧美一区二区| 国产毛片精品一区| 中文字幕精品一区| 91免费视频观看| 亚洲图片欧美色图| 日韩限制级电影在线观看| 美腿丝袜一区二区三区| 久久久久久久久久久久电影 | 欧美日韩国产123区| 日韩中文字幕亚洲一区二区va在线| 欧美放荡的少妇| 国产美女在线精品| 国产精品日韩成人| 欧美性色aⅴ视频一区日韩精品| 日韩精品视频网站| 精品欧美黑人一区二区三区| 国产99久久久国产精品免费看| 自拍偷在线精品自拍偷无码专区 | 1024成人网色www| 欧美在线观看视频一区二区三区| 日韩中文字幕麻豆| 国产日韩欧美精品综合| 色视频成人在线观看免| 日本大胆欧美人术艺术动态| 国产日韩视频一区二区三区| 91福利国产成人精品照片| 日韩综合在线视频| 国产日韩视频一区二区三区| 欧美中文字幕一区二区三区 | 91麻豆国产在线观看| 天堂成人免费av电影一区| 欧美成人高清电影在线| 中文字幕亚洲不卡| 欧美一区二区三区在| 视频一区视频二区中文| 国产午夜精品一区二区三区四区| 色婷婷久久久综合中文字幕| 日韩高清一级片| 久久久国产一区二区三区四区小说| 91视频一区二区三区| 免费不卡在线观看| 国产精品成人免费精品自在线观看| 欧美精品一卡二卡| 不卡一区二区中文字幕| 日本不卡一区二区| 亚洲欧洲99久久| 欧美r级在线观看| 欧美影院精品一区| 国产999精品久久久久久| 五月激情综合网| 18涩涩午夜精品.www| 欧美精品乱人伦久久久久久| 成人午夜伦理影院| 日本欧洲一区二区| 亚洲免费观看高清完整版在线观看| 国产精品久久毛片| 日韩一区二区免费视频| 在线一区二区三区做爰视频网站| 国产精品亚洲成人| 日韩成人午夜精品| 一区二区三区中文免费| 国产欧美一区二区精品久导航| 欧美一区二区三区视频在线| 91免费国产在线| 国产成人精品亚洲午夜麻豆| 免费的国产精品| 亚洲午夜私人影院| 亚洲特级片在线| 国产欧美日韩在线看| 精品国产免费一区二区三区香蕉| 日本精品裸体写真集在线观看 | 色屁屁一区二区| 成人免费毛片app| 国产在线观看一区二区| 日韩精品电影在线| 亚洲777理论| 亚洲国产一二三| 一区二区三区日本| 中文字幕一区二区日韩精品绯色 | 精彩视频一区二区| 麻豆成人免费电影| 美女高潮久久久| 日本怡春院一区二区| 日韩中文字幕不卡| 性做久久久久久免费观看|