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

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

?? unmac.cpp

?? Lossless Audio 縮解壓 window
?? CPP
字號(hào):
/*****************************************************************************************
UnMAC.cpp
Copyright (C) 2000-2001 by Matthew T. Ashland   All Rights Reserved.

CUnMAC - the main hub for decompression (manages all of the other components)

Notes:
    -none
*****************************************************************************************/

/*****************************************************************************************
Includes
*****************************************************************************************/
#include "All.h"
#ifdef BACKWARDS_COMPATIBILITY

#include "../APEInfo.h"
#include "UnMAC.h"
#include "GlobalFunctions.h"
#include "../UnBitArrayBase.h"
#include "Anti-Predictor.h"
#include "../Prepare.h"
#include "../UnBitArray.h"
#include "../NewPredictor.h"
#include "APEDecompressCore.h"

/*****************************************************************************************
CUnMAC class construction
*****************************************************************************************/
CUnMAC::CUnMAC() 
{
    // initialize member variables
    m_bInitialized                = FALSE;
    m_LastDecodedFrameIndex        = -1;
    m_pAPEDecompress            = NULL;

    m_pAPEDecompressCore        = NULL;
    m_pPrepare                    = NULL;

    m_nBlocksProcessed            = 0;
    m_nCRC                        = 0;

}

/*****************************************************************************************
CUnMAC class destruction
*****************************************************************************************/
CUnMAC::~CUnMAC() 
{
    // uninitialize the decoder in case it isn't already
    Uninitialize();
}

/*****************************************************************************************
Initialize
*****************************************************************************************/
int CUnMAC::Initialize(IAPEDecompress *pAPEDecompress) 
{
    // uninitialize if it is currently initialized
    if (m_bInitialized)
        Uninitialize();

    if (pAPEDecompress == NULL)
    {
        Uninitialize();
        return ERROR_INITIALIZING_UNMAC;
    }

    // set the member pointer to the IAPEDecompress class
    m_pAPEDecompress = pAPEDecompress;

    // set the last decode frame to -1 so it forces a seek on start
    m_LastDecodedFrameIndex = -1;

    m_pAPEDecompressCore = new CAPEDecompressCore(GET_IO(pAPEDecompress), pAPEDecompress);
    m_pPrepare = new CPrepare;

    // set the initialized flag to TRUE
    m_bInitialized = TRUE;
    
    m_pAPEDecompress->GetInfo(APE_INFO_WAVEFORMATEX, (int) &m_wfeInput);

    // return a successful value
    return ERROR_SUCCESS;
}

/*****************************************************************************************
Uninitialize
*****************************************************************************************/
int CUnMAC::Uninitialize() 
{
    if (m_bInitialized) 
    {
        SAFE_DELETE(m_pAPEDecompressCore)
        SAFE_DELETE(m_pPrepare)
        
        // clear the APE info pointer
        m_pAPEDecompress = NULL;

        // set the last decoded frame again
        m_LastDecodedFrameIndex = -1;

        // set the initialized flag to FALSE
        m_bInitialized = FALSE;
    }

    return ERROR_SUCCESS;
}

/*****************************************************************************************
Decompress frame
*****************************************************************************************/
int CUnMAC::DecompressFrame(unsigned char *pOutputData, int32 FrameIndex, int CPULoadBalancingFactor) 
{
    return DecompressFrameOld(pOutputData, FrameIndex, CPULoadBalancingFactor);
}

/*****************************************************************************************
Seek to the proper frame (if necessary) and do any alignment of the bit array
*****************************************************************************************/
int CUnMAC::SeekToFrame(int FrameIndex)
{
    if (GET_FRAMES_START_ON_BYTES_BOUNDARIES(m_pAPEDecompress)) 
    {
        if ((m_LastDecodedFrameIndex == -1) || ((FrameIndex - 1) != m_LastDecodedFrameIndex)) 
        {
            int SeekRemainder = (m_pAPEDecompress->GetInfo(APE_INFO_SEEK_BYTE, FrameIndex) - m_pAPEDecompress->GetInfo(APE_INFO_SEEK_BYTE, 0)) % 4;
            m_pAPEDecompressCore->GetUnBitArrray()->FillAndResetBitArray(m_pAPEDecompress->GetInfo(APE_INFO_SEEK_BYTE, FrameIndex) - SeekRemainder, SeekRemainder * 8);
        }
        else 
        {
            m_pAPEDecompressCore->GetUnBitArrray()->AdvanceToByteBoundary();
        }
    }
    else 
    {
        if ((m_LastDecodedFrameIndex == -1) || ((FrameIndex - 1) != m_LastDecodedFrameIndex)) 
        {
            m_pAPEDecompressCore->GetUnBitArrray()->FillAndResetBitArray(m_pAPEDecompress->GetInfo(APE_INFO_SEEK_BYTE, FrameIndex), m_pAPEDecompress->GetInfo(APE_INFO_SEEK_BIT, FrameIndex));
        }
    }

    return ERROR_SUCCESS;
}

/*****************************************************************************************
Old code for frame decompression
*****************************************************************************************/
int CUnMAC::DecompressFrameOld(unsigned char *pOutputData, int32 FrameIndex, int CPULoadBalancingFactor) 
{
    // error check the parameters (too high of a frame index, etc.)
    if (FrameIndex >= m_pAPEDecompress->GetInfo(APE_INFO_TOTAL_FRAMES)) { return ERROR_SUCCESS; }

    // get the number of samples in the frame
    int nBlocks = 0;
    nBlocks = ((FrameIndex + 1) >= m_pAPEDecompress->GetInfo(APE_INFO_TOTAL_FRAMES)) ? m_pAPEDecompress->GetInfo(APE_INFO_FINAL_FRAME_BLOCKS) : m_pAPEDecompress->GetInfo(APE_INFO_BLOCKS_PER_FRAME);
    if (nBlocks == 0)
        return -1; // nothing to do (file must be zero length) (have to return error)

    // take care of seeking and frame alignment
    if (SeekToFrame(FrameIndex) != 0) { return -1; }

    // get the checksum
    unsigned int nSpecialCodes = 0;
    uint32 nStoredCRC = 0;
    
    if (GET_USES_CRC(m_pAPEDecompress) == FALSE)
    {
        nStoredCRC = m_pAPEDecompressCore->GetUnBitArrray()->DecodeValue(DECODE_VALUE_METHOD_UNSIGNED_RICE, 30);
        if (nStoredCRC == 0)
        {
            nSpecialCodes = SPECIAL_FRAME_LEFT_SILENCE | SPECIAL_FRAME_RIGHT_SILENCE;
        }            
    }
    else
    {
        nStoredCRC = m_pAPEDecompressCore->GetUnBitArrray()->DecodeValue(DECODE_VALUE_METHOD_UNSIGNED_INT);
        
        // get any 'special' codes if the file uses them (for silence, FALSE stereo, etc.)
        nSpecialCodes = 0;
        if (GET_USES_SPECIAL_FRAMES(m_pAPEDecompress))
        {
            if (nStoredCRC & 0x80000000) 
            {
                nSpecialCodes = m_pAPEDecompressCore->GetUnBitArrray()->DecodeValue(DECODE_VALUE_METHOD_UNSIGNED_INT);
            }
            nStoredCRC &= 0x7FFFFFFF;
        }
    }

    // the CRC that will be figured during decompression
    uint32 CRC = 0xFFFFFFFF;

    // decompress and convert from (x,y) -> (l,r)
    // sort of int and ugly.... sorry
    if (m_pAPEDecompress->GetInfo(APE_INFO_CHANNELS) == 2) 
    {
        m_pAPEDecompressCore->GenerateDecodedArrays(nBlocks, nSpecialCodes, FrameIndex, CPULoadBalancingFactor);

        WAVEFORMATEX WaveFormatEx; m_pAPEDecompress->GetInfo(APE_INFO_WAVEFORMATEX, (int) &WaveFormatEx);
        m_pPrepare->UnprepareOld(m_pAPEDecompressCore->GetDataX(), m_pAPEDecompressCore->GetDataY(), nBlocks, &WaveFormatEx, 
            pOutputData, (unsigned int *) &CRC, (int *) &nSpecialCodes, m_pAPEDecompress->GetInfo(APE_INFO_FILE_VERSION));
    }
    else if (m_pAPEDecompress->GetInfo(APE_INFO_CHANNELS) == 1) 
    {
        m_pAPEDecompressCore->GenerateDecodedArrays(nBlocks, nSpecialCodes, FrameIndex, CPULoadBalancingFactor);
        
        WAVEFORMATEX WaveFormatEx; m_pAPEDecompress->GetInfo(APE_INFO_WAVEFORMATEX, (int) &WaveFormatEx);
        m_pPrepare->UnprepareOld(m_pAPEDecompressCore->GetDataX(), NULL, nBlocks, &WaveFormatEx, 
            pOutputData, (unsigned int *) &CRC, (int *) &nSpecialCodes, m_pAPEDecompress->GetInfo(APE_INFO_FILE_VERSION));
    }

    if (GET_USES_SPECIAL_FRAMES(m_pAPEDecompress))
    {
        CRC >>= 1;
    }

    // check the CRC
    if (GET_USES_CRC(m_pAPEDecompress) == FALSE)
    {
        uint32 nChecksum = CalculateOldChecksum(m_pAPEDecompressCore->GetDataX(), m_pAPEDecompressCore->GetDataY(), m_pAPEDecompress->GetInfo(APE_INFO_CHANNELS), nBlocks);
        if (nChecksum != nStoredCRC)
            return -1;
    }
    else
    {
        if (CRC != nStoredCRC)
            return -1;
    }

    m_LastDecodedFrameIndex = FrameIndex;
    return nBlocks;    
}


/*****************************************************************************************
Figures the old checksum using the X,Y data
*****************************************************************************************/
uint32 CUnMAC::CalculateOldChecksum(int *pDataX, int *pDataY, int nChannels, int nBlocks)
{
    uint32 nChecksum = 0;

    if (nChannels == 2)
    {
        for (int z = 0; z < nBlocks; z++)
        {
            int R = pDataX[z] - (pDataY[z] / 2);
            int L = R + pDataY[z];
            nChecksum += (labs(R) + labs(L));
        }
    }
    else if (nChannels == 1)
    {
        for (int z = 0; z < nBlocks; z++)
            nChecksum += labs(pDataX[z]);
    }
    
    return nChecksum;
}

#endif // #ifdef BACKWARDS_COMPATIBILITY

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本最新不卡在线| 日本欧美在线观看| 日韩欧美国产一二三区| 成人白浆超碰人人人人| 天天色综合成人网| 亚洲女性喷水在线观看一区| 久久久久亚洲蜜桃| 欧美一区二区三区在线电影| 色综合网色综合| 成人激情小说乱人伦| 精品一区二区综合| 午夜视频在线观看一区二区三区| 亚洲日本va午夜在线影院| 久久精品人人做人人爽人人| 欧美一区二区日韩一区二区| 欧美猛男男办公室激情| 在线视频欧美区| thepron国产精品| 国产福利91精品一区| 久久精品久久久精品美女| 午夜精品福利在线| 亚洲一区影音先锋| 一区二区三区日韩精品| 国产精品进线69影院| 中文字幕欧美激情| 26uuu久久综合| 日韩亚洲欧美成人一区| 欧美精品一二三| 欧美日本不卡视频| 欧美日韩国产bt| 91精品在线麻豆| 欧美日韩久久久一区| 欧洲一区二区三区在线| 色婷婷av一区二区三区gif| 成人精品电影在线观看| av亚洲精华国产精华精华| 懂色av一区二区三区免费观看| 国产麻豆9l精品三级站| 麻豆91在线观看| 精品一二三四区| 国产一区在线不卡| 高清在线不卡av| 成人高清在线视频| 91一区二区三区在线观看| 色婷婷香蕉在线一区二区| 91久久精品一区二区| 在线观看视频91| 91.成人天堂一区| 日韩视频永久免费| 欧美精品一区二区精品网| 国产亚洲午夜高清国产拍精品| 日本一区二区久久| 亚洲欧美视频在线观看视频| 亚洲综合一区二区精品导航| 亚洲国产精品久久久久秋霞影院| 偷拍自拍另类欧美| 韩国一区二区三区| www.欧美色图| 欧美日韩国产另类不卡| 久久综合中文字幕| 国产精品嫩草99a| 亚洲一区二区四区蜜桃| 久久爱www久久做| 成人精品免费网站| 欧美日韩国产免费一区二区| 久久综合色播五月| 亚洲视频1区2区| 日韩1区2区3区| 国产九色sp调教91| 日本二三区不卡| 日韩欧美综合一区| 中文字幕在线不卡| 日本中文字幕一区| av亚洲产国偷v产偷v自拍| 欧美日韩视频专区在线播放| 精品国产一区二区在线观看| 亚洲色图在线视频| 精品在线一区二区三区| 色婷婷综合久久久久中文一区二区| 91精品国产手机| 国产精品久久久久婷婷二区次| 亚洲图片一区二区| 岛国精品一区二区| 欧美精品九九99久久| 国产精品色噜噜| 日本不卡中文字幕| 一本一本久久a久久精品综合麻豆| 欧美一区中文字幕| 亚洲美女淫视频| 韩国成人在线视频| 欧美色图片你懂的| 欧美国产精品一区二区| 秋霞电影网一区二区| 91网站最新地址| 精品国偷自产国产一区| 亚洲综合丁香婷婷六月香| 国产91精品免费| 欧美日韩精品免费观看视频| 国产色产综合色产在线视频| 日韩国产在线一| 91蜜桃网址入口| 国产视频一区在线播放| 麻豆国产一区二区| 欧美亚州韩日在线看免费版国语版| 久久久国产精品午夜一区ai换脸| 日韩国产精品大片| 91九色最新地址| 国产精品久久久久久久久图文区 | 国产欧美日韩卡一| 天堂一区二区在线免费观看| 色噜噜狠狠一区二区三区果冻| 久久久久久一二三区| 美女视频黄 久久| 91麻豆精品国产自产在线观看一区 | 精品亚洲aⅴ乱码一区二区三区| 欧美伊人精品成人久久综合97| 中文字幕中文字幕一区二区| 国产一区二区毛片| 欧美大片免费久久精品三p| 天堂av在线一区| 欧美日韩在线一区二区| 一区二区三区免费| 99re视频这里只有精品| 亚洲天堂精品视频| hitomi一区二区三区精品| 欧美经典三级视频一区二区三区| 国产裸体歌舞团一区二区| 久久综合色鬼综合色| 国产乱理伦片在线观看夜一区| www久久久久| 国产精品综合一区二区三区| 久久精品视频一区| 成人午夜免费视频| 中文字幕在线一区二区三区| 成熟亚洲日本毛茸茸凸凹| 国产精品免费免费| 成人精品国产免费网站| **网站欧美大片在线观看| av中文字幕一区| 一区二区三区四区五区视频在线观看 | 久久久久久久久久久久久久久99 | 色综合久久综合中文综合网| 亚洲欧美aⅴ...| 欧美日韩视频在线第一区| 亚洲1区2区3区4区| 91精品欧美久久久久久动漫| 日本欧美大码aⅴ在线播放| 欧美不卡一区二区三区| 国产精一区二区三区| 亚洲欧洲一区二区三区| 91久久国产综合久久| 首页国产丝袜综合| 精品国产乱码久久久久久老虎| 国产一二三精品| 亚洲国产高清在线| 欧美专区日韩专区| 免费在线观看视频一区| 久久蜜桃av一区二区天堂| 99精品久久只有精品| 亚洲一区二区三区国产| 欧美电视剧免费观看| 国产成人高清在线| 一区二区在线免费| 欧美一区二区视频观看视频| 国产精品18久久久久久vr| 亚洲欧美日韩精品久久久久| 欧美日韩国产小视频在线观看| 久久成人久久鬼色| 国产精品美女久久久久久久久 | 亚洲卡通动漫在线| 91精品国产综合久久久久久| 国产精品小仙女| 亚洲国产精品久久人人爱蜜臀| 日韩久久久精品| 91玉足脚交白嫩脚丫在线播放| 五月婷婷色综合| 亚洲国产成人午夜在线一区| 欧美视频三区在线播放| 国产精品一线二线三线| 亚洲一区二区免费视频| 日本一区二区三区在线不卡| 欧美日韩国产综合视频在线观看 | 欧美美女一区二区三区| 国产毛片精品视频| 亚洲高清不卡在线观看| 久久久久国产精品麻豆 | 国产精品久久久久一区二区三区共| 欧美男生操女生| a4yy欧美一区二区三区| 麻豆精品国产传媒mv男同| 亚洲综合色区另类av| 国产亚洲精品免费| 欧美一区二区在线视频| 91丝袜美女网| 国产精品综合久久| 日韩综合小视频| 亚洲精品免费在线| 国产精品丝袜一区| 精品国产免费人成电影在线观看四季 | 国产一区视频网站|