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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? adpcm.c

?? 從FFMPEG轉換而來的H264解碼程序,VC下編譯..
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
 * 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)
 *
 * 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

#define CLAMP_TO_SHORT(value) \
if (value > 32767) \
    value = 32767; \
else if (value < -32768) \
    value = -32768; \

/* 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 16
static 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[2];
    short sample_buffer[32]; /* hold left samples while waiting for right samples */
} ADPCMContext;

static int adpcm_decode_init(AVCodecContext * avctx)
{
    ADPCMContext *c = avctx->priv_data;

    if(avctx->channels > 2U){
        return -1;
    }

    c->channel = 0;
    c->status[0].predictor = c->status[1].predictor = 0;
    c->status[0].step_index = c->status[1].step_index = 0;
    c->status[0].step = c->status[1].step = 0;

    switch(avctx->codec->id) {
    case CODEC_ID_ADPCM_CT:
        c->status[0].step = c->status[1].step = 511;
        break;
    case CODEC_ID_ADPCM_IMA_WS:
        if (avctx->extradata && avctx->extradata_size == 2 * 4) {
            c->status[0].predictor = AV_RL32(avctx->extradata);
            c->status[1].predictor = AV_RL32(avctx->extradata + 4);
        }
        break;
    default:
        break;
    }
    return 0;
}

static inline short adpcm_ima_expand_nibble(ADPCMChannelStatus *c, char nibble, int shift)
{
    int step_index;
    int predictor;
    int sign, delta, diff, step;

    step = step_table[c->step_index];
    step_index = c->step_index + index_table[(unsigned)nibble];
    if (step_index < 0) step_index = 0;
    else if (step_index > 88) step_index = 88;

    sign = nibble & 8;
    delta = nibble & 7;
    /* perform direct multiplication instead of series of jumps proposed by
     * the reference ADPCM implementation since modern CPUs can do the mults
     * quickly enough */
    diff = ((2 * delta + 1) * step) >> shift;
    predictor = c->predictor;
    if (sign) predictor -= diff;
    else predictor += diff;

    CLAMP_TO_SHORT(predictor);
    c->predictor = predictor;
    c->step_index = step_index;

    return (short)predictor;
}

static inline short adpcm_ms_expand_nibble(ADPCMChannelStatus *c, char nibble)
{
    int predictor;

    predictor = (((c->sample1) * (c->coeff1)) + ((c->sample2) * (c->coeff2))) / 256;
    predictor += (signed)((nibble & 0x08)?(nibble - 0x10):(nibble)) * c->idelta;
    CLAMP_TO_SHORT(predictor);

    c->sample2 = c->sample1;
    c->sample1 = predictor;
    c->idelta = (AdaptationTable[(int)nibble] * c->idelta) >> 8;
    if (c->idelta < 16) c->idelta = 16;

    return (short)predictor;
}

static inline short adpcm_ct_expand_nibble(ADPCMChannelStatus *c, char nibble)
{
    int predictor;
    int sign, delta, diff;
    int new_step;

    sign = nibble & 8;
    delta = nibble & 7;
    /* perform direct multiplication instead of series of jumps proposed by
     * the reference ADPCM implementation since modern CPUs can do the mults
     * quickly enough */
    diff = ((2 * delta + 1) * c->step) >> 3;
    predictor = c->predictor;
    /* predictor update is not so trivial: predictor is multiplied on 254/256 before updating */
    if(sign)
        predictor = ((predictor * 254) >> 8) - diff;
    else
            predictor = ((predictor * 254) >> 8) + diff;
    /* calculate new step and clamp it to range 511..32767 */
    new_step = (ct_adpcm_table[nibble & 7] * c->step) >> 8;
    c->step = new_step;
    if(c->step < 511)
        c->step = 511;
    if(c->step > 32767)
        c->step = 32767;

    CLAMP_TO_SHORT(predictor);
    c->predictor = predictor;
    return (short)predictor;
}

static inline short adpcm_sbpro_expand_nibble(ADPCMChannelStatus *c, char nibble, int size, int shift)
{
    int sign, delta, diff;

    sign = nibble & (1<<(size-1));
    delta = nibble & ((1<<(size-1))-1);
    diff = delta << (7 + c->step + shift);

    if (sign)
        c->predictor -= diff;
    else
        c->predictor += diff;

    /* clamp result */
    if (c->predictor > 16256)
        c->predictor = 16256;
    else if (c->predictor < -16384)
        c->predictor = -16384;

    /* calculate new step */
    if (delta >= (2*size - 3) && c->step < 3)
        c->step++;
    else if (delta == 0 && c->step > 0)
        c->step--;

    return (short) c->predictor;
}

static inline short adpcm_yamaha_expand_nibble(ADPCMChannelStatus *c, unsigned char nibble)
{
    if(!c->step) {
        c->predictor = 0;
        c->step = 127;
    }

    c->predictor += (c->step * yamaha_difflookup[nibble]) / 8;
    CLAMP_TO_SHORT(c->predictor);
    c->step = (c->step * yamaha_indexscale[nibble]) >> 8;
    c->step = av_clip(c->step, 127, 24567);
    return c->predictor;
}

static void xa_decode(short *out, const unsigned char *in,
    ADPCMChannelStatus *left, ADPCMChannelStatus *right, int inc)
{
    int i, j;
    int shift,filter,f0,f1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区男人的天堂| 国内久久婷婷综合| 色欧美日韩亚洲| 一区二区久久久久| 欧美日韩视频专区在线播放| 午夜电影一区二区| 日韩欧美国产wwwww| 精品在线播放午夜| 国产午夜精品久久| 91亚洲国产成人精品一区二区三| 一区二区三区四区国产精品| 欧美亚洲动漫精品| 美脚の诱脚舐め脚责91| 久久蜜臀中文字幕| 色婷婷综合久色| 日本中文一区二区三区| 久久久久久**毛片大全| 色琪琪一区二区三区亚洲区| 免费高清成人在线| 国产精品毛片大码女人| 欧美日韩一级二级三级| 激情五月婷婷综合网| 亚洲欧美日韩电影| 日韩欧美中文一区| 不卡欧美aaaaa| 性欧美疯狂xxxxbbbb| 久久精品免费在线观看| 欧美性感一类影片在线播放| 国产一区二区三区观看| 亚洲另类春色校园小说| 日韩视频免费观看高清完整版 | 一区免费观看视频| 欧美性xxxxxxxx| 国产成a人无v码亚洲福利| 亚洲制服欧美中文字幕中文字幕| 精品久久久久久最新网址| 99在线热播精品免费| 日韩国产精品久久| 亚洲人午夜精品天堂一二香蕉| 91精品国产丝袜白色高跟鞋| k8久久久一区二区三区| 麻豆精品一区二区三区| 亚洲一级片在线观看| 久久九九久久九九| 欧美一区二区三区电影| 一本在线高清不卡dvd| 国产一区二区三区电影在线观看| 午夜久久久久久久久| 国产精品久久久久一区二区三区 | 91啦中文在线观看| 蜜桃视频在线观看一区| 亚洲第一搞黄网站| 日韩毛片一二三区| 久久久久久久久蜜桃| 欧美精品自拍偷拍动漫精品| 99re66热这里只有精品3直播| 久久精品国产免费| 日韩av午夜在线观看| 一区二区三区中文字幕| 亚洲国产精品精华液ab| 精品国产一区二区三区久久久蜜月 | 亚洲sss视频在线视频| 亚洲日本丝袜连裤袜办公室| 国产亚洲欧美在线| 精品久久久久久久久久久院品网| 91麻豆精品国产综合久久久久久| 91国偷自产一区二区开放时间 | 性做久久久久久免费观看欧美| 亚洲色图清纯唯美| 中文字幕一区不卡| 国产精品每日更新| 国产精品狼人久久影院观看方式| 国产亚洲欧美色| 久久亚洲二区三区| 精品国产乱码久久| 2021中文字幕一区亚洲| 欧美videossexotv100| 日韩限制级电影在线观看| 4438成人网| 欧美一级在线观看| 日韩欧美亚洲另类制服综合在线| 91精品国产综合久久久久久漫画| 欧美精品精品一区| 在线电影国产精品| 日韩亚洲欧美中文三级| 欧美大黄免费观看| 久久蜜桃一区二区| 国产精品成人网| 一区二区成人在线观看| 亚洲资源中文字幕| 男女视频一区二区| 国产美女精品人人做人人爽| 国产成人免费视频网站高清观看视频| 国产成人综合网站| 91视视频在线观看入口直接观看www| 一本色道久久综合亚洲91| 欧美图区在线视频| 日韩精品一区在线| 国产欧美精品在线观看| 综合久久久久久| 日韩在线一区二区三区| 狠狠色综合播放一区二区| 成人精品一区二区三区中文字幕| 91免费观看视频在线| 欧美日韩视频在线第一区 | 韩国女主播成人在线观看| 国产+成+人+亚洲欧洲自线| 99热在这里有精品免费| 91黄色免费版| 精品国产电影一区二区| 亚洲人成亚洲人成在线观看图片 | 欧美tickling网站挠脚心| 久久亚区不卡日本| 一区二区三区中文在线观看| 免费久久精品视频| 成人av网站在线| 欧美一区二区成人6969| 中文字幕一区二区三区四区| 日韩精品午夜视频| 懂色av中文一区二区三区 | 久久99精品久久只有精品| jlzzjlzz亚洲女人18| 欧美日韩一卡二卡| 国产日产亚洲精品系列| 亚洲成a人片综合在线| 国产成人av电影在线观看| 欧美日本在线播放| 国产精品福利一区二区| 欧美a级理论片| 在线观看日韩电影| 国产精品欧美一区喷水| 美女诱惑一区二区| 在线观看欧美日本| 国产人妖乱国产精品人妖| 丝袜a∨在线一区二区三区不卡| 国产成人av一区二区| 91精品欧美福利在线观看| 亚洲同性gay激情无套| 国产乱人伦偷精品视频不卡| 制服丝袜日韩国产| 亚洲美女在线一区| 懂色中文一区二区在线播放| 欧美成人免费网站| 香蕉久久一区二区不卡无毒影院 | 色综合久久中文综合久久牛| 久久久久国产免费免费| 日韩高清不卡一区二区三区| 欧美性一二三区| 国产精品国产三级国产有无不卡 | 欧美一级日韩免费不卡| 一区二区三区在线播放| 国产精品影音先锋| 日韩精品一区二区三区中文不卡 | 成人av网在线| 久久久久久久久蜜桃| 蜜臀99久久精品久久久久久软件| 欧美三电影在线| 洋洋成人永久网站入口| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品久久久久一区| 成人午夜看片网址| 欧美激情在线一区二区三区| 国内精品写真在线观看| 日韩欧美综合在线| 另类小说欧美激情| 日韩一级免费观看| 欧美a级理论片| 精品国产91久久久久久久妲己 | 91看片淫黄大片一级在线观看| 欧美国产欧美综合| 成人av免费在线观看| **网站欧美大片在线观看| 不卡的av在线| 亚洲精品综合在线| 在线免费观看日本一区| 天堂在线亚洲视频| 日韩欧美国产一区二区三区 | 懂色中文一区二区在线播放| 中文字幕国产精品一区二区| 97久久超碰国产精品电影| 亚洲人成影院在线观看| 欧美亚州韩日在线看免费版国语版 | 欧美精品日韩精品| 蜜臀av一区二区三区| 精品国产免费视频| 成人av电影观看| 亚洲综合偷拍欧美一区色| 欧美日韩成人在线一区| 蜜桃视频在线一区| 中文字幕不卡的av| 日本韩国欧美在线| 欧美96一区二区免费视频| 久久免费精品国产久精品久久久久| 成人激情开心网| 亚洲精选一二三| 日韩欧美视频一区| 成人aa视频在线观看| 一区二区三区在线视频观看| 日韩精品中午字幕| 波多野结衣中文一区|