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

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

?? bit_rate.c

?? OSD顯示,單片機實現,ICCAVR! 代碼風格嚴謹,為高人所寫.我僅為了上傳換取資料
?? C
字號:
/*
*  Terry,2004/3/25 04:10PM
*/

#include "bit_rate.h"
#include "global.h"
#include "util.h"
#include "atapi_if.h"
#include "image.h"
#include "kinf.h"
#include "stc.h"

#ifndef DVDRELEASE
    //#define DBG_BIT_RATE    1
#endif

#ifdef DBG_BIT_RATE
    //#define DBG_PRE_PARSE_MP3
    //#define DBG_MP3_HEADER_STREAM
    //#define DBG_AV_BITRATE
#endif

#ifndef DBG_BIT_RATE
    #undef printf
    #undef print_block
    #define printf(f, a...) do {} while (0)
    #define print_block(x,y) do {} while (0)
#endif

// **************************************************************************************** //
#ifdef DISPLAY_DATA_BIT_RATE

UINT16 bit_rate_val = 0;
UINT32 sample_addr  = 0;

// **************************************************************************************** //
void init_bit_rate(void)
{
    bit_rate_val    =   0;
    sample_addr     =   0;
}

// **************************************************************************************** //
//bit-rate range: 8K ~ 10Mbits
//bit_rate_val:   8~10K 
#define MAX_BIT_RATE  (10*1024*1024)
#define MAX_BYTE_RATE (MAX_BIT_RATE/8)
#define MAX_SECTOR_NS (MAX_BYTE_RATE/2048)
#define MAX_KB_NS     (MAX_BYTE_RATE/1024) //1280

#define MIN_BIT_RATE  (8*1024)
#define MIN_BYTE_RATE (MIN_BIT_RATE/8)
#define MIN_SECTOR_NS (MIN_BYTE_RATE/2048)
#define MIN_KB_NS     (MIN_BYTE_RATE/1024) //1

// **************************************************************************************** //
void sample_bit_rate_per_sec(void)
{
    int tmp;
    
    if( adv_search_time == 0 )
    {
        if( cd_type_loaded == CDDVD ) 
            tmp = play_abs_addr;
        else 
            tmp = msf2l( s_msf );
        
        if( tmp > sample_addr )
        {
            tmp = ( tmp - sample_addr ) * 2;
            if( ( tmp >= MIN_KB_NS ) && ( tmp <= MAX_KB_NS ) )
            {
                bit_rate_val = tmp * 8; // 8 ~ 10240
                printf( "<%d>\n", bit_rate_val );
            }
        }
        
        sample_addr = tmp;
    }
}

// **************************************************************************************** //
#else

void    init_bit_rate(void)             {}
void    sample_bit_rate_per_sec(void)   {}

#endif


#ifdef SUPPORT_PRECALCULATE_VIDEOBITRATE_FOR_FILE_MODE
// **************************************************************************************** //
UINT32 GetBPS()
{
    if( adv_search_time != 0 )
        return 0;
        
    UINT32 video_bitrate    = ki_get_video_bitrate();
    if( video_bitrate == 0 )
        return 0;
	    
    UINT32 audio_bitrate    = ( ( *(bpcm_ya_ptr+44) | ( *(bpcm_ya_ptr+43) << 8) ) ) << 10;

    UINT32 uiBitrate;
    if( pDSV->dAv_AST_Ns > 0 )
        uiBitrate = video_bitrate + audio_bitrate * pDSV->dAv_AST_Ns;
    else
        uiBitrate = video_bitrate + audio_bitrate;

    #ifdef DBG_AV_BITRATE	
    printf("\tt: %d, v: %d, a: %d\n", uiBitrate, video_bitrate, audio_bitrate );
    #endif
        
    return uiBitrate;
}

#else
// **************************************************************************************** //
extern void     StartBPS( UINT8 uiInterval )    { uiInterval = uiInterval; }
extern UINT32   GetBPS()                        { return 0; }

// **************************************************************************************** //
#endif


#ifdef REMAIN_TIME	
// **************************************************************************************** //
typedef enum 
{
    VBR_MP3_PARSE_FIRST_FRAME,
    VBR_MP3_PARSE_ALL_FRAME,
}   VBR_MP3_FRAME_TYPE;

typedef struct{
    int bitrate;
    char *nextHeaderPtr;
}   MP3INFORM;

// **************************************************************************************** //
static void GetBitRateInform( MP3INFORM* pHeaderInform,UINT32 length )
{
    if( !pHeaderInform || length == 0 )
        return;

    UINT8   layerTable[4] = {0,3,2,1};
    
    UINT16  freqTable[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 };
    
    UINT16  bitrateTable[2][3][16] = { 
       { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
         {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
         {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} },
    
       { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
         {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
         {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} }
    };
    
    char*   stream          = pHeaderInform->nextHeaderPtr;
    UINT32  Header          = 0xFFFFFFFF;
    UINT32  NextHeader      = 0xFFFFFFFF;
    UINT32  syncwordMask    = 0xFFF00000;
    UINT32  layerMask       = 0x00060000;
    UINT32  bitrateMask     = 0x0000F000;
    UINT32  sampleMask      = 0x00000C00;
    char*   NextSyncPtr     = NULL;
    int     syncshift       = 20;
    int     layershift      = 17;
    int     bitrateshift    = 12;
    int     sampleshift     = 10;
    int     hitSyncWord     = 0;
    int     layerNo         = 0;
    int     bitrate         = 0;
    int     freqs           = 0;
    int     bitrateIndex, ID,slotNo;
    UINT32  syncLag;
    
    Header=((unsigned int)(*stream))<<24;                   stream++;
    Header=Header|((((unsigned int)(*stream))<<24)>>8);     stream++;
    Header=Header|((((unsigned int)(*stream))<<24)>>16);    stream++;
    Header=Header|(((unsigned int)(*stream)<<24)>>24);      stream++;
    length=length-4;

    #ifdef DBG_MP3_HEADER_STREAM    
    printf("Header = %x \n", Header);
    #endif

    //find the sync word
    while((hitSyncWord==0)&&(length!=0))
    {
        if(((Header&syncwordMask)>>syncshift)==0xFFF) //check sync word
        {
        	layerNo=layerTable[((Header&layerMask)>>layershift)];
        	if(layerNo!=0)  //check layer No
        	{
        		bitrateIndex=((Header&bitrateMask)>>bitrateshift);
        		if(bitrateIndex!=0xf&&bitrateIndex!=0x0)//check bitrate index
        		{
        			ID=(Header & (1<<19)) ? 0x0 : 0x1;
        			bitrate=bitrateTable[ID][layerNo-1][bitrateIndex];
        			if(((Header&sampleMask)>>sampleshift)!=0x3) //check sampling frequency
        			{
        			freqs=freqTable[((Header&sampleMask)>>sampleshift)];
        				if(layerNo==1)
        				{//layer I
        				syncLag=12*bitrate*1000/freqs;
        				}
        				else
        				{//layer II,III
        					syncLag=144*bitrate*1000/freqs;
        				}
        				for(slotNo=0;slotNo<2;slotNo++)
        				{
        					NextSyncPtr=stream-4+syncLag+slotNo;
        					if(length>syncLag)
        					{
        						NextHeader=((unsigned int)(*NextSyncPtr))<<24;                      NextSyncPtr++;
        						NextHeader=NextHeader|((((unsigned int)(*NextSyncPtr))<<24)>>8);    NextSyncPtr++;
        						NextHeader=NextHeader|((((unsigned int)(*NextSyncPtr))<<24)>>16);   NextSyncPtr++;
        						NextHeader=NextHeader|(((unsigned int)(*NextSyncPtr)<<24)>>24);     NextSyncPtr++;
        					
        						if(((NextHeader&syncwordMask)>>syncshift)==0xFFF) //confirm sync word
        						{
        							if(((NextHeader&layerMask)>>layershift)!=0x0)
        							{
        								if(((NextHeader&bitrateMask)>>bitrateshift)!=0xf&&((NextHeader&bitrateMask)>>bitrateshift)!=0x0)
        								{
        									if(((NextHeader&sampleMask)>>sampleshift)!=0x3)
        									{
        										hitSyncWord=1;
        										
    #ifdef DBG_MP3_HEADER_STREAM
        										printf("len=%d,header=%x ",length,Header);	
    #endif
   											break;
        									}	
        						    		}	
                                				}
        						}		
        					}
        					else
        					{
    #ifdef DBG_MP3_HEADER_STREAM
            						printf("syncLag=%d,length=%d\n",syncLag,length);	
    #endif
            						bitrate=0;	
        					}
        				}		
        			}	
        		}
        	}		
        }
        
        if(hitSyncWord==0) //shift
        {
            Header=Header<<8;  
            Header=Header|(((unsigned int)(*stream)<<24)>>24);
            stream++;
            length--;
        }
    }
    
    #ifdef DBG_PRE_PARSE_MP3    
    printf("bitrate =%d,layer=%d,freq=%d \n",bitrate,layerNo,freqs);
    #endif    
    
    if( hitSyncWord == 1 )
    {
    	pHeaderInform->bitrate          = bitrate;
    	pHeaderInform->nextHeaderPtr    = stream;
    }	
    else
    {
    	pHeaderInform->bitrate          = 0;
    	pHeaderInform->nextHeaderPtr    = 0;
    }
}

// **************************************************************************************** //
static UINT32 ParseMP3BitRateFromAudioStream( VBR_MP3_FRAME_TYPE enType, char* pBuf, UINT32 uiLen )
{
    if( !pBuf || uiLen == 0 )
        return 0;

    MP3INFORM HeaderInform;
    HeaderInform.nextHeaderPtr = pBuf;
    
    if( enType == VBR_MP3_PARSE_FIRST_FRAME )
    {   
        GetBitRateInform( &HeaderInform, uiLen );
        return HeaderInform.bitrate;
    }
    else if( enType == VBR_MP3_PARSE_ALL_FRAME )
    {
        int     lastpBuf        = (int)pBuf + uiLen;
        int     sumBitRate      = 0;
        UINT32  uiBitRateCount  = 0;

        GetBitRateInform( &HeaderInform, uiLen );
        
        while( HeaderInform.bitrate != 0 )
        {
            sumBitRate += HeaderInform.bitrate;
            uiBitRateCount++;
            int lengthRemain = lastpBuf - (UINT32)(HeaderInform.nextHeaderPtr);
            GetBitRateInform( &HeaderInform, lengthRemain );
        }

    #ifdef DBG_PRE_PARSE_MP3
        printf( "average bitrate of LBA %d\n", ( uiBitRateCount > 0 ) ? ( sumBitRate / uiBitRateCount ) : 0 );
    #endif    
        return ( uiBitRateCount > 0 ) ? ( sumBitRate / uiBitRateCount ) : 0;    
    }
    
    return 0;
}

// **************************************************************************************** //
UINT32 PreParseMP3BitRate( VBR_MP3_LBA_TYPE enType, UINT32 uiParam, UINT32 uiLba, UINT32 uiLen )
{
    int     i           = 0;
    UINT32  uiLbaOffset = 0;
    UINT32  uiBitRate   = 0;
    UINT32  uiCount     = 0;
    UINT32  uiLbaCount  = 0;
    UINT32  uiStart     = uiLba;
        
    switch( enType )
    {
    case VBR_MP3_INTERVAL_N_LBA:
        uiLbaCount  = uiLen;
        uiLbaOffset = uiParam;
        break;
        
    case VBR_MP3_FIRST_N_LBA:
        uiLbaCount  = uiParam > uiLen ? uiLen : uiParam;
        uiLbaOffset = 1;
        break;

    case VBR_MP3_CENTER_N_LBA:  // 2004/08/10 yltseng
    {
        UINT32 uiTmp = ( uiLen + uiParam ) >> 1;
        uiLbaCount  = uiParam > uiTmp ? uiTmp : uiParam;
        uiLbaOffset = 1;
        uiStart     = uiLba + ( ( uiLen - uiParam ) > 1 );
    }
        break;
        
    case VBR_MP3_N_LBA:
        uiLbaCount  = uiLen;
        uiLbaOffset = uiLen / uiParam;
        break;
    }
  
    while( i < (int) uiLbaCount )
    {
        if( ran_read( pwb, l2msf( ( uiStart + i ) ), 2048 ) == ATAPI_OK )
        {
            UINT32 uiCurLbaBitRate = ParseMP3BitRateFromAudioStream( VBR_MP3_PARSE_FIRST_FRAME, pwb, 2048 );    // 2004/12/17 yltseng
            if( uiCurLbaBitRate )
            {
                uiBitRate += uiCurLbaBitRate;
                uiCount++;
            }
        }

        i += uiLbaOffset;
    }
    
    #ifdef DBG_PRE_PARSE_MP3
    printf( "average bitrate of MP3 file %d\n", ( uiCount > 0 ) ? ( uiBitRate / uiCount ) : 0 );
    #endif

    return ( uiCount > 0 ) ? ( uiBitRate / uiCount ) : 0;
}

// **************************************************************************************** //
#else

UINT32 PreParseMP3BitRate( VBR_MP3_LBA_TYPE enType, UINT32 uiParam, UINT32 uiLba, UINT32 uiLen ) 
{ enType = enType; uiParam = uiParam; uiLba = uiLba, uiLen = uiLen; return 0; }

#endif

// **************************************************************************************** //

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产伦一区二区三区观看方式 | 欧美精品在线观看播放| 午夜成人免费视频| 国产亚洲精品7777| 日韩欧美区一区二| 国产尤物一区二区在线| 欧美一卡二卡在线观看| 欧美三级日韩三级| 色哟哟一区二区三区| 国产成人av电影在线| 激情综合五月天| 激情图片小说一区| 国产精品自在欧美一区| 成人动漫一区二区三区| 99热在这里有精品免费| 99久久99久久精品国产片果冻| 91在线精品秘密一区二区| 国产亚洲婷婷免费| 激情丁香综合五月| 日韩欧美黄色影院| 美腿丝袜亚洲一区| 国内精品久久久久影院一蜜桃| 欧美电影一区二区| 亚洲精品乱码久久久久久黑人| heyzo一本久久综合| 日韩精品一区二区在线| 污片在线观看一区二区| 91极品美女在线| 欧美一区二区精品在线| 午夜一区二区三区视频| 日本sm残虐另类| 国产精品综合久久| 精品国产电影一区二区| 国模冰冰炮一区二区| 精品剧情v国产在线观看在线| 国产精品国产馆在线真实露脸| 亚洲免费观看高清完整| 日韩精品成人一区二区在线| 国产综合色视频| 国产网站一区二区| 成人av免费在线播放| 日韩美女久久久| 久久精品99国产精品日本| 91麻豆高清视频| 精品噜噜噜噜久久久久久久久试看| 蜜臀av性久久久久蜜臀av麻豆| 9191精品国产综合久久久久久| 国产午夜精品在线观看| 成人激情小说乱人伦| 亚洲精品欧美二区三区中文字幕| 欧美日韩综合在线| 麻豆91精品91久久久的内涵| 久久久噜噜噜久久人人看| 青青草原综合久久大伊人精品优势| 91麻豆精品国产91久久久久 | av在线一区二区三区| 久久久国产精品麻豆 | 国产精品正在播放| 亚洲男人的天堂在线aⅴ视频| 欧美日韩成人激情| 亚洲卡通动漫在线| 日韩一级片在线播放| 亚洲一区二区三区精品在线| 丁香婷婷综合色啪| 亚洲国产精品久久不卡毛片| 91蜜桃在线免费视频| 日韩精品乱码av一区二区| 国产精品一线二线三线精华| 另类小说视频一区二区| 久久久精品国产免大香伊| 99久免费精品视频在线观看| 秋霞影院一区二区| 亚洲国产精品成人综合 | 国产在线国偷精品免费看| 一区在线中文字幕| 不卡一区在线观看| 日本一不卡视频| 日韩三级伦理片妻子的秘密按摩| 成人福利在线看| 久久99久久精品| 亚洲国产精品久久久久婷婷884| 欧美激情一区二区| 日韩精品一区二区三区视频播放| 91在线观看成人| 激情综合色综合久久| 亚洲电影在线免费观看| 中文字幕一区不卡| 国产午夜亚洲精品理论片色戒| 日韩有码一区二区三区| 久久精品免视看| 制服丝袜在线91| 在线看日本不卡| 天堂av在线一区| 亚洲欧美一区二区三区极速播放 | 日韩欧美国产一区二区三区| 欧美性大战久久| 日韩成人一区二区| 中文字幕一区二区在线观看| 精品国产乱码久久久久久老虎| 7777精品伊人久久久大香线蕉经典版下载 | 成人精品视频网站| 亚洲欧美色图小说| 国产日韩欧美不卡在线| 93久久精品日日躁夜夜躁欧美| 久久国产生活片100| 青青草原综合久久大伊人精品优势| 亚洲成人精品在线观看| 亚洲专区一二三| 亚洲成人av在线电影| 亚洲国产精品欧美一二99| 一区二区免费视频| 欧美mv日韩mv| 欧美成人一区二区三区片免费| 6080亚洲精品一区二区| 欧美一区二区国产| 日韩欧美在线1卡| 精品sm捆绑视频| 久久久综合激的五月天| 久久美女艺术照精彩视频福利播放| 欧美自拍偷拍一区| 亚洲男同性恋视频| 久久国内精品自在自线400部| 日韩电影免费一区| 麻豆精品一二三| 国内精品写真在线观看| 国产91丝袜在线播放0| 国产馆精品极品| 亚洲综合激情另类小说区| 一区二区激情视频| 日韩成人精品在线观看| 久久精品国产色蜜蜜麻豆| 国产综合色视频| 91美女福利视频| 91麻豆精品国产| 精品99一区二区三区| 亚洲色欲色欲www在线观看| 亚洲一区二区成人在线观看| 天堂资源在线中文精品| 国产资源在线一区| 97国产精品videossex| 欧美区在线观看| 久久色在线视频| 欧美一区二区三区四区久久| 精品国产免费视频| 亚洲欧美国产毛片在线| 蜜臀av性久久久久蜜臀av麻豆| 成人精品亚洲人成在线| 日韩精品一区在线| 久久久久久黄色| 一区二区三区成人| 男男视频亚洲欧美| 波多野结衣的一区二区三区| 精品视频全国免费看| 国产日韩视频一区二区三区| 亚洲日穴在线视频| 狠狠狠色丁香婷婷综合久久五月| 成人免费视频一区二区| 欧美日韩在线不卡| 国产亚洲人成网站| 日韩在线观看一区二区| 色综合一个色综合亚洲| 国产精品一区二区你懂的| 91色综合久久久久婷婷| 精品国产制服丝袜高跟| 亚洲精品v日韩精品| 经典三级视频一区| 欧美精品乱码久久久久久 | 欧美日韩国产区一| 国产欧美精品一区aⅴ影院| 午夜在线成人av| 在线亚洲一区观看| 国产清纯在线一区二区www| 热久久国产精品| 欧美视频一区二区三区在线观看 | 久久婷婷国产综合国色天香| 亚洲精品成人在线| 国产一区二区三区在线观看免费 | 亚洲mv在线观看| bt7086福利一区国产| 日韩欧美中文字幕公布| 一二三四区精品视频| 成人性生交大片免费看中文| 精品国产亚洲在线| 亚洲va韩国va欧美va精品| 色国产精品一区在线观看| 国产色产综合色产在线视频| 青椒成人免费视频| 欧美麻豆精品久久久久久| 夜夜亚洲天天久久| 在线中文字幕不卡| 亚洲男同1069视频| 一本到一区二区三区| 中文字幕人成不卡一区| 9l国产精品久久久久麻豆| 亚洲国产精品一区二区www在线| 国产成人激情av| 久久午夜色播影院免费高清| 日本女优在线视频一区二区| 欧美日韩精品一区二区| 亚洲一区二区3|