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

📄 sa_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
字号:
/***********************************************************************/
/* File:															   */
/*	  Copyright (c) 2000 ZORAN Corporation, All Rights Reserved		   */
/*	  THIS IS PROPRIETARY SOURCE CODE OF ZORAN CORPORATION             */
/*																	   */
/* ===========                                                         */
/* Descripton:                                                         */
/* ===========                                                         */
/*                                                                     */
/* Log:                                                                */
/* ===                                                                 */
/* $Name: V_1_16 V_1_15 V_1_14 V_1_13 V_1_12 NV_1_00 V_1_11 $                                                            
/* $Header: v:/dsg/rcs/dsg/vp2k/Customer/menu/zoran/sa_m.c 1.7 2001/06/06 06:15:11 dingming Exp $                                                          
/* $Log: sa_m.c $										                       
/* Revision 1.7  2001/06/06 06:15:11  dingming										                       
/* font 32X24 complile										                       
/* Revision 1.6  2001/02/15 01:46:37  leslie										                       
/* Update ZCO database										                       
/* Revision 1.7  2000/12/22 01:12:57  dragonwg										                       
/* Change the refresh_sa results from CORE_task										                       
/* Revision 1.6  2000/12/21 17:25:28  dragonwg										                       
/* Change the Color for HIGH Volume										                       
/* Revision 1.5  2000/12/20 19:00:15  dragonwg										                       
/* Revision 1.4  2000/12/08 06:46:24  dragonwg										                       
/* Revision 1.3  2000/12/06 06:31:51  dragonwg										                       
/* Change the I/F menu										                       
/* Revision 1.2  2000/11/29 13:56:50  dingming										                       
/* Revision 1.5  2000/11/17 18:54:19  charlie										                       
/* Use C_FOCUSED										                       
/* Revision 1.4  2000/11/09 04:07:34  cliff										                       
/***********************************************************************/
#ifdef SPECTRUM_EQUALIZER
#include <stdio.h>
#include <string.h>
#include "sysdefs.h"
#include "..\..\..\ui\menu_sys\ms_wdgt.h"
#include "..\..\..\ui\menu_sys\ms_lib.h"
#include "..\..\..\ui\menu_sys\osd_drv.h"
#include "..\..\..\decoder\osdrendr.h"
#include "..\..\..\decoder\osdlayou.h"
#ifdef FONT32X24  //DM0605
#include "..\..\..\customer\dragon\strings\strings.h"
#else
#include "..\..\..\ui\strings\strings.h"
#endif
#include "menu_var.h"
#include "..\..\..\playcore\ps\ps.h"
#include "..\..\..\playcore\coremain\coregdef.h"
#include "..\..\..\kernel\eventdef.h"

// REMINDER This is not needed if we don't use oHWLimit
#include "..\..\..\Decoder\decoder.h"

typedef struct _SAM
{
  WORD wState;
} SAM;

#define SPECTRUM_ANALYZER_OFF	0
#define SPECTRUM_ANALYZER_ON	1

SAM gsam = { SPECTRUM_ANALYZER_OFF };

#define MAX_SA_VALUE	20//63

#define SA_FG_COLOR 0xC
#define SA_MIDG_COLOR 0xD
#define SA_BG_COLOR 0x3

#define SA_HIGH_COLOR 0x9
#define SA_NORMAL_COLOR 0x8
#define SA_LOW_COLOR 0xC

/*
static BYTE sa_midg_color=SA_MIDG_COLOR;
static BYTE sa_fg_color=SA_FG_COLOR;
static BYTE sa_bg_color=SA_BG_COLOR;
*/
// Static text positions
// Widget positions
#define SA_MAX_GAIN_BARS	11//12
#define SA_BAR_WIDTH		12
#define SA_BAR_SPACING		4

#define LAYOUT_WIDTH		720
#define SA_DISPLAY_WIDTH	( SA_BAR_SPACING + SA_MAX_GAIN_BARS * (SA_BAR_WIDTH + SA_BAR_SPACING) )
#define SA_DISPLAY_X_ORIGIN	( ((LAYOUT_WIDTH - SA_DISPLAY_WIDTH) / 2 ) & ~0x0007 )
#define SA_DISPLAY_LITTLE_HEIGHT 5

#define SA_DISPLAY_LITTLE_FILLED_HEIGHT 2
#define LAYOUT_HEIGHT		MS_MAX_LINES_SMALLMM
#define SA_DISPLAY_HEIGHT	100
#define SA_DISPLAY_Y_ORIGIN	( (((MS_MAX_LINES_BIGMM - LAYOUT_HEIGHT) / 2) + ((LAYOUT_HEIGHT - SA_DISPLAY_HEIGHT) / 2 )) & ~0x0001 )

static const MS_POS	screen_pos = {SA_DISPLAY_X_ORIGIN, SA_DISPLAY_Y_ORIGIN, SA_DISPLAY_WIDTH, SA_DISPLAY_HEIGHT};

#define USE_UNION
#ifdef USE_UNION
#define MEMBER(_member_)	gu_ms.m_sam._member_
#else
static BYTE prev_sa_value[] = { 0, 0, 0, 0, 0, 0};
#endif
//BYTE sa_value[6]={0, 0, 0, 0, 0, 0};
#ifdef D_TITLE
static const MS_STATIC mssMenuTitle = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_0, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_SPECTRUM_ANALYZER
};
#endif // D_TITLE

#define SCALE_Y(_y_)	((_y_) * SA_DISPLAY_HEIGHT / MAX_SA_VALUE )
#define MAP_Y(_y_) ( SA_DISPLAY_HEIGHT - SCALE_Y(_y_))

static void init_display(void)
{
  int iValueIndex,i;
  unsigned short x = SA_BAR_SPACING;
  unsigned char ucColor = SA_MIDG_COLOR;
  unsigned short y = 0;

#ifdef _DEBUG
  BYTE bNewValue = 0;
  BYTE bIncrement = MAX_SA_VALUE / (SA_MAX_GAIN_BARS -1);
  unsigned short w = SA_BAR_WIDTH;
  unsigned short h = 0;
  unsigned short yBar = 0;
  unsigned short hBar = 0;
#endif // _DEBUG
  
  for ( iValueIndex = 0; iValueIndex < SA_MAX_GAIN_BARS; iValueIndex++ )
  {

  	for(i=0;i<MAX_SA_VALUE;i++)
  	{
  		OSD_PutRect( x, y, SA_BAR_WIDTH, SA_DISPLAY_LITTLE_FILLED_HEIGHT, ucColor );
  		y+=SA_DISPLAY_LITTLE_HEIGHT;
  	}
	MEMBER(prev_sa_value)[iValueIndex] = 0;
#ifdef _DEBUG

#ifdef NO_C_STDLIB
	rtouts("\nbNewValue = "); rtouti(bNewValue);
#endif
	if ( bNewValue > MAX_SA_VALUE )
	{
	  bNewValue = MAX_SA_VALUE;
	}
/*
	yBar = 0;
	hBar = bNewValue;
	ucColor = SA_FG_COLOR;

	y = MAP_Y(yBar + hBar);
	h = MAP_Y(yBar) - y;
	if ( h )
	 OSD_PutRect( x, y, w, h, ucColor );
*/	
	MEMBER(prev_sa_value)[iValueIndex] = bNewValue;

	//bNewValue += bIncrement;
	//ucColor = SA_MIDG_COLOR;
#endif // _DEBUG

	x += SA_BAR_WIDTH + SA_BAR_SPACING;
	y=0;
  }

  DEC_set_spectrum_analyzer(SPECTRUM_ANALYZER_ON);

  gsam.wState = (WORD) SPECTRUM_ANALYZER_ON;
}
/*
void refresh_sa_old(void)
{
  // code below fills in y and h
  unsigned short x = SA_BAR_SPACING;
  unsigned short w = SA_BAR_WIDTH;
  unsigned short y = 0;
  unsigned short h = 0;
  unsigned short yBar = 0;
  unsigned short hBar = 0;

 // BYTE sa_value[SA_MAX_GAIN_BARS];
  BYTE bNewValue;
  BYTE bPrevValue;
  unsigned char ucColor;
  int iValueIndex;

#define pBufLeft	&sa_value[0]
#define pBufRight	&sa_value[SA_MAX_GAIN_BARS / 2]
  
  if ( gsam.wState == SPECTRUM_ANALYZER_ON )
  {
	// Get new values
	// -- the first six elements are the left channel values
	// -- the last six elements are the right channel values
	//DEC_get_spectrum_analyzer(pBufLeft, pBufRight);

	// update display
	for ( iValueIndex = 0; iValueIndex < SA_MAX_GAIN_BARS; iValueIndex++ )
	{
	  bNewValue = (sa_value[iValueIndex/2]+sa_value[(iValueIndex+1)/2])/2;
	  if ( bNewValue > MAX_SA_VALUE )
	  {
		bNewValue = MAX_SA_VALUE;
	  }

	  bPrevValue = prev_sa_value[iValueIndex];
	  
	  if ( bNewValue != bPrevValue )
	  {
		if ( bNewValue < bPrevValue )
		{
		  yBar = bNewValue;
		  hBar = bPrevValue - bNewValue;
		  ucColor = SA_MIDG_COLOR;
		}
		else
		// if ( bNewValue > bPrevValue )
		{
		  yBar = bPrevValue;
		  hBar = bNewValue - bPrevValue;
		  ucColor = SA_FG_COLOR;
		}

		y = MAP_Y(yBar + hBar);
		h = MAP_Y(yBar) - y;
		if ( h )
		  OSD_PutRect( x, y, w, h, ucColor );
	  }
	  
	  prev_sa_value[iValueIndex] = bNewValue;
	  x += SA_BAR_WIDTH + SA_BAR_SPACING;
	}
  } // gsam.wState
}

*/


// This must be called from the TICK200 notification
void refresh_sa(void)
{
  // code below fills in y and h
  unsigned short x = SA_BAR_SPACING;
  unsigned short w = SA_BAR_WIDTH;
  unsigned short y = 0;
  unsigned short h = 0;
  unsigned short yBar = 0;
  unsigned short hBar = 0;

//  BYTE sa_value[SA_MAX_GAIN_BARS];
  BYTE bNewValue;
  BYTE bPrevValue;
  unsigned char ucColor;
  int iValueIndex;
  int i;

//#define pBufLeft	&sa_value[0]
//#define pBufRight	&sa_value[SA_MAX_GAIN_BARS / 2]
  
  if ( gsam.wState == SPECTRUM_ANALYZER_ON )
  {
	// Get new values
	// -- the first six elements are the left channel values
	// -- the last six elements are the right channel values
	
  //  if(DEC_get_spectrum_analyzer(pBufLeft, pBufRight))
	//{
	
	// update display
	for ( iValueIndex = 0; iValueIndex < SA_MAX_GAIN_BARS; iValueIndex++ )
	{
	  bNewValue = (sa_value[iValueIndex/2]+sa_value[(iValueIndex+1)/2])/6;	
//	  bNewValue = (GET_SA_VALUE(iValueIndex/2) + GET_SA_VALUE((iValueIndex + 1)/2))/6;//ZORAN LX0214
//	  bNewValue = (sa_value[iValueIndex])/3;
	  if ( bNewValue > MAX_SA_VALUE )
	  {
		bNewValue = MAX_SA_VALUE;
	  }

	  bPrevValue = (MEMBER(prev_sa_value)[iValueIndex/2]+MEMBER(prev_sa_value)[(iValueIndex+1)/2])/6;
	  
	  if ( bNewValue != bPrevValue )
	  {
		if ( bNewValue < bPrevValue )
		{
		  yBar = bNewValue;
		  hBar = bPrevValue - bNewValue;
		  ucColor = SA_MIDG_COLOR;
		  y =  (SA_DISPLAY_HEIGHT - (yBar + hBar)*SA_DISPLAY_LITTLE_HEIGHT);
		  h = SA_DISPLAY_LITTLE_FILLED_HEIGHT;
		  for(i=0;i<hBar;i++)
		  {
			OSD_PutRect( x, y, w, h, ucColor );
			y += SA_DISPLAY_LITTLE_HEIGHT;	
		  }
		}
		else
		// if ( bNewValue > bPrevValue )
		{
		  yBar = bPrevValue;
		  hBar = bNewValue - bPrevValue;
		  //ucColor = sa_fg_color;
		  y =  (SA_DISPLAY_HEIGHT - (yBar + hBar)*SA_DISPLAY_LITTLE_HEIGHT);
		  h = SA_DISPLAY_LITTLE_FILLED_HEIGHT;
		  for(i=bNewValue;i>yBar;i--)
		  {
			//hBar = yBar+i 

			if(i<(MAX_SA_VALUE/3))
				ucColor=SA_LOW_COLOR;
			else if(i<(MAX_SA_VALUE*2/3))
				ucColor=SA_NORMAL_COLOR;
			else
				ucColor=SA_HIGH_COLOR;
			OSD_PutRect( x, y, w, h, ucColor );
			y += SA_DISPLAY_LITTLE_HEIGHT;	
		  }// for(i)
		}// else  
	  }// if(!=)
	 // prev_sa_value[iValueIndex/2] = (sa_value[iValueIndex/2]>MAX_SA_VALUE)?MAX_SA_VALUE:sa_value[iValueIndex/2];
	  x += SA_BAR_WIDTH + SA_BAR_SPACING;
	} // for(iValueIndex)
	//}
	for ( iValueIndex = 0; iValueIndex < SA_MAX_GAIN_BARS/2+1; iValueIndex++ )
	{
		MEMBER(prev_sa_value)[iValueIndex]=sa_value[iValueIndex];	
	}
  } // gsam.wState
}

static void layout (void)
{

	go_CurrentLayout.m_bBigMemMap = USE_BIGMEMMAP_WHEN_REQUIRED;
	go_CurrentLayout.m_cPixRes = 0;
	go_CurrentLayout.m_wOriginX = 0;
	go_CurrentLayout.m_wOriginY = SA_DISPLAY_Y_ORIGIN;
	go_CurrentLayout.m_wWidth = LAYOUT_WIDTH;
	go_CurrentLayout.m_wHeight = SA_DISPLAY_HEIGHT;
	go_CurrentLayout.m_cNbrHole = 0;
	go_CurrentLayout.m_cInitColor = 0;
	go_CurrentLayout.m_cNbrColor = 16;
	go_CurrentLayout.m_pColorPalette = (OSD_Palette *)MenuBitmapColor;

	OSDSetLayout();
	OSDSetFont(0);

#ifdef NO_C_STDLIB
	rtouts("\nSpectrum Analyzer layout");
#endif
}

static void on_sa_close(void)
{
#ifdef NO_C_STDLIB
  rtouts("Spectrum Analyzer screen closed\n");
#endif

  gsam.wState = (WORD) SPECTRUM_ANALYZER_OFF;

  DEC_set_spectrum_analyzer(SPECTRUM_ANALYZER_OFF);
}

void open_sa(void)
{
	screen = MS_create_screen((MS_POS *)&screen_pos, screen_color, 0, on_sa_close, layout);

	MS_dialog_display((MS_DIALOG*)screen);

	init_display();
}

#endif // SPECTRUM_EQUALIZER

⌨️ 快捷键说明

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