📄 pcd_m.c
字号:
if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
{
PM_SetPlaybackMode((BYTE) PM_PLAYBACK_NORMAL);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
}
}
void restore_background()
{
// ZORAN CDE1003 : clear OSD before drawing menu
OSD_TurnOff();
if(gmp3m.Transition_mode)
DEC_Clear_Ref_Buff(3);
// ZORAN CDE1005 : Don't draw the logo to test if memory mapping changes
ie_send( IE_CORE_STOP ); //DM1012 fix some times the logo can not display well and OSD mem Allocation wrong.
//DEC_FrameDisplay(&power_up_logo); //DM1012
// ZORAN CDE1010 : Experimental to restore the background
// ie_send( IE_CORE_PLAY ); //DM1012
}
void close_image( void )
{
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
close_slideshow();
CLEAR_STATE( MP3M_STATE_IMAGE_OPEN | MP3M_STATE_SLIDESHOW_PAUSED | MP3M_STATE_STATUS_ACTIVE );
restore_background();
#ifdef D_PICTURE_CD_ENABLED
if( ( g_ui_active_menu_id != PICTURE_CD_MENU_ID )&& ( g_disc_type == DEC_DISC_TYPE_JPG ) )
close_menu();//DM1024
else
if( g_disc_type != DEC_DISC_TYPE_JPG )
#endif
{
MS_dialog_display( (MS_DIALOG *) screen );
mp3_refresh_track();
}
}
void display_image( int iImageNumber )
{
if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
{
ie_send( IE_CORE_STOP );//DM1106 Abort playback first...
ie_send( IE_CORE_PLAY );
}
else
ie_send_ex( IE_CORE_JPG_GOTO_ENTRY, (void *) iImageNumber );//Use core_jpg_goto_entry instead of core_goto_enry
}
#define SZ_PICTURE_NAME_LABEL "Picture: "
#define SZ_PICTURE_NAME_LABEL_LENGTH 9
#define MAX_SZ_SIZE ( SZ_PICTURE_NAME_LABEL_LENGTH + 1 )
#define MSS_PICTURE_NAME_LABEL_X 0
#define MSS_PICTURE_NAME_LABEL_WIDTH (SZ_PICTURE_NAME_LABEL_LENGTH * MP3M_FONT_WIDTH)
#define MSS_PICTURE_NAME_LABEL_POS { MSS_PICTURE_NAME_LABEL_X, MS_LINE_0, MSS_PICTURE_NAME_LABEL_WIDTH, MS_LINE_HEIGHT }
#define MSS_FILENAME_X (MSS_PICTURE_NAME_LABEL_X + MSS_PICTURE_NAME_LABEL_WIDTH)
#define MSS_FILENAME_WIDTH ((MAX_SZ_BUFF_SIZE - 1) * MP3M_FONT_WIDTH)
#define MSS_FILENAME_POS {MSS_FILENAME_X, MS_LINE_0, MSS_FILENAME_WIDTH, MS_LINE_HEIGHT}
#define MSS_FILECOUNT_X (MSS_FILENAME_X + MSS_FILENAME_WIDTH)
#define MSS_FILECOUNT_WIDTH ( (1 + MAX_TRACK_DIGITS + 1 + MAX_TRACK_DIGITS + 1) * MP3M_FONT_WIDTH)
#define MSS_FILECOUNT_POS {MSS_FILECOUNT_X, MS_LINE_0, MSS_FILECOUNT_WIDTH, MS_LINE_HEIGHT}
//
// Display "Picture:", picture name, (number/total) on OSD
//
void display_image_status( void )
{
MS_POS mspos = MSS_PICTURE_NAME_LABEL_POS;
MS_STATIC *pmss;
char sz[MAX_SZ_SIZE];
// Display "Picture:"
strcpy( sz, SZ_PICTURE_NAME_LABEL );
pmss = MS_create_static( &mspos, I_COLOR, sz, MS_ASCII );
MS_SET_JUST( pmss, ALIGN_LEFT_PAD );
MS_display((MS_WIDGET *) pmss );
mspos.x = MSS_FILENAME_X;
mspos.w = MSS_FILENAME_WIDTH;
pmss->widget.pos = mspos;
pmss->widget.attr |= MS_STRING_ON_SC;
pmss->text = file_name_address( SI_CDDA_TRACK_NUM - 1 );
MS_display((MS_WIDGET *) pmss );
// Display (number/total)
mspos.x = MSS_FILECOUNT_X;
mspos.w = MSS_FILECOUNT_WIDTH;
pmss->widget.pos = mspos;
pmss->widget.attr &= ~MS_STRING_ON_SC;
sz[0] = '(';
track_cur_tot_to_str( SI_CDDA_TRACK_NUM, SI_MP3_MAX_TRACK_NUM, &sz[1], NULL );
{
unsigned char ucLength = strlen(sz);
strcpy( &sz[ucLength], ")");
}
pmss->text = sz;
MS_display((MS_WIDGET *) pmss );
SAFELY_DELETE( pmss );
}
void open_image_status( void )
{
display_image_status();
SET_STATE( MP3M_STATE_STATUS_ACTIVE );
}
void prev_image( void )
{
int iTrackPrev = BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) - 1;
if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
{
gmp3m.iButtonNumber = TRACK_TO_BUTTON_NUMBER(PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem -2));
iTrackPrev = PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem -2 );
}
if ( iTrackPrev > 0 )
{
display_image( iTrackPrev );
if ( IS_STATE(MP3M_STATE_STATUS_ACTIVE) )
display_image_status();
// Synchronize the list with the new track number
// This isn't a problem when the image is open because the list
// functions don't refresh the screen in that state
list_goto_track(iTrackPrev);
}
}
#ifdef ICON_IN_THUMBNAIL_MENU
extern const DEC_FRAME THUMBNAIL_logo;
#endif
void next_image( void )
{
int iTrackNext = BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) + 1;
if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
{
gmp3m.iButtonNumber = TRACK_TO_BUTTON_NUMBER(PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem ));
iTrackNext = PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem );
}
if ( iTrackNext <= SI_MP3_MAX_TRACK_NUM )
{
display_image( iTrackNext );
if ( IS_STATE(MP3M_STATE_STATUS_ACTIVE) )
// Refresh the image status
display_image_status();
// Synchronize the list with the new track number
// This isn't a problem when the image is open because the list
// functions don't refresh the screen in that state
list_goto_track(iTrackNext);
}
else{
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
{
if(PM_IsRepeatAll())
{
gmp3m.iDirNum = 0;
gmp3m.iButtonNumber = 1;
gmp3m.dirBounds.iFirstFileIndex = -1;
gmp3m.dirBounds.iLastFileIndex = -1;
gmp3m.dirBounds.iLastItemNum = -1;
gmp3m.firstDisplayed.iFileIndex = -1;
gmp3m.firstDisplayed.iItemNum = -1;
iTrackNext = 1;
gns.cdda.m_CurrPosition.iPlaylistItem = 1;
display_image( iTrackNext );
}
}
{
BYTE timeout = 100;
close_image();
while( (gcs.pstate != PST_STOP ) && timeout ){
usleep(10000);
timeout--;
}
#ifdef ICON_IN_THUMBNAIL_MENU
#ifdef _DEBUG
DEC_FrameDisplay(&power_up_logo);
#else
DEC_FrameDisplay(&THUMBNAIL_logo);
#endif
DEC_SetDiskType(DEC_DISC_TYPE_JPG);//DM1121
#endif
ui_start_menu( DIGEST_MENU_ID );
}
}
}
void close_image_status( void )
{
CLEAR_STATE( MP3M_STATE_STATUS_ACTIVE );
mp3m_erase_menu();
}
#define MP3M_SLIDESHOW_TICKS CALC_TICKS( 5 * UNITS_SECONDS )
#define MP3M_SLIDESHOW_TRANSTICKS CALC_TICKS( 1 * UNITS_SECONDS ) //DM1129 for slide show special case
void advance_slideshow( struct oTimer *pTimer )
{
next_image();
// Must test this state because next_image might return to the menu
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
timer_start(pTimer);
}
void slideshow_handle_timeout( struct oTimer *pTimer )
{
gmp3m.pSlideshowTimer->m_wTimeoutCount = MP3M_SLIDESHOW_TICKS; //DM1129 reset timer counter
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) && !IS_STATE(MP3M_STATE_SLIDESHOW_PAUSED) &&!PM_IsRepeatSingle())//Add one more condition for repeat single
{
if((gmp3m.Transition_mode)&&(!IS_STATE(MP3M_STATE_PREPARE_R1DATE))) //DM1129 Tran is ON
{
if(gcs.pstate == PST_STILL)
{
ie_send( IE_CORE_JPG_START_COPY );//DM1129 start copying
DEC_WaitCopyingFinish();//DM1130 wait till copying finished
}
else
{
gmp3m.pSlideshowTimer->m_wTimeoutCount = MP3M_SLIDESHOW_TRANSTICKS;
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
timer_start(pTimer);
return;
}
}
CLEAR_STATE( MP3M_STATE_PREPARE_R1DATE );
advance_slideshow(pTimer);
}
else //DM1025 restart timer
{
// Must test this state because next_image might return to the menu
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
timer_start(pTimer);
if(gmp3m.Transition_mode) //DM1129 Tran is ON
if(gcs.pstate == PST_STILL)
ie_send( IE_CORE_JPG_START_COPY );//DM1129 start copying
}
}
void open_image( void )
{
SET_STATE( MP3M_STATE_IMAGE_OPEN );
#ifdef D_PICTURE_CD_ENABLED
if( ( g_ui_active_menu_id != PICTURE_CD_MENU_ID )&& ( g_disc_type == DEC_DISC_TYPE_JPG ) )
close_menu();//DM1024
else
#endif
mp3m_erase_menu();
}
//ZORAN DM1018 implement PICTRUE CD Browser
#define JPG_MAX_ANGLE 3
#define JPG_MAX_TRANS 6//12
//#define UICC_ANGLE 0x088
//#define UICC_LR 0x084
//#define UICC_SKIPF 0x00F
//#define UICC_SKIPB 0x00E
void rotate_image( void )
{
int iTrackNext = BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) ;
if(key_press_again(UICC_ANGLE))
{
if(gmp3m.Angle++ >= JPG_MAX_ANGLE)
gmp3m.Angle = 0;
if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
{
if(gcs.pstate == PST_STILL)
(gns.cdda.m_CurrPosition).iPlaylistItem--;
gmp3m.iButtonNumber = TRACK_TO_BUTTON_NUMBER(PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem ));
iTrackNext = PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem );
}
else
if(gcs.pstate == PST_STILL)
(gns.cdda.m_CurrPosition).iPlaylistItem--;
ie_send_ex( IE_CORE_ANGLE_SELECTION , (void *) gmp3m.Angle);
display_image( iTrackNext );
// Must test this state because next_image might return to the menu
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
timer_start( gmp3m.pSlideshowTimer );
}
disp_ui_tmp_string(gmp3m.Angle,UICC_ANGLE);
}
void trans_image( void )
{
if(key_press_again(UICC_LR))
{
DWORD dCmd;
DWORD d_Setting = TRUE;
if(gmp3m.Transition_mode++ >= JPG_MAX_TRANS)
{
gmp3m.Transition_mode = 1;//adam1221: change from mode 0 to 1
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) ) //DM1130
CLEAR_STATE( MP3M_STATE_PREPARE_R1DATE );
}
else
{
d_Setting = FALSE;
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) ) //DM1130
if(gmp3m.Transition_mode == 1)
SET_STATE( MP3M_STATE_PREPARE_R1DATE );
}
dCmd = (((DWORD)PS_UPDATE_JPG_VIDBUF_SETTING)<<16)
+ (DWORD)(d_Setting);
k_ie_send_ex(IE_CORE_UPDATE_PS, (void *)dCmd);
ie_send_ex( IE_CORE_TRANS_SELECTION , (void *) gmp3m.Transition_mode);
}
disp_ui_tmp_string(gmp3m.Transition_mode,UICC_LR);
}
//ZORAN DM1018
extern BOOL is_icon_action;
void open_slideshow( void )
{
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
open_image();
if ( gmp3m.pSlideshowTimer == NULL )
{
gmp3m.pSlideshowTimer = timer_create( MP3M_SLIDESHOW_TICKS, slideshow_handle_timeout );
}
timer_install( gmp3m.pSlideshowTimer );
SET_STATE( MP3M_STATE_SLIDESHOW_ACTIVE );
timer_start( gmp3m.pSlideshowTimer );
{// ZORAN CDE1018 : Moved from mp3m screen_user_op
int iButtonNumber;
MS_WIDGET *pmsw ;
pmsw = FOCUSED_WIDGET(screen);
iButtonNumber = button_number(pmsw);
if ( iButtonNumber >= 0 )
{
gmp3m.iButtonNumber = iButtonNumber;
#ifdef NO_C_STDLIB
rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
}
}
if (is_icon_action){
gmp3m.iButtonNumber = 0; // DZ1121 Need add more condition
is_icon_action = FALSE;
track_action( 1 );
}else
track_any_action();
}
void pause_slideshow( void )
{
ui_tmp_msg( S_PAUSE );
SET_STATE( MP3M_STATE_SLIDESHOW_PAUSED );
gcs.pstate == PST_PAUSE; //DM1116 for VFD update
}
static MS_UOP mp3m_screen_user_op( MS_WIDGET *pmsw, MS_UOP uop, char param )
{
switch ( uop )
{
case MS_UOP_SKIPF:
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
open_image();
next_image();
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
timer_start( gmp3m.pSlideshowTimer );
uop = MS_UOP_NOP;
#ifdef D_PICTURE_CD_ENABLED
if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
{
close_image_status();
}
if (g_disc_type == DEC_DISC_TYPE_JPG)
disp_ui_tmp_string(0,UICC_SKIPF);
#endif
break;
case MS_UOP_SKIPB:
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
open_image();
prev_image();
if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
timer_start( gmp3m.pSlideshowTimer );
uop = MS_UOP_NOP;
#ifdef D_PICTURE_CD_ENABLED
if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
{
close_image_status();
}
if (g_disc_type == DEC_DISC_TYPE_JPG){
if ((BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) - 1) >0 )
disp_ui_tmp_string(1,UICC_SKIPB);
else
disp_ui_tmp_string(0,UICC_SKIPB);
}
#endif
break;
case MS_UOP_STATUS:
if ( IS_STATE(MP3M_STATE_IMAGE_OPEN) )
{
if ( IS_STATE( MP3M_STATE_STATUS_ACTIVE ) )
{
close_image_status();
}
else
{
open_image_status();
}
} // IS_STATE(MP3M_STATE_IMAGE_OPEN)
uop = MS_UOP_NOP;
break;
case MS_UOP_PAUSE:
if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
{
close_image_status();
}
if ( !IS_STATE( MP3M_STATE_SLIDESHOW_PAUSED ) &&IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE))
{
pause_slideshow();
uop = MS_UOP_NOP;
}
break;
case MS_UOP_PLAY:
{
if ( IS_STATE(MP3M_STATE_SLIDESHOW_PAUSED) )
{
CLEAR_STATE( MP3M_STATE_SLIDESHOW_PAUSED );
advance_slideshow( gmp3m.pSlideshowTimer );
uop = MS_UOP_NOP;
}
else
if ( !IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
{
if(IS_STATE(MP3M_STATE_IMAGE_OPEN)) //DM1116 if is open display next one.
Menu_update_buttonnumber((gns.cdda.m_CurrPosition).iPlaylistItem++);
open_slideshow();
#ifdef DISABLE
uop = MS_UOP_ENTER;
#else
/* ZORAN CDE1018 : Moved to open_slideshow
{
int iButtonNumber;
pmsw = FOCUSED_WIDGET(screen);
iButtonNumber = button_number(pmsw);
if ( iButtonNumber >= 0 )
{
gmp3m.iButtonNumber = iButtonNumber;
#ifdef NO_C_STDLIB
rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
}
}
track_any_action();
*/
uop = MS_UOP_NOP;
#endif // DISABLE
}
else
uop = MS_UOP_NOP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -