⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdplayer.c

📁 Sunplus 8202S source code.
💻 C
字号:
/**********************************************************
**  Description: for cd player
**  Creater:liweihua
**  Date:2003-9-3
***********************************************************/
#include "global.h"
#include "memmap0.h"
#include "ircmd.h"

#ifdef CD_PLAYER

//declare the extern vars and consts
extern BYTE bEqMaxKeepTm;
extern void  osd_init_cdplayer(); 
extern UINT8 *get_osdbuf_region_ptr(int _region, int _field);
extern const UINT8 osd_header_offset[8];
#define	OSD_DATA_OFFSET(f)	    (osd_header_offset[(f)&OSD_FORMAT_MASK])
void osd_print_cdeq(UINT8 r,BYTE *p);
void DisplaycdEq(void);

//setting the band color
#define GREENCOL        0xcccc
#define BLUECOL      	0xbbbb
#define BLACKCOL        0xdddd

//setting the region of band
#define AUDBAND_R       3

//display the video in the player interface according to spectrum value(7 bands)
void show_cdplayer(void)
{
    osd_init_cdplayer();
    unEqMaxRef=0;
    //bEqDisplay=1;
    //setup_eq_display(1);//terry,2003/9/26 04:43PM
    setup_eq_display(0xf);//nono 2003-10-22 15:14 change for new dsp code.
}

//Draw EQ status on screen by OSD
// r : region for draw
// *p: input 7 band EQ value 
//Each band energy range is 0 ~ 71 
void osd_print_cdeq(UINT8 r,BYTE *p)
{
    UINT16  iWidth;
    UINT16  i,j,iBlock,step,k;
    UINT16  *pTopLine,*pBtmLine;
    UINT16  unColor;    
    BYTE    bChannelVal[14];    //byte 13 is garbage
    BYTE barlen;
    iWidth = region[r].osd_w/4;
    if(p_scan==0)
    {
    	barlen=72;    	
    }
    else
    {
    	barlen=144;
    }
    
    //calcuate the interpolate data
    //The data is mapping to 0 ~ 71    
    for (i=0;i<14;i=i+2)
    {
        bChannelVal[i]=*p;
        bChannelVal[i+1]=(*(p)+*(p+1))/2;
        p++;
    }
    
    //check the last max value
    for (i=0;i<13;i++)
    {
        if (bEqEnergyMax[i]<=bChannelVal[i])
        {
            bEqEnergyMax[i]=bChannelVal[i];
        }
        else
        {                
            if(p_scan==0)             
            {
            if ( (bEqEnergyMax[i]!=0) && (bEqMaxKeepTm==0) )
                {
                    bEqEnergyMax[i]=bEqEnergyMax[i]-1;    //reduce 1  
                } 
            }
            else
            {
            if ( (bEqEnergyMax[i]>=2) && (bEqMaxKeepTm==0) )
                {
                    bEqEnergyMax[i]=bEqEnergyMax[i]-2;    //reduce 1  
                } 
            }         
        }
    }
    
    if (bEqMaxKeepTm)
        bEqMaxKeepTm--;
    else
        bEqMaxKeepTm=1;

    //plot the background block
    if (p_scan==0) {
        pTopLine = (UINT16 *) (get_osdbuf_region_ptr(r,0)+iWidth*120/2);
        pBtmLine = (UINT16 *) (get_osdbuf_region_ptr(r,1)+iWidth*120/2);
    } else {
        pTopLine = (UINT16 *) (get_osdbuf_region_ptr(r,0)+iWidth*120);
        pBtmLine = (UINT16 *) (get_osdbuf_region_ptr(r,0)+iWidth*120);
    }
    

    //Totally has 72 block for each freq (0 ~ 71 )
    //pTopLine=pTopLine+iWidth;
    if(p_scan==0)  step=1;
    else step=1;
    
    
    for (j=barlen;j>0;j--)
    {      
        for(k=0;k<step;k++)
        {
            //pTopLine[0]=TRANS_COLOR;
            
            for (i=1,iBlock=0;iBlock<13;i=i+4,iBlock++)
            {    
                //make sure color
                if (j==bEqEnergyMax[iBlock])
                    unColor=BLUECOL;
                else {
                    if (j<bChannelVal[iBlock])
                        unColor=GREENCOL;
                    else
                        unColor=BLACKCOL;   
                }            
                                  
                pTopLine[i]   =  unColor;
                pTopLine[i+1] =  unColor;
                pTopLine[i+2] =  unColor;
                if (p_scan==0)
                {
                    pBtmLine[i]   =  unColor;
                    pBtmLine[i+1] =  unColor;
                    pBtmLine[i+2] =  unColor;
                }
            }
            pTopLine+=iWidth;    
            if (p_scan==0) pBtmLine+=iWidth;
        }
        
        //step 2 line
        pTopLine+=(iWidth*step);    
        if (p_scan==0) pBtmLine+=(iWidth*step);
       
    } 
}

//draw the lines related with the 7 spectrum values
void DisplaycdEq(void)
{
    BYTE    i,j;
	BYTE	bEqValue[7];
	BYTE 	*p;
    
        if (bEqDisplay>=4) 
        {
            p = (BYTE *)(SDRAM_BASE_CACHED+MEM_PCMYA*1024);
                       			
            for (i=0, j=0;i<7 ;i++) 
            {
                UINT32  eqSrc;
                UINT32  eqTemp;
                
                eqSrc = (((*p)<<8) | *(p+1));                
                p+=3;

                if (eqSrc > unEqMaxRef)
					unEqMaxRef = eqSrc;

                //normalize value to 0 ~ 25
                if (unEqMaxRef==0) 
                    eqTemp = 0;
                else
                {
                	if(p_scan==0)
                		eqTemp = eqSrc*80/unEqMaxRef;
                	else
                		eqTemp = eqSrc*160/unEqMaxRef;
                }

                bEqValue[i] = eqTemp;
				
            if (bEqValue[i]<4) 
            {
                    j++;
                }
            }

            //adjust max refrence 
            if ( (j>=6) && (unEqMaxRef>400) )
                unEqMaxRef=unEqMaxRef-(unEqMaxRef/8);
			
            osd_print_cdeq(AUDBAND_R, bEqValue);			
            bEqDisplay=1;
        } else {
            bEqDisplay++;
        } 
    } 

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -