📄 sa_m.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 + -