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

📄 pcd_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 5 页
字号:
/***********************************************************************/
/* File:															   */
/*	  Copyright (c) 2000 ZORAN Corporation, All Rights Reserved		   */
/*	  THIS IS PROPRIETARY SOURCE CODE OF ZORAN CORPORATION             */
/*																	   */
/* ===========                                                         */
/* Descripton:                                                         */
/* ===========                                                         */
/*                                                                     */
/* Log:                                                                */
/* ===                                                                 */
/* $Name: $                                                            
/* $Header: v:/dsg/rcs/dsg/vp2k/Customer/menu/zoran/mp3_m.c 1.35 2001/10/15 03:05:05Z dingming Exp $                                                          
/* $Log: mp3_m.c $										                       
/* Revision 1.35  2001/10/15 03:05:05Z  dingming										                       
/* Make Zoom and Pan-Scan working for Jpeg view.										                       
/* Revision 1.34  2001/10/12 07:41:55Z  dingming										                       
/* Fix the problem which sometimes the logo can not been displayed from										                       
/* JPEG to stop-menu										                       
/* Revision 1.33  2001/10/10 23:15:14Z  charlie										                       
/* Clear all state bits on entry; Restart slideshow correctly										                       
/* Revision 1.32  2001/10/10 17:28:58Z  charlie										                       
/* Added restore_background before redisplaying menu; Check for										                       
/* MP3M_STATE_IMAGE_OPEN before calling open_image in										                       
/* open_slideshow, track_action										                       
/* Revision 1.31  2001/10/09 21:39:19Z  charlie										                       
/* Added test for IS_STATE(MP3M_STATE_IMAGE_OPEN) for MS_UOP_STATUS										                       
/* Revision 1.30  2001/10/08 22:19:32Z  charlie										                       
/* Use ALIGN_LEFT_PAD for status; Return to menu after slideshow										                       
/* Revision 1.29  2001/10/08 18:41:34Z  charlie										                       
/* Added mp3m_can_zoom for D_PICTURE_CD_ENABLED										                       
/* Revision 1.28  2001/10/08 17:27:48Z  charlie										                       
/* Slideshow fixes; Don't display logo on RETURN										                       
/* Revision 1.27  2001/10/05 18:22:56Z  charlie										                       
/* FIxes for PictureCD for D_PICTURE_CD_ENABLED										                       
/* Revision 1.26  2001/10/04 18:26:02Z  charlie										                       
/* PictureCD menu changes										                       
/* Revision 1.25  2001/10/03 17:14:40Z  charlie										                       
/* Added test for MP3M_STATE_LIST_INITIALIZED to 										                       
/* mp3_refresh_track and mp3_refresh_time										                       
/* Revision 1.24  2001/10/02 02:16:47Z  charlie										                       
/* corrected comments										                       
/* Revision 1.23  2001/09/28 17:05:05Z  charlie										                       
/* Fixed width of MP3_MENU_ID title										                       
/* Revision 1.22  2001/09/27 20:52:02Z  charlie										                       
/* Implement PictureCD menu for D_PICTURE_CD_ENABLED										                       
/* Revision 1.21  2001/09/26 00:30:43Z  charlie										                       
/* Added status display, STATE macros										                       
/* Revision 1.20  2001/09/25 19:36:54Z  charlie										                       
/* Added slideshow timer										                       
/* Revision 1.19  2001/09/25 17:54:58Z  charlie										                       
/* Added slideshow timer										                       
/* Revision 1.18  2001/09/25 00:46:00Z  charlie										                       
/* Added PictureCD logic for D_PICTURE_CD_ENABLED										                       
/* Revision 1.17  2001/09/13 01:43:48Z  stephaneh										                       
/* Fixed MP3 OSD problem										                       
/* Revision 1.16  2001/06/04 18:23:14Z  victorwu										                       
/*  Changed MAX_TRACK_NUMBER_DIGITS to MAX_TRACK_DIGITS                                                       										                       
/* Revision 1.15  2001/02/08 00:32:05  tia										                       
/* Fix scratch pad overwrite bug.										                       
/* Revision 1.14  2000/11/17 18:54:16  charlie										                       
/* Use C_FOCUSED										                       
/* Revision 1.13  2000/11/13 23:33:22  charlie										                       
/* Added status display/numeric selection/time display, button colors;										                       
/* Revision 1.12  2000/11/12 02:00:11  charlie										                       
/* Restored title and dirname positions to upper left; Prevented status										                       
/* message from overwriting them; Improved track and time display										                       
/* format.										                       
/* Revision 1.11  2000/11/11 01:05:11  charlie										                       
/* Added tmp_string, time display; enabled numeric selection										                       
/* Revision 1.10  2000/11/09 04:07:33  cliff										                       
/***********************************************************************/
#define RELEASE_TRACE_MODULE	// Release trace only in Release Version
#ifdef RELEASE_TRACE_MODULE
#define _DEBUG
#endif

#ifdef _DEBUG
#ifdef RELEASE_TRACE_MODULE
#define IFTRACE if (trace_flags.ui) // TC0513
//#define IFTRACE if (1) // GL0611
#else
#define IFTRACE if (gTraceUI)
extern int gTraceUI;
#endif
#endif

#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"
#ifdef D_NO_KARAOKE_DEFAULT
#else
#include "..\..\playcore\coremain\coregdef.h"
#endif // D_NO_KARAOKE_DEFAULT
#include "..\..\playcore\coremain\coremain.h"
#include "..\..\..\kernel\eventdef.h"
#include "..\..\..\Decoder\decoder.h"
#include "..\..\playcore\fileSys\filesrch.h"
#include "..\..\playcore\ScPad\scmgr.h"
#include "..\..\playcore\playmode\playmode.h"

// <<< ZORAN CDE0924 : Implement PictureCD Browser
#include "zmenu.h"

#include "..\..\..\Playcore\FileSys\i9660lib.h"
// ZORAN CDE0924 >>>
#include "uicc_def.h"
#ifdef D_PICTURE_CD_ENABLED	//DM1105
extern BOOL b_enable_auto_slideshow;
#endif

extern void ui_start_menu( int menu_id ); // Declare later on this file
#ifdef D_PICTURE_CD_ENABLED
void Menu_update_buttonnumber(WORD CurrentFilenumber);
#endif

// <<< ZORAN CDE0924 : Implement PictureCD Browser
#define SET_STATE(_bits_) gmp3m.wState |= (_bits_)
#define CLEAR_STATE(_bits_) gmp3m.wState &= ~(_bits_)
#define IS_STATE(_bits_) (gmp3m.wState & (_bits_))

// Bit values for MP3M.wState
// ZORAN CDE0925 : Changed from MP3M_... to MP3M_STATE_...
#define		MP3M_STATE_LIST_INITIALIZED		0x0001

// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
#define		MP3M_STATE_IMAGE_OPEN			0x0002
#define		MP3M_STATE_SLIDESHOW_ACTIVE		0x0004
#define		MP3M_STATE_SLIDESHOW_PAUSED		0x0008
#define		MP3M_STATE_STATUS_ACTIVE		0x0010
#define     MP3M_STATE_FIRST_TIME_SLIDESHOW 0x0020
#define		MP3M_STATE_PREPARE_R1DATE		0x0040		//DM1130 if the bit been set means we need prepare the data to R1
static BOOL jpgmenu_notdisp_item =  FALSE;
#endif // D_PICTURE_CD_ENABLED

#ifdef JPG_DIGEST_ENABLED	//DM1019
extern int	DigestNotify;
#endif

#define FOCUSED_WIDGET(_pmsScreen_)	  ((MS_DIALOG *) _pmsScreen_)->pwli_focus->widget

#ifdef D_NO_MP3M
typedef struct _dirBounds
{
  int iFirstFileIndex;
  int iLastFileIndex;
  int iLastItemNum;
} DIR_BOUNDS;

typedef struct _itemInfo
{
  int iItemNum;
  int iFileIndex;
} ITEM_INFO;

#define MAX_DISPLAY_TRACKS	  14
#define MAX_TRACK_DIGITS	  3

typedef char SZ_BUTTON_NUMBER[MAX_TRACK_DIGITS + 1];

typedef struct _mp3m
{
  int iDirNum;
  int iButtonNumber;

  DIR_BOUNDS dirBounds;
  ITEM_INFO firstDisplayed;
  ITEM_INFO lastDisplayed;
  WORD wState;

// ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
  MS_STATIC *pmssMenuTitle;
  MS_STATIC *pmssDirName;
  MS_STATIC *pmssTmpMsg;
  MS_STATIC *pmssTmpString;
  PO_TIMER pSlideshowTimer;
#endif // D_PICTURE_CD_ENABLED
  
  // Track button strings
  SZ_BUTTON_NUMBER szButtonNumber[MAX_DISPLAY_TRACKS];

  // Track buttons
  MS_BUTTON msbTrack[MAX_DISPLAY_TRACKS];

  // Track filename items
  MS_STATIC mssTrack[MAX_DISPLAY_TRACKS];

} MP3M;
#endif // D_NO_MP3M

#if D_LOCAL_GMP3M
MP3M gmp3m =
{
  0,			// iDirNum;
  0,			// iButtonNumber
  {-1, -1, -1}, // dirBounds
  {-1, -1},		// firstDisplayed
  {-1, -1},		// lastDisplayed
  0,			// wState
  NULL,			// pmssMenuTitle
  NULL,			// pmssDirName
  NULL,			// pmssTmpMsg
  NULL,			// pmssTmpString
  NULL,			// pSlideshowTimer
  {0},			// szButtonNumber
  {0},			// msbTrack
  {0},			// mssTrack
};
#else
#define gmp3m		gns.cdda.mp3m
#endif // D_NO_MP3M


















// Screen and item positions
static const MS_POS screen_pos = {60, 60, 600+60, MS_MAX_LINES_BIGMM};


static MS_UOP override_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param);

static MS_UOP dirName_user_op(MS_WIDGET *widget,MS_UOP uop,char param);

static void track_any_action(void);
static void track_action(int cur);

#define MP3M_BUTTON_WIDTH	40

#define MP3M_NAME_WIDTH	232

static const MS_STATIC mssProto =
{
  {
	MS_ASCII | MS_STRING_ON_SC,
	ALIGN_LEFT_PAD,
	I_COLOR,
	{0, 0, MP3M_NAME_WIDTH, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
  },

  NULL
};

#define MP3M_SPACING	8
#define MP3M_BUTTON_COLUMN_1	  MP3M_SPACING
#define MP3M_BUTTON_COLUMN_2	  (MP3M_BUTTON_COLUMN_1 + MP3M_BUTTON_WIDTH + MP3M_SPACING + MP3M_NAME_WIDTH + MP3M_SPACING)

#define MP3M_NAME_COLUMN_1	  (MP3M_BUTTON_COLUMN_1 + MP3M_BUTTON_WIDTH + MP3M_SPACING)
#define MP3M_NAME_COLUMN_2	  (MP3M_BUTTON_COLUMN_2 + MP3M_BUTTON_WIDTH + MP3M_SPACING)

#define ITEMNUM_COLUMN2		(MAX_DISPLAY_TRACKS / 2)
#define BUTTON_POS_X(_iItemNum_)	(unsigned short) ( (_iItemNum_) < ITEMNUM_COLUMN2 ? MP3M_BUTTON_COLUMN_1 : MP3M_BUTTON_COLUMN_2 ) 
static unsigned short button_pos_x( int iItemNum )
{
#ifdef DISABLE
  return (unsigned short) ( iItemNum < ( MAX_DISPLAY_TRACKS / 2 ) ? MP3M_BUTTON_COLUMN_1 : MP3M_BUTTON_COLUMN_2 );
#else
  return BUTTON_POS_X(iItemNum);
#endif
}

#define BUTTON_POS_Y(_iItemNum_)	(unsigned short) ( ( (_iItemNum_) < ITEMNUM_COLUMN2 ? MS_LINE_HEIGHT * (_iItemNum_) : MS_LINE_HEIGHT * ((_iItemNum_) - ITEMNUM_COLUMN2) ) + MS_LINE_HEIGHT )
static unsigned short button_pos_y( int iItemNum )
{
#ifdef DISABLE
  int iPos;
  
  iPos = ( iItemNum < ITEMNUM_COLUMN2 ? MS_LINE_HEIGHT * iItemNum : MS_LINE_HEIGHT * (iItemNum - ITEMNUM_COLUMN2) );

  return (unsigned short) ( iPos + MS_LINE_HEIGHT );
#else
  return BUTTON_POS_Y(iItemNum);
#endif // DISABLE
}

static unsigned short name_pos_x( int iItemNum )
{
  return (unsigned short) ( iItemNum < ITEMNUM_COLUMN2 ? MP3M_NAME_COLUMN_1 : MP3M_NAME_COLUMN_2 );
}

#define	  name_pos_y	button_pos_y

// return the button number associated with a widget
static int button_number( MS_WIDGET *widget )
{
  int iButtonNumber = widget->pos.y / MS_LINE_HEIGHT - 1;

  if ( widget->pos.x == MP3M_BUTTON_COLUMN_2 )
	iButtonNumber += ITEMNUM_COLUMN2;

  return iButtonNumber;
}

#define B_SCROLL_FORWARD	  TRUE

#ifdef DISABLE
#define SCROLL_BACK_BUTTON_POS	{328, MS_LINE_0, 16, MS_LINE_HEIGHT}
const MS_STATIC mssScrollBack =
{
  { // MS_WIDGET
	0,
	ALIGN_CENTER,
	I_COLOR,
	SCROLL_BACK_BUTTON_POS,
	NO_PARENT,
	static_user_op
  },

  (void *)S_LEFT_ARROW
};

#define SCROLL_FORWARD_BUTTON_POS	{344, MS_LINE_0, 16, MS_LINE_HEIGHT}
const MS_STATIC mssScrollForward =
{
  { // MS_WIDGET
	0,
	ALIGN_CENTER,
	I_COLOR,
	SCROLL_FORWARD_BUTTON_POS,
	NO_PARENT,
	static_user_op
  },

  (void *)S_RIGHT_ARROW
};
#endif // DISABLE

static BOOL can_scroll( BOOL backOrForward )
{
  if ( backOrForward == B_SCROLL_FORWARD )
  {
	return ( gmp3m.lastDisplayed.iFileIndex < gmp3m.dirBounds.iLastFileIndex );
  }
  else
  {
	return ( gmp3m.firstDisplayed.iFileIndex > gmp3m.dirBounds.iFirstFileIndex );
  }
}

// <<< ZORAN CDE0926 : Renamed widget to pmsw, Added D_PICTURE_ENABLED logic
#ifdef D_PICTURE_CD_ENABLED

#ifdef D_MS_EXTENSIONS
#define COLOR_INDEX_TRANSPARENT		0x0
#define COLOR_INDEX_WHITE			0x2
#else
#define COLOR_INDEX_TRANSPARENT		0x0
#define COLOR_INDEX_WHITE			0x2
#endif // D_MS_EXTENSIONS

static void mp3m_erase_menu(void)
{
	MS_WIDGET *pmsw = (MS_WIDGET *) screen;
	unsigned char ucColor;
	unsigned short usY;
	unsigned short usHeight;

	if ( IS_STATE(MP3M_STATE_IMAGE_OPEN) )
	{
		// Erasing the entire screen
		ucColor = COLOR_INDEX_TRANSPARENT;
		usY = 0;
		usHeight = pmsw->pos.h;
	}
	else
	{
		ucColor = BG_COLOR(pmsw->color);
		usY = MS_LINE_HEIGHT;
		usHeight = pmsw->pos.h - MS_LINE_HEIGHT;
	}
	
	OSD_SetOrigin(pmsw);
	OSD_PutRect(0, usY, pmsw->pos.w, usHeight, ucColor);
}
#else // D_PICTURE_CD_ENABLED
static void mp3m_erase_menu(void)
{
	MS_WIDGET *pmsw = (MS_WIDGET *) screen;

	OSD_SetOrigin(pmsw);
	OSD_PutRect(0, MS_LINE_HEIGHT, pmsw->pos.w, pmsw->pos.h - MS_LINE_HEIGHT, BG_COLOR(pmsw->color));
}
#endif // D_PICTURE_CD_ENABLED

static void SetButton( int iItemNum, int iFileIndex )
{
  MS_WIDGET *msw = (MS_WIDGET *) &gmp3m.msbTrack[iItemNum];
  
  if ( iFileIndex < 0 )
  {
	strcpy( gmp3m.szButtonNumber[iItemNum], "" );
  }
  else
  {
	num_to_str(iFileIndex + 1, gmp3m.szButtonNumber[iItemNum], MAX_TRACK_DIGITS);
  }
}

#define NAME_OFFSET	  ((long) go_TmpFileRec.Name - (long) &go_TmpFileRec )

static void *file_name_address( int iFileIndex )
{
  void *pv;
  
  pv = (void *) (WORD) (gi_FirstRecLoc + (iFileIndex * FILEREC_DWSIZE) + NAME_OFFSET / 4);

  return pv;
}

static void SetFilename( int iItemNum, int iFileIndex )
{
  MS_WIDGET *msw = (MS_WIDGET *) &gmp3m.mssTrack[iItemNum];
  
  if ( iFileIndex < 0 )
	((MS_STATIC *) msw)->text = 0;
  else
	((MS_STATIC *) msw)->text = file_name_address(iFileIndex);
}

static void setListItem( int iItemNum, int iFileIndex )
{
  SetButton(iItemNum, iFileIndex);
  SetFilename(iItemNum, iFileIndex);
}

static const MS_BUTTON msbProto =
{
  { // MS_STATIC

	{ // MS_WIDGET
	  MS_ASCII | MS_HOT_SPOT,
	  ALIGN_CENTER,
	  BUTTON_COLOR,
	  {0, 0, MP3M_BUTTON_WIDTH, MS_LINE_HEIGHT},
	  NO_PARENT,
	  override_button_user_op
	},

	(void *)S_NULL
  },

  track_any_action
};

#ifdef DISABLE
static const MS_CORE_WIDGET mscw =
{
  (void *) &msbProto,
  MS_HOT_SPOT,
  ALIGN_CENTER,

⌨️ 快捷键说明

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