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

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

?? cpi_player_codec_mpeg.c

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * MPEG 音頻解碼 (using MAD)
 */
#include "stdafx.h"
#include "globals.h"
#include "CPI_Player_CoDec.h"
#include "libmad/mad.h"
// #include "mmsystem.h"
#include "CPI_Stream.h"
#include "CPI_ID3.h"
#pragma comment(lib, "winmm.lib")

# define SAMPLE_DEPTH	16
# define scale(x, y)	dither((x), (y))

struct xing {
    long flags;
    unsigned long frames;
    unsigned long bytes;
    unsigned char toc[100];
    long scale;
};

enum {
    XING_FRAMES = 0x00000001L,
    XING_BYTES  = 0x00000002L,
    XING_TOC    = 0x00000004L,
    XING_SCALE  = 0x00000008L
};

# define XING_MAGIC	(('X' << 24) | ('i' << 16) | ('n' << 8) | 'g')

struct dither {
    mad_fixed_t error[3];
    mad_fixed_t random;
};

typedef struct {
    CPs_InStream* m_pInStream;

    unsigned long size;				

    CPs_CoDecOptions options;	

    struct xing xing;				

    struct mad_stream stream;	
    struct mad_frame frame;		
    struct mad_synth synth;			

    unsigned int samplecount;		

    mad_timer_t timer;			
    mad_timer_t length;				
    unsigned long rate;				
    unsigned long frames;		

    CPs_FileInfo info;			

    unsigned char buffer[40000];	
    unsigned int buflen;		
} CPs_CoDec_MPEG;


static
int parse_xing(struct xing *xing, struct mad_bitptr ptr, unsigned int bitlen)
{
    if (bitlen < 64 || mad_bit_read(&ptr, 32) != XING_MAGIC)
        goto fail;

    xing->flags = mad_bit_read(&ptr, 32);
    bitlen -= 64;

    if (xing->flags & XING_FRAMES) {
        if (bitlen < 32)
            goto fail;

        xing->frames = mad_bit_read(&ptr, 32);
        bitlen -= 32;
    }

    if (xing->flags & XING_BYTES) {
        if (bitlen < 32)
            goto fail;

        xing->bytes = mad_bit_read(&ptr, 32);
        bitlen -= 32;
    }

    if (xing->flags & XING_TOC) {
        int i;

        if (bitlen < 800)
            goto fail;

        for (i = 0; i < 100; ++i)
            xing->toc[i] = (unsigned char) mad_bit_read(&ptr, 8);

        bitlen -= 800;
    }

    if (xing->flags & XING_SCALE) {
        if (bitlen < 32)
            goto fail;

        xing->scale = mad_bit_read(&ptr, 32);
        bitlen -= 32;
    }

    return 0;

fail:
    xing->flags = 0;
    return -1;
}


static
int scan_header(CPs_InStream* pInStream, struct mad_header *header, struct xing *xing)
{
    struct mad_stream stream;
    struct mad_frame frame;
    unsigned char buffer[8192];
    unsigned int buflen = 0;
    int count = 0, result = 0;

    mad_stream_init(&stream);
    mad_frame_init(&frame);

    if (xing)
        xing->flags = 0;

    while (1) {
        if (buflen < sizeof(buffer)) {
            DWORD bytes;

            if(pInStream->Read(pInStream, buffer + buflen, sizeof(buffer) - buflen, &bytes) == FALSE
                    || bytes == 0)
            {
                result = -1;
                break;
            }

            buflen += bytes;
        }

        mad_stream_buffer(&stream, buffer, buflen);

        while (1) {
            if (mad_frame_decode(&frame, &stream) == -1) {
                if (!MAD_RECOVERABLE(stream.error))
                    break;

                continue;
            }

            if (count++ ||
                    (xing && parse_xing(xing, stream.anc_ptr,
                                        stream.anc_bitlen) == 0))
                break;
        }

        if (count || stream.error != MAD_ERROR_BUFLEN)
            break;

        memmove(buffer, stream.next_frame,
                buflen = &buffer[buflen] - stream.next_frame);
    }

    if (count) {
        if (header)
            *header = frame.header;
    }
    else
        result = -1;

    mad_frame_finish(&frame);
    mad_stream_finish(&stream);

    return result;
}



static __inline
unsigned long prng(unsigned long state)
{
    return (state * 0x0019660dL + 0x3c6ef35fL) & 0xffffffffL;
}


static __inline
signed int dither(mad_fixed_t sample, struct dither *dither)
{
    unsigned int scalebits;
    mad_fixed_t output, mask, random;

    enum {
        MIN = -MAD_F_ONE,
        MAX =  MAD_F_ONE - 1
    };

    sample += dither->error[0] - dither->error[1] + dither->error[2];

    dither->error[2] = dither->error[1];
    dither->error[1] = dither->error[0] / 2;

    output = sample + (1L << (MAD_F_FRACBITS + 1 - SAMPLE_DEPTH - 1));

    scalebits = MAD_F_FRACBITS + 1 - SAMPLE_DEPTH;
    mask = (1L << scalebits) - 1;

    random  = prng(dither->random);
    output += (random & mask) - (dither->random & mask);

    dither->random = random;

    if (output > MAX) {
        output = MAX;

        if (sample > MAX)
            sample = MAX;
    }
    else if (output < MIN) {
        output = MIN;

        if (sample < MIN)
            sample = MIN;
    }

    output &= ~mask;

    dither->error[0] = sample - output;

    return output >> scalebits;
}


static
void pack_pcm(unsigned char **pcm, unsigned int nsamples,
              mad_fixed_t const *ch1, mad_fixed_t const *ch2)
{
    register signed int s0, s1;
    static struct dither d0, d1;

    if (ch2) {  /* stereo */
        while (nsamples--) {
            s0 = scale(*ch1++, &d0);
            s1 = scale(*ch2++, &d1);
# if SAMPLE_DEPTH == 16
            (*pcm)[0 + 0] = s0 >> 0;
            (*pcm)[0 + 1] = s0 >> 8;
            (*pcm)[2 + 0] = s1 >> 0;
            (*pcm)[2 + 1] = s1 >> 8;

            *pcm += 2 * 2;
# elif SAMPLE_DEPTH == 8
            (*pcm)[0] = s0 ^ 0x80;
            (*pcm)[1] = s1 ^ 0x80;

            *pcm += 2;
# else
#  error "bad SAMPLE_DEPTH"
# endif
        }
    }
    else {  /* mono */
        while (nsamples--) {
            s0 = scale(*ch1++, &d0);

# if SAMPLE_DEPTH == 16
            (*pcm)[0] = s0 >> 0;
            (*pcm)[1] = s0 >> 8;

            *pcm += 2;
# elif SAMPLE_DEPTH == 8
            *(*pcm)++ = s0 ^ 0x80;
# endif
        }
    }
}


static void cleanup(CPs_CoDec_MPEG *context)
{
    if(context->m_pInStream)
    {
        context->m_pInStream->Uninitialise(context->m_pInStream);
        context->m_pInStream = NULL;

        mad_synth_finish(&context->synth);
        mad_frame_finish(&context->frame);
        mad_stream_finish(&context->stream);
    }
}

void CPP_OMMP3_Uninitialise(CPs_CoDecModule* pModule);
BOOL CPP_OMMP3_OpenFile(CPs_CoDecModule* pModule, const char* pcFilename, DWORD dwCookie, HWND hWndOwner);
void CPP_OMMP3_CloseFile(CPs_CoDecModule* pModule);
void CPP_OMMP3_Seek(CPs_CoDecModule* pModule, const int iNumerator, const int iDenominator);
void CPP_OMMP3_GetFileInfo(CPs_CoDecModule* pModule, CPs_FileInfo* pInfo);
//
BOOL CPP_OMMP3_GetPCMBlock(CPs_CoDecModule* pModule, void* pBlock, DWORD* pdwBlockSize);
int CPP_OMMP3_GetCurrentPos_secs(CPs_CoDecModule* pModule);
//
void CP_InitialiseCodec_MPEG(CPs_CoDecModule* pCoDec)
{
    CPs_CoDec_MPEG *pContext;

    pCoDec->Uninitialise = CPP_OMMP3_Uninitialise;
    pCoDec->OpenFile = CPP_OMMP3_OpenFile;
    pCoDec->CloseFile = CPP_OMMP3_CloseFile;
    pCoDec->Seek = CPP_OMMP3_Seek;
    pCoDec->GetFileInfo = CPP_OMMP3_GetFileInfo;

    pCoDec->GetPCMBlock = CPP_OMMP3_GetPCMBlock;
    pCoDec->GetCurrentPos_secs = CPP_OMMP3_GetCurrentPos_secs;

    pCoDec->m_pModuleCookie = malloc(sizeof(CPs_CoDec_MPEG));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区久久久| 欧美视频一二三区| 日韩av中文字幕一区二区三区| 欧美高清在线视频| 久久久久成人黄色影片| 精品久久久久久久一区二区蜜臀| 欧美人xxxx| 欧美一区二区啪啪| 欧美zozozo| 精品久久国产97色综合| 精品国产制服丝袜高跟| 久久影院电视剧免费观看| 久久综合狠狠综合| 欧美国产禁国产网站cc| 中文字幕在线观看不卡| 亚洲精品视频在线观看网站| 亚洲最新在线观看| 日韩精品国产精品| 国产自产v一区二区三区c| 国产呦萝稀缺另类资源| 床上的激情91.| 99久久伊人精品| 欧美日韩亚洲综合一区| 日韩视频免费观看高清完整版 | 欧美精品九九99久久| 欧美日韩aaa| 精品乱码亚洲一区二区不卡| 国产无遮挡一区二区三区毛片日本| 国产日韩欧美亚洲| 夜夜揉揉日日人人青青一国产精品| 日日摸夜夜添夜夜添国产精品 | gogo大胆日本视频一区| 在线观看免费亚洲| 日韩视频免费观看高清完整版在线观看 | 亚洲色欲色欲www| 天天综合色天天综合色h| 精品一区二区日韩| 91丨九色丨尤物| 欧美一级二级在线观看| 中文字幕不卡三区| 日韩二区三区四区| av男人天堂一区| 欧美一级久久久| 亚洲人成影院在线观看| 免费观看30秒视频久久| 91女神在线视频| 精品国产污网站| 一区二区三区在线免费| 国产在线不卡一区| 欧美日韩专区在线| 国产精品久99| 久久er99热精品一区二区| 色哟哟精品一区| 国产欧美精品区一区二区三区| 午夜精品福利视频网站| 成人av在线资源网站| 日韩欧美视频一区| 亚洲va韩国va欧美va精品| 国产白丝精品91爽爽久久| 欧美剧情电影在线观看完整版免费励志电影 | 欧美日高清视频| 亚洲国产成人自拍| 视频一区免费在线观看| 欧美一区二区三区视频免费 | 久久精品免视看| 成人福利视频在线看| 尤物视频一区二区| 日韩一级大片在线观看| 国产美女在线观看一区| 亚洲美女视频一区| 欧美电影免费观看高清完整版在线 | 一区二区在线观看视频| 欧美一区二区视频在线观看2020 | 五月婷婷激情综合| 久久综合久久久久88| 91在线视频免费观看| 日韩国产在线观看一区| 国产校园另类小说区| 在线免费观看成人短视频| 麻豆精品久久久| 亚洲欧洲av在线| 日韩三级免费观看| 91性感美女视频| 免播放器亚洲一区| 一区二区三区在线视频观看| 精品免费99久久| 欧美亚洲图片小说| av在线免费不卡| 国产一区二区视频在线| 午夜激情一区二区| 亚洲色图清纯唯美| 久久九九99视频| 欧美一区二区网站| 欧美三级中文字幕| 91在线云播放| 成人黄色小视频| 韩国毛片一区二区三区| 男女激情视频一区| 午夜精品福利一区二区蜜股av| 中文字幕av免费专区久久| 日韩欧美成人一区二区| 欧美日韩在线播放三区四区| 成人免费毛片app| 国产高清在线观看免费不卡| 麻豆精品在线观看| 日韩精品乱码免费| 日韩高清不卡一区| 日韩福利视频网| 日韩综合在线视频| 午夜久久久久久久久久一区二区| 国产精品国产三级国产普通话三级 | 国产日韩欧美制服另类| 欧美草草影院在线视频| 欧美一区二区黄色| 91精品国产麻豆国产自产在线| 精品视频1区2区3区| 欧美少妇bbb| 欧美日韩成人在线一区| 欧美另类高清zo欧美| 欧美日韩午夜影院| 91 com成人网| 制服丝袜亚洲精品中文字幕| 欧美二区三区91| 91麻豆精品国产91久久久 | 久久精品亚洲乱码伦伦中文| 久久久国产精华| 国产性色一区二区| 国产精品久久久久久久久动漫| 一色屋精品亚洲香蕉网站| 中文字幕一区二区日韩精品绯色| 国产精品伦一区| 亚洲精品第1页| 亚洲成国产人片在线观看| 人人精品人人爱| 国产一区福利在线| caoporn国产精品| 91黄色免费版| 日韩欧美视频一区| 日本一区二区在线不卡| 亚洲精品免费播放| 天天色天天爱天天射综合| 久久99久久99精品免视看婷婷 | 色综合久久中文字幕综合网| 欧美精品在线观看一区二区| 欧美α欧美αv大片| 国产精品女同一区二区三区| 一区2区3区在线看| 婷婷国产v国产偷v亚洲高清| 国产自产高清不卡| 色老汉av一区二区三区| 欧美一区二区精品久久911| 久久久久国产精品厨房| 亚洲精品久久嫩草网站秘色| 日本免费在线视频不卡一不卡二 | 成人av网站在线| 欧美精品高清视频| 国产精品视频九色porn| 午夜久久久影院| av激情综合网| 日韩情涩欧美日韩视频| 亚洲人成网站色在线观看| 理论片日本一区| 一本色道久久综合精品竹菊| 日韩免费看网站| 亚洲综合一区二区三区| 国产真实乱对白精彩久久| 91久久线看在观草草青青| 337p日本欧洲亚洲大胆色噜噜| 一区二区三区在线看| 国产成人综合精品三级| 欧美日本在线播放| 亚洲欧洲精品一区二区三区| 蜜桃一区二区三区四区| 色婷婷激情综合| 国产精品女同一区二区三区| 免费在线视频一区| 色激情天天射综合网| 国产日韩高清在线| 久久精品国产精品亚洲综合| 91成人免费在线| 国产精品视频第一区| 国产精品系列在线播放| 欧美一区二区三区成人| 亚洲一区免费观看| 91丨porny丨最新| 国产日韩欧美精品在线| 精品亚洲国产成人av制服丝袜| 欧美日韩mp4| 亚洲国产wwwccc36天堂| 色综合天天天天做夜夜夜夜做| 中文字幕制服丝袜一区二区三区| 国产一区二区在线电影| 欧美变态凌虐bdsm| 激情国产一区二区| 日韩亚洲欧美一区| 美女视频一区二区| 日韩欧美视频在线| 美女视频网站黄色亚洲| 91精品国产综合久久婷婷香蕉| 亚洲bt欧美bt精品777|