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

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

?? resample.c

?? 杜比AC-3編碼解碼器(參考程序)
?? C
字號:
/*
 * Sample rate convertion for both audio and video
 * Copyright (c) 2000 Gerard Lantau.
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <math.h>
#include "avcodec.h"

#define NDEBUG
#include <assert.h>

#define FRAC_BITS 16
#define FRAC (1 << FRAC_BITS)

static void init_mono_resample(ReSampleChannelContext *s, float ratio)
{
    ratio = 1.0 / ratio;
    s->iratio = (int)floor(ratio);
    if (s->iratio == 0)
        s->iratio = 1;
    s->incr = (int)((ratio / s->iratio) * FRAC);
    s->frac = 0;
    s->last_sample = 0;
    s->icount = s->iratio;
    s->isum = 0;
    s->inv = (FRAC / s->iratio);
}

/* fractional audio resampling */
static int fractional_resample(ReSampleChannelContext *s, short *output, short *input, int nb_samples)
{
    unsigned int frac, incr;
    int l0, l1;
    short *q, *p, *pend;

    l0 = s->last_sample;
    incr = s->incr;
    frac = s->frac;

    p = input;
    pend = input + nb_samples;
    q = output;

    l1 = *p++;
    for(;;) {
        /* interpolate */
        *q++ = (l0 * (FRAC - frac) + l1 * frac) >> FRAC_BITS;
        frac = frac + s->incr;
        while (frac >= FRAC) {
            if (p >= pend)
                goto the_end;
            frac -= FRAC;
            l0 = l1;
            l1 = *p++;
        }
    }
 the_end:
    s->last_sample = l1;
    s->frac = frac;
    return q - output;
}

static int integer_downsample(ReSampleChannelContext *s, short *output, short *input, int nb_samples)
{
    short *q, *p, *pend;
    int c, sum;

    p = input;
    pend = input + nb_samples;
    q = output;

    c = s->icount;
    sum = s->isum;

    for(;;) {
        sum += *p++;
        if (--c == 0) {
            *q++ = (sum * s->inv) >> FRAC_BITS;
            c = s->iratio;
            sum = 0;
        }
        if (p >= pend)
            break;
    }
    s->isum = sum;
    s->icount = c;
    return q - output;
}

/* n1: number of samples */
static void stereo_to_mono(short *output, short *input, int n1)
{
    short *p, *q;
    int n = n1;

    p = input;
    q = output;
    while (n >= 4) {
        q[0] = (p[0] + p[1]) >> 1;
        q[1] = (p[2] + p[3]) >> 1;
        q[2] = (p[4] + p[5]) >> 1;
        q[3] = (p[6] + p[7]) >> 1;
        q += 4;
        p += 8;
        n -= 4;
    }
    while (n > 0) {
        q[0] = (p[0] + p[1]) >> 1;
        q++;
        p += 2;
        n--;
    }
}

/* XXX: should use more abstract 'N' channels system */
static void stereo_split(short *output1, short *output2, short *input, int n)
{
    int i;

    for(i=0;i<n;i++) {
        *output1++ = *input++;
        *output2++ = *input++;
    }
}

static void stereo_mux(short *output, short *input1, short *input2, int n)
{
    int i;

    for(i=0;i<n;i++) {
        *output++ = *input1++;
        *output++ = *input2++;
    }
}

static int mono_resample(ReSampleChannelContext *s, short *output, short *input, int nb_samples)
{
    short buf1[nb_samples];
    short *buftmp;

    /* first downsample by an integer factor with averaging filter */
    if (s->iratio > 1) {
        buftmp = buf1;
        nb_samples = integer_downsample(s, buftmp, input, nb_samples);
    } else {
        buftmp = input;
    }

    /* then do a fractional resampling with linear interpolation */
    if (s->incr != FRAC) {
        nb_samples = fractional_resample(s, output, buftmp, nb_samples);
    } else {
        memcpy(output, buftmp, nb_samples * sizeof(short));
    }
    return nb_samples;
}

/* ratio = output_rate / input_rate */
int audio_resample_init(ReSampleContext *s, 
                        int output_channels, int input_channels, 
                        int output_rate, int input_rate)
{
    int i;
    
    s->ratio = (float)output_rate / (float)input_rate;
    
    if (output_channels > 2 || input_channels > 2)
        return -1;
    s->input_channels = input_channels;
    s->output_channels = output_channels;

    for(i=0;i<output_channels;i++) {
        init_mono_resample(&s->channel_ctx[i], s->ratio);
    }
    return 0;
}

/* resample audio. 'nb_samples' is the number of input samples */
/* XXX: optimize it ! */
/* XXX: do it with polyphase filters, since the quality here is
   HORRIBLE. Return the number of samples available in output */
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples)
{
    int i, nb_samples1;
    short buf[5][nb_samples];
    short *buftmp1, *buftmp2[2], *buftmp3[2];

    if (s->input_channels == s->output_channels && s->ratio == 1.0) {
        /* nothing to do */
        memcpy(output, input, nb_samples * s->input_channels * sizeof(short));
        return nb_samples;
    }

    if (s->input_channels == 2 &&
        s->output_channels == 1) {
        buftmp1 = buf[0];
        stereo_to_mono(buftmp1, input, nb_samples);
    } else if (s->input_channels == 1 &&
               s->output_channels == 2) {
        /* XXX: do it */
        abort();
    } else {
        buftmp1 = input;
    }

    if (s->output_channels == 2) {
        buftmp2[0] = buf[1];
        buftmp2[1] = buf[2];
        buftmp3[0] = buf[3];
        buftmp3[1] = buf[4];
        stereo_split(buftmp2[0], buftmp2[1], buftmp1, nb_samples);
    } else {
        buftmp2[0] = buftmp1;
        buftmp3[0] = output;
    }

    /* resample each channel */
    nb_samples1 = 0; /* avoid warning */
    for(i=0;i<s->output_channels;i++) {
        nb_samples1 = mono_resample(&s->channel_ctx[i], buftmp3[i], buftmp2[i], nb_samples);
    }

    if (s->output_channels == 2) {
        stereo_mux(output, buftmp3[0], buftmp3[1], nb_samples1);
    }

    return nb_samples1;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图另类专区| xf在线a精品一区二区视频网站| 黄色小说综合网站| 韩国在线一区二区| 久久99精品国产麻豆不卡| 国产高清精品在线| 国产一区二区三区久久悠悠色av| 香港成人在线视频| 麻豆视频一区二区| 欧美在线观看视频一区二区| 中文字幕一区不卡| 色婷婷国产精品| 日韩高清电影一区| 精品美女一区二区| av在线一区二区| 亚洲第一主播视频| 精品电影一区二区三区| 国产成人av资源| 一区二区三区在线视频免费| 91精品国产综合久久香蕉的特点| 毛片av中文字幕一区二区| 日韩精品一区二区三区视频| 丁香激情综合五月| 亚洲午夜久久久久中文字幕久| 欧美一区二区三级| 成人美女视频在线观看18| 亚洲国产毛片aaaaa无费看 | 欧美大片在线观看| 成人av影院在线| 丝袜美腿亚洲一区| 国产精品久久看| 91精品国产色综合久久久蜜香臀| 国产麻豆成人传媒免费观看| 亚洲人成7777| 精品国产自在久精品国产| 91在线无精精品入口| 奇米精品一区二区三区四区| 国产视频一区不卡| 国产色爱av资源综合区| 欧美中文字幕一区| 国产成人综合自拍| 日本亚洲最大的色成网站www| 亚洲国产精品传媒在线观看| 色综合久久久久综合体桃花网| 青娱乐精品视频| 一区二区三区在线影院| 国产精品日韩精品欧美在线| 6080国产精品一区二区| 97精品电影院| 国产精品一区2区| 日韩成人伦理电影在线观看| 亚洲三级理论片| 中文字幕+乱码+中文字幕一区| 69p69国产精品| 欧美性视频一区二区三区| 国产99精品在线观看| 韩国精品久久久| 麻豆精品一区二区三区| 亚洲电影在线免费观看| 亚洲欧洲成人精品av97| 久久精品水蜜桃av综合天堂| 在线成人免费视频| 欧美日韩国产影片| 欧美性大战久久| 色狠狠色狠狠综合| 91麻豆精品一区二区三区| 国产91清纯白嫩初高中在线观看 | 亚洲国产美国国产综合一区二区| 国产精品久久久久一区二区三区 | 蜜桃久久精品一区二区| 午夜不卡av在线| 亚洲高清免费在线| 亚洲午夜久久久久| 婷婷中文字幕综合| 图片区小说区区亚洲影院| 亚洲成人在线网站| 亚洲成av人综合在线观看| 亚洲一区二区三区自拍| 亚洲第一成人在线| 三级成人在线视频| 美女免费视频一区二区| 久久精品国产免费看久久精品| 裸体在线国模精品偷拍| 免费在线看成人av| 国产一本一道久久香蕉| 国产传媒久久文化传媒| wwwwxxxxx欧美| 国产欧美精品在线观看| 亚洲欧美中日韩| 亚洲免费在线观看视频| 亚洲综合色区另类av| 日韩在线一二三区| 久久99蜜桃精品| 国产mv日韩mv欧美| 91热门视频在线观看| 欧美性一二三区| 精品噜噜噜噜久久久久久久久试看| 日韩欧美国产一区在线观看| 精品国产一区二区在线观看| 久久久久久久久久久电影| 国产精品福利一区二区| 亚洲一区二区三区四区不卡| 久久久亚洲精华液精华液精华液| 在线观看欧美黄色| 最新中文字幕一区二区三区| 18涩涩午夜精品.www| 国产精品久久久久久久久晋中| 国产女人18水真多18精品一级做| 久久久久久一二三区| 久久久国际精品| 免费日本视频一区| 蜜臀va亚洲va欧美va天堂 | 日韩高清中文字幕一区| 99久久久国产精品| 97久久超碰精品国产| 欧美区视频在线观看| 久久久久久日产精品| 亚洲人成网站影音先锋播放| 日本在线播放一区二区三区| 国产·精品毛片| 欧美区视频在线观看| 久久精品人人做人人爽人人| 一级日本不卡的影视| 极品少妇xxxx精品少妇| 色噜噜久久综合| 久久只精品国产| 五月天亚洲婷婷| 成人高清视频免费观看| 91精品国产乱码久久蜜臀| 日韩毛片在线免费观看| 国产美女久久久久| 欧美日本一区二区三区四区| 国产精品美女久久久久久2018| 日韩极品在线观看| 一本一道综合狠狠老| 久久亚洲综合色| 日本免费在线视频不卡一不卡二| 亚洲大片在线观看| 91日韩精品一区| 国产欧美综合在线| 激情国产一区二区| 欧美一级在线视频| 午夜精品福利视频网站| 99vv1com这只有精品| 国产喂奶挤奶一区二区三区| 日产欧产美韩系列久久99| 色8久久精品久久久久久蜜| 国产偷国产偷亚洲高清人白洁 | 亚洲欧美综合网| 国产成人在线网站| 久久久精品黄色| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩国产a| 日欧美一区二区| 欧美日韩一二区| 亚洲国产精品嫩草影院| 色偷偷久久人人79超碰人人澡| 亚洲国产精品ⅴa在线观看| 久久精品国产在热久久| 911精品国产一区二区在线| 亚洲成人精品一区二区| 精品视频在线免费观看| 日韩一区二区三区免费观看| 免费不卡在线观看| 丝袜美腿一区二区三区| 国产精品你懂的| 欧美日韩免费电影| 久久99精品视频| 亚洲永久免费av| 欧美经典一区二区| 欧美一区二区三区免费视频| 日韩一区在线播放| 日韩精品中文字幕在线一区| 久久国产精品露脸对白| 一区二区成人在线| 亚洲黄色在线视频| 亚洲综合色婷婷| 欧亚一区二区三区| 一区二区三区四区蜜桃| 欧美性高清videossexo| 亚洲成人一区二区| 日韩一区二区在线看| 精品无码三级在线观看视频| 精品国产一二三区| 风间由美性色一区二区三区| 中文字幕亚洲一区二区av在线| 99久久伊人久久99| 亚洲一区免费观看| 日韩精品中文字幕一区| 国产精品99久久久久久有的能看 | 国产资源精品在线观看| 久久蜜桃一区二区| 成人一二三区视频| 亚洲综合网站在线观看| 91精品国产综合久久精品麻豆| 久久不见久久见中文字幕免费| 国产亚洲一区字幕| 欧洲一区二区av| 国产精品一区二区在线观看网站| 亚洲欧美在线另类|