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

📄 ircmd_subtitle.c

📁 Sunplus 8202S source code.
💻 C
字号:
/**************************************************************************
 *                                                                        *
 *         Copyright (c) 2002 by Sunplus Technology Co., Ltd.             *
 *                                                                        *
 *  This software is copyrighted by and is the property of Sunplus        *
 *  Technology Co., Ltd. All rights are reserved by Sunplus Technology    *
 *  Co., Ltd. This software may only be used in accordance with the       *
 *  corresponding license agreement. Any unauthorized use, duplication,   *
 *  distribution, or disclosure of this software is expressly forbidden.  *
 *                                                                        *
 *  This Copyright notice MUST not be removed or modified without prior   *
 *  written consent of Sunplus Technology Co., Ltd.                       *
 *                                                                        *
 *  Sunplus Technology Co., Ltd. reserves the right to modify this        *
 *  software without notice.                                              *
 *                                                                        *
 *  Sunplus Technology Co., Ltd.                                          *
 *  19, Innovation First Road, Science-Based Industrial Park,             *
 *  Hsin-Chu, Taiwan, R.O.C.                                              *
 **************************************************************************/
/*--------------------------------------------------------------------------
|  File Name   :  ircmd_subtitle.c
|
|  Description :  realize subtitle function in IR subtitle key.
|
|  Version    :  0.1  
| 
| 
|  Rev	Date	        Author(s)      Status & Comments
|---------------------------------------------------------------------------------
|  0.1	2004/4/6        Terry         Creating
|  0.2  2004/8/4        Terry         modified
|--------------------------------------------------------------------------------*/

extern void sup_select_subtitles(int n);
extern void sup_select_channel_2(int chn);

#ifdef TWO_KEY_SWITCH_TWO_SUBTITLE  //added by wangwei,2004-9-29 17:25
extern int IDTWO;
extern int twoSubTTFlag;
#endif

#if defined( AVI_INTERNAL_SUP ) || defined( SUPPORT_MP4_SUBTITLE )  // 2004/09/17 yltseng
#include "avi_if.h"
UINT8   g_uiSubtitleKeyPressed = FALSE;

static inline void PrepareToLoadMP4InternalSubtitle()
{
    if( action_click && GetCurrentFileType() == CDROM_MP4 )
    {
        g_uiSubtitleKeyPressed = TRUE;

    #ifdef AVI_INTERNAL_SUP
        extern int file_set_supic_stream(int sup_strm_num);
        
        if( file_set_supic_stream( NP_SPSTN & 0x3f ) )
            g_uiSubtitleKeyPressed = FALSE;
        #ifndef SUPPORT_MP4_SUBTITLE
        else    
            NP_SPSTN &= (~0x40);
        #endif
    #endif
    }
}
/**************************************************************************
 *  Function Name: PrepareToLoadMP4ExternalSubtitle                       *               
 *  Purposes:                                                             *
 *     load external subtitle.                                            *
 *  Descriptions:                                                         *                                                                       *
 *  Arguments:                                                            *
 *    NP_SPSTN: current subtitle number variable.                         *
 *              numerical value from 0x40.                                *         
 *                                                                        *
 *  Returns:     NONE                                                     *
 *  See also:    NONE                                                     *
 **************************************************************************/

void PrepareToLoadMP4ExternalSubtitle()
{
    #ifdef SUPPORT_MP4_SUBTITLE
    // 2004/01/31 yltseng, if DiscType is CDROM, then we need to wait until current packet is finished,
    // that is, we have to wait until !is_dvddsp_hw_busy() and ( do_cd == do_cd_sync )
    // for DVDROM, it's easier, we just wait until !is_dvddsp_hw_busy()
    
    extern int do_cd_sync(void);
    extern BYTE DiscType;
    if( DiscType == CDDVD || do_cd == do_cd_sync )
    {
        if( g_uiSubtitleKeyPressed )
        {
            g_uiSubtitleKeyPressed = FALSE;     // 2004/09/19 yltseng, [note] don't change the code sequence
            UINT32 uiStream = ( NP_SPSTN & 0x40 ) ? ( NP_SPSTN & 0x3f ) : 0xffff;
            if( !SetAVISubTitleStream( uiStream ) )
                NP_SPSTN &= (~0x40);
        }
    }
    #endif
}
/**************************************************************************
 *  Function Name: set_sub_title_Ns                                       *
 *  Purposes:                                                             *
 *      get subtitle total number .                                       *
 *  Descriptions:                                                         *
 *  Arguments:                                                            *
 *      dAv_SPST_Ns: subtitle total number variable.                      *
 *                                                                        *
 *  Returns:     NONE                                                     *
 *  See also:    NONE                                                     *
 **************************************************************************/
void set_sub_title_Ns(UINT8 Ns)
{
    pDSV->dAv_SPST_Ns=Ns;
}

#else

static inline void PrepareToLoadMP4InternalSubtitle()   {}
inline void PrepareToLoadMP4ExternalSubtitle()          {}

#endif
/**************************************************************************
 *  Function Name: sel_2nd_subtitle                                       *
 *  Purposes:                                                             *
 *       realize two subtitle switch.                                     * 
 *  Descriptions:                                                         *
 *       realize two subtitle switch,but there is a fixed connection      *
 *       between subtitle 1and subtitle 2,unskillfully.                   *                      
 *  Arguments:                                                            *
 *       id: get subtitle number.  for example,0x40:ch1.                  *
 *                                                                        *
 *  Returns:     NONE                                                     *
 *  See also:    NONE                                                     *
 **************************************************************************/

#ifdef TWO_SUBTITLE//terry,2004/8/4 09:39AM
#ifndef TWO_KEY_SWITCH_TWO_SUBTITLE  //modified by wangwei,2004-9-29 17:04
void sel_2nd_subtitle(int id2)
{
    int id1=NP_SPSTN&0x3f;
    
    id2=id2&0x3f;    
    if(id2>=pDSV->dAv_SPST_Ns) id2=0;    
    
    if(pDSV->dAv_SPST_Ns>1)
    {
      if(id1 != id2)
      {
        sup_select_subtitles(2);            
        sup_select_channel_2(0x20+id2);                
      }else
      {
        sup_select_subtitles(1);            
      }
    }    
}
#endif //TWO_KEY_SWITCH_TWO_SUBTITLE
#endif
/**************************************************************************
 *  Function Name: ircmd_sub_picture                                      *
 *  Purposes:                                                             *
 *     realize subtitle switch function in IR subtitle key.               *
 *  Descriptions:                                                         *
 *  Arguments:                                                            *
 *    id     : subtitle number id.                                        *
 *    timer  : fix time length that contents show on display.             *                                        *
 *    id_str : str id.                                                    *
 *                                                                        *
 *  Returns:     NONE                                                     *
 *  See also:    NONE                                                     *
 **************************************************************************/

void ircmd_sub_picture(void)
{
    int id=0,timer,id_str;


#ifdef SUPPORT_MIDI_MENU_SEL  //xlluo for midi title 
        if (Is_MIDI_STATE())
        {
		invalid_key();
		return;
        }
#endif
#ifdef SUPPORT_MIDIDISK_TITLE
        if (bIsPlayMidiTitle)//xlluo for midi title
        {
		invalid_key();
		return;
        }
#endif
#ifdef	INVALID_SUBPICTURE_WHEN_SVCD	//wuxiaofeng 2004-03-23
	if(cd_type_loaded==CDSVCD)
	{
		invalid_key();
		return;
	}
#endif//#ifdef	INVALID_SUBPICTURE_WHEN_SVCD

    /*
	#if defined(ADJUSTING_ACTION_VALID_RIGHT_NOW)
	#ifdef NEWSTYLE_WINDOW
		if ( (full_scrn&MESSAGE) && (action_click==2) )	// alan, 2003/8/28 05:32PM
			action_click = 0;
		else
	#endif
    action_click = 1; //Jeff 20030506
    #endif
    */
#ifdef	JPEG_EFFECT_MODE_USE_SUBTITLE//zhaoyanhua add 2003-12-24 9:50
	if(cd_type_loaded == CDROM)
	{
		if (Is_JPEG_PLAY_STATE())
		{
#ifdef JPG_EFFECT
			jpeg_effect_toggle();
#endif
		}
		else
			invalid_key();
		
		return;
	}
#endif
    
#ifdef SUPPORT_MP4//terry,2004/4/6 08:05PM
#ifdef VOB_SUBTITLE
    if( (cd_type_loaded==CDROM)&&(GetCurrentFileType()!=CDROM_MP4)&&(GetCurrentFileType()!=CDROM_MPG) )
#else
    if( (cd_type_loaded==CDROM)&&(GetCurrentFileType()!=CDROM_MP4) )
#endif
    {
		invalid_key();
		return;
    }    
#endif
    
    //Jeff change, 20031006, fix press IR(GOTO) sub-picture will be "automatic" toggled
    #if defined(ADJUSTING_ACTION_VALID_RIGHT_NOW)
    	#ifdef NEWSTYLE_WINDOW
        	if ( (full_scrn&MESSAGE) && (action_click==2) )	 
        		action_click = 0;
        	else
      	#endif
        action_click = 1; //Jeff 20030506
    #else
        #ifdef NEWSTYLE_WINDOW
		    if ( (full_scrn&MESSAGE) && (action_click==2) )	// alan, 2003/8/28 05:32PM
			    action_click = 0;
	    #endif
    #endif

#ifdef VOB_SUBTITLE
	if(GetCurrentFileType()==CDROM_MPG) {
		id=Subp_stream_Chg_VOB(action_click);
	}
	else	
#endif    
    if(bDiscType == CD_OKO) { //Jeff 20020610
        invalid_key();
        return;
    } else
		//chg & check subtitle stream id
		if( !(!DVD_check_state()&&(cd_type_loaded==CDDVD)) )
		{
            #ifdef NEW_SEARCH_OSD  //yw 021007
            if(key_up_down==0)
				//id=Subp_stream_Chg(action_click,-1); //Jeff 20021008
				id=Subp_stream_Chg(action_click,1); //nono 2-11-22 11:19
            else
            #endif
				id=Subp_stream_Chg(action_click,1); //Jeff 20021008

		   printf("chg sub-title\n");
		}

        printf("pDSV->dAv_SPST_Ns:%x\n",pDSV->dAv_SPST_Ns);
		//setting osd data
        //id : 0x40:Ch1, 0x41:Ch2, 0x42:Ch3, 0x43:Ch4, 0xbf:off
		if( (id&0x40)&&( (id&0x3f)<pDSV->dAv_SPST_Ns ) ) 
		{
            timer=((id&0x3f)<<8)|0x01;
#ifdef TWO_SUBTITLE//terry,2004/8/4 09:39AM
        #ifndef TWO_KEY_SWITCH_TWO_SUBTITLE  //modified by wangwei,2004-9-29 17:02
            sel_2nd_subtitle(id+1);
        #else          
        if(action_click)
        {
            if(IDTWO==(NP_SPSTN&0x3f))  //same one,close the 2nd subtitle.
            {
                sup_select_subtitles(1);
            twoSubTTFlag=1;
        }
            else if(IDTWO>=pDSV->dAv_SPST_Ns)  //off,close the 2nd subtitle.
        {
            sup_select_subtitles(1);
                twoSubTTFlag=0;
        }
            else if(IDTWO!=-1)
        {
                sup_select_subtitles(2);
                twoSubTTFlag=2;
            }
        }
        #endif//TWO_KEY_SWITCH_TWO_SUBTITLE
        
#endif            
            id_str=0x20;       
		}else
		{
            id_str=STR_OS_OFF;
            timer=1;
		}

        PrepareToLoadMP4InternalSubtitle();     // 2004/09/17 yltseng

		//show osd str
		if(id)
        {
#ifdef OSDISP			//2004/10/21 wjzhang , sphe1000B(stb-dvd): osd display
            if(id==0xbf|id==0x7e)
				OSD1000ISP_STATUS(OSDISP_TITLE_OFF, OSDIR_SUB_TITLE);
			else
                OSD1000ISP_STATUS(((pDSV->dAv_SPST_Ns)<<4)|(id+1&0x0f), OSDIR_SUB_TITLE);
#endif
            //PrintOsdMsg(STR_OS_SUBTITLE|(id_str<<8),REGION1,timer,4);
            PrintOsdMsg(STR_OS_SUBTITLE|(id_str<<OSDSTR_ID_TOTL_BIT),REGION1,timer,4);
        }
        else {
    #ifdef NEWSTYLE_WINDOW
		if(full_scrn&MESSAGE)//xyy 2003-7-29 15:08
			psprintf(linebuf,"%s",_OsdMessegeFont1[osd_font_mode][STR_OS_NONE]);
		else
    #endif
            invalid_key();
        }
    #ifdef NEWSTYLE_WINDOW
		if(full_scrn&MESSAGE)//xyy 2003-7-29 15:08
            updateSubtitle();
    #endif
}

#ifdef DOUBLE_TITLE //susu 2003-8-22 18:44
void ircmd_double_picture(void)
{
	if(full_scrn&DOUBLETITLE) 
	{
		exit_double_title();
	}
	else
	{
		if( !(!DVD_check_state()&&(cd_type_loaded==CDDVD)) )
		{
			full_scrn=DOUBLETITLE;
			exe_double_title();
			
			//Maoyong added for IR U/D/L/R/Sel proc func setting 2004-9-24 9:13
            SetFullscrnCmdFuncPtr( double_title_func_up, double_title_func_down, double_title_func_left,
                                   double_title_func_right, double_title_func_select);
		}
		else
	        invalid_key();
	}

}
#endif



⌨️ 快捷键说明

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