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

📄 pcd_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 5 页
字号:
		}
		break;

	case MS_UOP_RETURN:
//	case MS_UOP_STOP:
#ifdef ICON_IN_THUMBNAIL_MENU
		uop = MS_UOP_NOP;
#else
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN) )
		{
			ui_tmp_msg( S_STOP );
			close_image();
			uop = MS_UOP_NOP;
		}
#endif
		break;

	case MS_UOP_UP:
	case MS_UOP_DOWN:
	case MS_UOP_LEFT:
	case MS_UOP_RIGHT:
		if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )	//DM1015 making Panning work during jpeg Zoom.
			uop = dialog_user_op( pmsw, uop, param );
		break;
//ZORAN DM1018 implement PICTRUE CD Browser
	case MS_UOP_ANGLE:
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
		{
			close_image_status();
		}
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN) )
			rotate_image();
		uop = MS_UOP_NOP;
		break;
	case MS_UOP_MODE:
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
		{
			close_image_status();
		}
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN) )
			trans_image();
		uop = MS_UOP_NOP;
		break;
//#ifdef JPG_DIGEST_ENABLED	//DM1019
//	case MS_UOP_MENU:
//		if ( g_ui_active_menu_id == PICTURE_CD_MENU_ID )
//			thumbnail_image();
//		uop = MS_UOP_NOP;
//		break;
//#endif
//ZORAN DM1018
	case MS_UOP_DISPLAY:
//		if(b_Kodak_picture_cd)
#ifdef JPG_DIGEST_ENABLED	//DM1019
		if(DigestNotify)
		{
			jpgmenu_notdisp_item = DigestNotify;
			DigestNotify = 0;
		}
#endif
		if(jpgmenu_notdisp_item)
		{
			jpgmenu_notdisp_item = 0;

			open_image();
			uop = MS_UOP_NOP;
		}
		else{
		if(IS_STATE(MP3M_STATE_FIRST_TIME_SLIDESHOW))
		{
			CLEAR_STATE(MP3M_STATE_FIRST_TIME_SLIDESHOW);
//			b_Kodak_picture_cd = FALSE;
			uop = MS_UOP_NOP;
			open_slideshow();
		}
		else
			uop = dialog_user_op( pmsw, uop, param );
		}
		break;
		//return MS_UOP_NOP;
//	case MS_UOP_ENTER:
//		if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
//			open_image();
//		break;
	default:
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
		{
			close_image_status();
		}
		uop = dialog_user_op( pmsw, uop, param );
	}
	
	return uop;
}
// ZORAN CDE0924 >>>

#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0924 >>>

static void track_action(int cur)
{
	EVENT evt = 0;
	long track = (long) cur;
	
#ifdef NO_C_STDLIB
	dbouts("\nTrack number is "); dboutl(track);
#endif

// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
	// Bypass opening the image if the slideshow was just opened,
	// but proceed to display the first file
	if ( (g_ui_active_menu_id == PICTURE_CD_MENU_ID) && !IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
	{
		if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
			open_image();
	}
	if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
	{
		ie_send( IE_CORE_STOP );//DM1106 Abort playback first...
		ie_send( IE_CORE_PLAY );
	}
	else
	{
	evt = IE_CORE_JPG_GOTO_ENTRY;;

	ie_send_ex(evt, (void *) track);
	}
#else
	evt = IE_CORE_GOTO_ENTRY;

	ie_send_ex(evt, (void *) track);

#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0924 >>>
}

static void track_1_action(void)
{
	track_action(1);
}

static void track_2_action(void)
{
	track_action(2);
}

static void track_3_action(void)
{
	track_action(3);
}

static void track_any_action(void)
{
	track_action( BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) );
}

static void mp3_refresh( int iButtonNumberNext )
{
	MS_change_focus((MS_DIALOG *)screen, (MS_WIDGET *) &gmp3m.msbTrack[iButtonNumberNext]);
#ifdef D_PICTURE_CD_ENABLED
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
	{
		MS_refresh((MS_DIALOG *) screen);

		update_scroll_statics();
	}
}


#if 1 //def DISABLE
// Select the item in the list corresponding to the current track
static void list_goto_track( WORD wTrackNext )
{
  int iTrackCurrent = BUTTON_NUMBER_TO_TRACK( gmp3m.iButtonNumber );
  int iTrackNext = (int) wTrackNext;

#if 0	//ZORAN DM1112 remove repeat code...
  if ( iTrackNext == iTrackCurrent + 1 )
  {
	  int iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
	  
#ifdef NO_C_STDLIB
	  dbouts("\n iTrackCurrent: "); dbouti(iTrackCurrent);
	  dbouts("\n iTrackNext: "); dbouti(iTrackNext);
#endif
	  
#ifdef NO_C_STDLIB
	  rtouts("\n iButtonNumberNext: "); rtouti(iButtonNumberNext);
	  rtouts("\n last displayed item: "); rtouti(gmp3m.lastDisplayed.iItemNum);
#endif
	  
	  if ( iButtonNumberNext > gmp3m.lastDisplayed.iItemNum )
	  {
		  if ( can_scroll(B_SCROLL_FORWARD) )
		  {
			  scroll_forward();
			  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
			  mp3_refresh( iButtonNumberNext );
		  }
		  else
		  {
			  change_directory();
			  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
		  }
		  gmp3m.iButtonNumber = iButtonNumberNext;
		  
#ifdef NO_C_STDLIB
		  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
		  return;
	  } // iButtonNumberNext > gmp3m.lastDisplayed.iItemNum
	  
	  else
		  // Button number is already displayed
	  {
		  gmp3m.iButtonNumber = iButtonNumberNext;
#ifdef NO_C_STDLIB
		  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
		  
		  mp3_refresh( iButtonNumberNext );
	  } //  iButtonNumberNext > gmp3m.lastDisplayed.iItemNum
  } // if ( iTrackNext == iTrackCurrent + 1 )
  else
	  if ( iTrackNext == iTrackCurrent - 1 )
	  {
		  int iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
		  
#ifdef NO_C_STDLIB
		  dbouts("\n iTrackCurrent: "); dbouti(iTrackCurrent);
		  dbouts("\n iTrackNext: "); dbouti(iTrackNext);
#endif
		  
#ifdef NO_C_STDLIB
		  rtouts("\n iButtonNumberNext: "); rtouti(iButtonNumberNext);
		  rtouts("\n last displayed item: "); rtouti(gmp3m.lastDisplayed.iItemNum);
#endif
		  
		  if ( iButtonNumberNext < gmp3m.firstDisplayed.iItemNum )
		  {
			  if ( can_scroll(!B_SCROLL_FORWARD) )
			  {
				  scroll_backward();
				  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
				  mp3_refresh( iButtonNumberNext );
			  }
			  else
			  {
				  previous_directory();
				  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
			  }
			  gmp3m.iButtonNumber = iButtonNumberNext;
#ifdef NO_C_STDLIB
			  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
			  return;
		  } // iButtonNumberNext > gmp3m.lastDisplayed.iItemNum
		  
		  else
			  // Button number is already displayed
		  {
			  gmp3m.iButtonNumber = iButtonNumberNext;
#ifdef NO_C_STDLIB
			  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
			  mp3_refresh( iButtonNumberNext );
		  } //  iButtonNumberNext < gmp3m.firstDisplayed.iItemNum
	  } // if ( iTrackNext == iTrackCurrent - 1 )
	  else
#endif //#if 0
	  {
		  if ( iTrackCurrent != iTrackNext )
			  //Zoran DM1112 Add the following to update and scroll the screen whatever current track is...
			  //iTrackNext is not have to == iTrackCurrent +/-1
		  {
			  int iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
#ifdef NO_C_STDLIB
			  rtouts("\n iTrackCurrent: "); rtouti(iTrackCurrent);
			  rtouts("\n iTrackNext: "); rtouti(iTrackNext);
#endif
			  if ( iButtonNumberNext > gmp3m.lastDisplayed.iItemNum )
			  {
				  if ( can_scroll(B_SCROLL_FORWARD) )
				  {
					  scroll_forward();
					  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
					  mp3_refresh( iButtonNumberNext );
				  }
				  else
				  {
					  change_directory();
					  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
				  }
				  
				  gmp3m.iButtonNumber = iButtonNumberNext;
				  
#ifdef NO_C_STDLIB
				  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
				  return;
			  } // iButtonNumberNext > gmp3m.lastDisplayed.iItemNum
			  
			  else if ( iButtonNumberNext < gmp3m.firstDisplayed.iItemNum )
			  {
				  
				  if ( can_scroll(!B_SCROLL_FORWARD) )
				  {
					  scroll_backward();
					  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
					  mp3_refresh( iButtonNumberNext );
				  }
				  else
				  {
					  previous_directory();
					  iButtonNumberNext = TRACK_TO_BUTTON_NUMBER( iTrackNext );
				  }
				  
				  gmp3m.iButtonNumber = iButtonNumberNext;
#ifdef NO_C_STDLIB
				  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
				  return;
			  } // iButtonNumberNext < gmp3m.lastDisplayed.iItemNum
			  else
				  // Button number is already displayed
			  {
				  gmp3m.iButtonNumber = iButtonNumberNext;
#ifdef NO_C_STDLIB
				  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
				  mp3_refresh( iButtonNumberNext );
			  } //  iButtonNumberNext > gmp3m.lastDisplayed.iItemNum
		  } // iTrackCurrent != iTrackNext
	  }
}
// ZORAN CDE0816 >>>
#endif

static void on_mp3_close(void)
{
  int iItemNum;
// <<< ZORAN CDE0521 : Clear time and track on exit
  char sz[2] = "";

#ifdef DISABLE
  // ZORAN CDE0626 : Support transition detection
  g_ui_bTimePending = FALSE;
#endif

  sc_SetBytes(SC_CURRENT_TIME_MSG_ADDR, 0, 2, (BYTE *)sz);
  sc_SetBytes(SC_TOTAL_TIME_MSG_ADDR, 0, 2, (BYTE *)sz);
// ZORAN CDE0521 >>>

#ifdef NO_C_STDLIB
  rtouts("\nMP3 menu closed");
#endif

  CLEAR_STATE( MP3M_STATE_LIST_INITIALIZED ); 

  // ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
	if((( g_disc_type == DEC_DISC_TYPE_JPG ))//&&(gcs.pstate == PST_STOP))
#ifdef JPG_DIGEST_ENABLED	//DM1019
		||(g_ui_active_menu_id == DIGEST_MENU_ID)
#endif
		)
//		if ( g_ui_active_menu_id == PICTURE_CD_MENU_ID )
	{
		if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
			close_slideshow();
		SAFELY_DELETE_PTR(gmp3m.pSlideshowTimer);
	}

	SAFELY_DELETE(gmp3m.pmssMenuTitle);
	SAFELY_DELETE(gmp3m.pmssDirName);
	SAFELY_DELETE(gmp3m.pmssTmpMsg);
	SAFELY_DELETE(gmp3m.pmssTmpString);
#endif // D_PICTURE_CD_ENABLED

#ifdef DISABLE
  for ( iItemNum = 0; iItemNum < MAX_DISPLAY_TRACKS; iItemNum++ )
  {
	SAFELY_DELETE(gmp3m.msbTrack[iItemNum]);
  }
#endif // DISABLE
}

static void init_list(void)
{
  int iItemNum;
  
  for ( iItemNum = 0; iItemNum < MAX_DISPLAY_TRACKS; iItemNum++ )
  {
	initListItem(iItemNum);
  }

  SET_STATE( MP3M_STATE_LIST_INITIALIZED );
  
  list_files(0);
}

static void init_directory( int iIndex )
{
#ifdef D_PICTURE_CD_ENABLED
  MS_WIDGET *msw = (MS_WIDGET *) gmp3m.pmssDirName;
#else
  MS_WIDGET *msw = (MS_WIDGET *) &mssDirName;
#endif // D_PICTURE_CD_ENABLED

  reset_directory_vars();

  gmp3m.iDirNum = iIndex;
  
  ((MS_STATIC *) msw)->text = dir_name_address(iIndex);

  MS_add_item((MS_DIALOG *) screen, msw, !C_FOCUSED);
}

void open_PCD(void)
{
#ifdef DISABLE
  // ZORAN CDE0626 : Support transition detection
  g_ui_bTimePending = FALSE;
#endif

  gmp3m.iDirNum = 0;

  // ZORAN CDE1010 : Clear all state bits on entry
#ifdef D_PICTURE_CD_ENABLED
  gmp3m.wState &= (MP3M_STATE_FIRST_TIME_SLIDESHOW|MP3M_STATE_SLIDESHOW_ACTIVE|MP3M_STATE_SLIDESHOW_PAUSED);	//Keep pause state when reopen picture menu
#else
  gmp3m.wState = 0;
#endif
#ifdef D_PICTURE_CD_ENABLED
  if(!(gmp3m.wState&MP3M_STATE_SLIDESHOW_ACTIVE))
  {
//	gmp3m.iButtonNumber = 0;
	Menu_update_buttonnumber(PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem ));
	gmp3m.pSlideshowTimer = NULL;
  }
#endif
  gmp3m.dirBounds.iFirstFileIndex = -1;
  gmp3m.dirBounds.iLastFileIndex = -1;
  gmp3m.dirBounds.iLastItemNum = -1;

  gmp3m.firstDisplayed.iFileIndex = -1;
  gmp3m.firstDisplayed.iItemNum = -1;
  
  gmp3m.lastDisplayed = gmp3m.firstDisplayed;
  
// ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
  gmp3m.pmssMenuTitle = NULL;
  gmp3m.pmssDirName = NULL;
  gmp3m.pmssTmpMsg = NULL;
  gmp3m.pmssTmpString = NULL;
//  gmp3m.pSlideshowTimer = NULL;
  gmp3m.Angle = 0;
//  gmp3m.Transition_mode = 0;
#endif // D_PICTURE_CD_ENABLED

  screen = MS_create_screen((MS_POS *)&screen_pos, screen_color, 0, on_mp3_close, layout);
// ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
  if ( g_ui_active_menu_id == PICTURE_CD_MENU_ID )
	  MS_override_user_op( (MS_WIDGET *) screen, mp3m_screen_user_op );
#endif // D_PICTURE_CD_ENABLED

#ifdef D_PICTURE_CD_ENABLED
	{
		MS_POS mspos = {MSS_TITLE_X, MS_LINE_0, MP3M_MSS_TITLE_WIDTH, MS_LINE_HEIGHT};
		if ( g_ui_active_menu_id == PICTURE_CD_MENU_ID )
			mspos.w = PCDM_MSS_TITLE_WIDTH;
		gmp3m.pmssMenuTitle = MS_create_static(&mspos, I_COLOR,
										

⌨️ 快捷键说明

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