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

📄 play.c

📁 ESS3890+SL原代码(1*16内存)
💻 C
📖 第 1 页 / 共 5 页
字号:
    current_key = STOP_KEY;    play_state = ENTRY_STATE;}/*------------------------------------------------------------------------  Function: play_item  Parameters:      playitem_number: The playitem_number is from play_item in                       selection list or play list.  Description:      This function will call proper function to play motion picture,      segment item or entry item depending on the value of      playitem_number.------------------------------------------------------------------------*/static void play_item(int playitem_number){    /* reset entry variables. The values are chosen to no index at init */    picture_type = 0xe0;    track_entry_beg = 1000;    track_entry_end = 0;    track_entry_number = 1;    next_entry_time = xMAX_CDTIME;/* set it a very big number, so we want                                   update the lcd index number if we are                                   not in play entry in track mode. */    /* reset a2b if a2b flag is on */    if (repeat_a2b) {/* REPEAT_AB_START or REPEAT_AB_END */	repeat_a2b = REPEAT_AB_OFF;	panel_repeat_ab(REPEAT_AB_OFF);    }        /* remember the play item */    cur_vcd_playitem = playitem_number;    /* 2..99 -> play track */    if ((playitem_number > 1) && (playitem_number < 100)) {        play_track(playitem_number - 1); /* convert to 1 base */        cur_track_number = playitem_number - 1; /* for display purpose */    } else if ((playitem_number > 99) && (playitem_number < 600)) {        play_entry(playitem_number - 99); /* 100..599 -> play entry */    } else if ((playitem_number > 999) && (playitem_number < 2980)) {        play_segment(playitem_number - 999); /* 1000..2979 -> play segment */    } else {        /* wrong item number. We go to the PLAY_WAIT_TIME_STATE and	   hopefully, we will get good play item next time after	   time expired or user inputs.*/	play_state = PLAY_WAIT_TIME_STATE;    }}/*------------------------------------------------------------------------  Function:  Parameters:  Description: This function checks if we need to adjust the                play_item_end_time.------------------------------------------------------------------------*/void check_playing_time(){    int mmssff;    /* if we are playing item from play list, we need to check the */    /* playing time.                                               */    if ((cur_list_state ==  PLAY_LIST_STATE) &&        (play_list_playing_time > 0)) {        mmssff = logical2physical(5*(play_list_playing_time));        play_item_end_time =            adjCDtime(play_item_start_time, mmssff, 1);    }}/*------------------------------------------------------------------------  Function: play_track  Parameters:      track_number: The track number to be played. The track number is          1 base. For VideoCD, the mpeg track number starts at 2 is          converted to 1 base. Fox example: If we want to play track 2          on video CD, the track_number should be 1.  Description:      It plays an MPEG audio/video track.------------------------------------------------------------------------*/static void play_track(int track_number){    int tmp;    /* reset bad audio frame counter to zero at the beginning */       bad_track_len = 0;    /* reset picture_type to normal */    picture_type = 0xe0;    AUD_n_frames = 0;#ifdef ANTI_SHOCK    AUD_n_samples = 0;    /* set some parameters back to default */    vcx_bitstream_type = MPEG1_PS;    VBV_ABV_default();#endif    /* update panel */    panel_play_track(track_number);    /* 15-08-96 Alger */    CurrentTrackTime = get_track_time(track_number, NULL, NULL);    dsa_reset();    /* get track info */    get_track_info(track_number, &play_item_begin_time,                   &play_item_real_end_time,                   &play_item_type);    play_item_start_time = play_item_begin_time;    play_item_end_time = play_item_real_end_time;#ifdef MIC_RECORD    REC_begin_msf = REC_end_msf = play_item_start_time;    rec_msf[0] = rec_msf[1] = rec_msf[2] = REC_begin_msf;#endif    if (play_item_type == AUDIO_TRACK) {#ifdef LOGO4CDDA	/* for CDDA tracks in VCD disc */	if (!showingLogo #if 1 /* disable to show logo even when PBC-on */	    && !PBC_on#endif	    ) {	    show_still_pic();    	}#endif        } else {	/* find out whether the track contains entries */	if ((!PBC_on) && 	    (PLAY_vcd_type & (VCD_TYPE_11 | VCD_TYPE_20)) ) {	    track_entry_number = get_track_entries(track_number,						   &track_entry_beg,						   &track_entry_end);	    	    track_current_entry = track_entry_beg;	    	    if (!intro_mode && track_entry_number > 1) {		play_state = PLAY_ENTRY_LIST_STATE;				return;	    }	}	if (showingLogo) {	    /* clear all display frames of logo data */	    vcx_user_video_stream = 0xe0;	    vcx_VertSz = 288;	    DISP_change_resolution(352, 288);	    for (tmp=0; tmp<3; tmp++) {		DISP_paint_screen(COLOR_BLACK,0,tmp);	    }	    DISP_count = 0;	    showingLogo = 0;	}	    }    PRINTF(("track %d, start time %x, end time %x\n", track_number,       play_item_start_time, play_item_end_time));    /* if we are playing item from play list, we need to check the */    /* playing time.                                               */    check_playing_time();    /* set the play_end time to INTRO_TIME_MMSSFF */    if (intro_mode) {        tmp = adjCDtime(play_item_start_time, INTRO_TIME_MMSSFF, 1);        if (play_item_end_time >= tmp) {	    second_endCDtime = tmp;        }    }    if (VCD_ptr_resume_info->state == RESUME_RESTORE) {	restore_resume_track_time();    }    /* go to play */    play_item_mode = PLAY_INFO_STOP_MODE;    play_state = PLAY_NORMAL_STATE;    return;}#ifdef DATA_CD#ifdef JPEG_DGSTstatic void play_jpeg(int track_number){    int mmssff;#ifdef JPEG_DEC    extern long g_jpeg_filesize;#endif    STREAM_type = ((iso9660_file[track_number-1].loc)>>24) & 0x3f;#ifdef MP3    MPG_layer = 0;#endif#ifdef JPEG_DEC    is_jpeg = 0;#endif    /* Look for sequence header */    MPG_frames = 0;#ifdef XSEG1_ON_FLY    if (vcx_xseg_loaded != XSEG1_CODE) {        Decompress(xtra_s1_compress_data_start,                    (JPEG_globals_start<<2), XSEG1_DATA);	Decompress(xtra_s1_compress_text_start,		   dram_cached(JPEG_code_start), XSEG1_CODE);    }#endif /* XSEG1_ON_FLY */    /* jpeg display size: (180*576*3) DW */    DISP_END = JPEG_disp_end; #ifdef KARASC    KSC_mode = 0;#endif#ifdef REVERB    RVB_on |= RVB_MODE_SUPPRESS;#endif#ifdef EQUALIZER    EQ_mode = DAE_mode = DAE_mode_save = 0;#endif    JPG_start(1);    g_jpeg_filesize = iso9660_file[track_number-1].bsize;    vcx_bitstream_type = DATA_PS; /* data to VBV */     /* reset bad audio frame counter to zero at the beginning */    bad_track_len = 0;     /* reset picture_type to normal */    picture_type = 0xe0;     /* update panel */    panel_running_time(0);   /* clear up "CLOSE" message */    panel_play_track(track_number);     dsa_reset();     /* get track info */    play_item_begin_time = (iso9660_file[track_number - 1].loc & x00ffffff);    play_item_real_end_time = iso9660_file[track_number - 1].size;    play_item_start_time = play_item_begin_time;    play_item_end_time = play_item_real_end_time;    play_item_type = DATA_TRACK;#ifdef JPEG_THUMBNAIL    if ((STREAM_type == JPEG_ID) && JPG_digest) {        int jpg_thm_size = 0;        extern int g_jpeg_SOI;        g_jpeg_SOI = 0;        if (JPG_digest == 1 || JPG_digest == 2) {            getSectors(play_item_begin_time, 1, 2048);            JPG_check_thumbnail(2048, &jpg_thm_size);        }        /* reset for thm */        if (g_jpeg_SOI && jpg_thm_size) {            g_jpeg_filesize = g_jpeg_SOI + jpg_thm_size - 1;            play_item_end_time = adjCDtime(play_item_begin_time,                                           ((g_jpeg_filesize + 2047) >> 11),1);        }    }#endif    av_play_motion_video(play_item_start_time, play_item_end_time);     play_item_mode = PLAY_INFO_PLAYING_MODE;    return;}#endif /* JPEG_DGST */static void play_data_file(int track_number){    int mmssff, file_rec;#ifdef JPEG_DEC    extern long g_jpeg_filesize;#endif#ifdef MULTI_EXT_FILE    cur_file_rec = file_rec = track_to_rec(track_number); #else    file_rec = track_number - 1; /* index */#endif    STREAM_type = ((iso9660_file[file_rec].loc)>>24) & 0x3f;#ifdef MP3    MPG_layer = 0;#endif    /* Look for sequence header */    MPG_frames = 0;#ifdef MP3    if (STREAM_type == MP3_ID) {#ifdef JPEG_DEC        if(is_jpeg) {	    /* transition from jpeg to mp3 has garbage on screen */	    DISP_do_blank(); 	    /* then do DISP_END_DO_BLANK to bring back screen */        }	is_jpeg = 0;#endif        MP3_start();	DISP_END_DO_BLANK; /* OK to bring back display */	/* force to update for new MP3 file */	prev_sampling_frequency = -1;        MP3_VBR_gain = DEF_VBR_GAIN; /* Set to default value */#ifdef ANTI_SHOCK	ABV_gdptr = ABV_wrptr = ABV_rdptr = ABV_start;#endif        vcx_bitstream_type = MP3_PS; /* data to ABV */    }#endif /* MP3 */#ifdef WMA_DEC    if (STREAM_type == WMA_ID) {#ifdef JPEG_DEC	if(is_jpeg) {	    /* transition from jpeg to wma has garbage on screen */	    DISP_do_blank(); 	    /* then do DISP_END_DO_BLANK to bring back screen */	}        is_jpeg = 0;#endif        WMA_start();	DISP_END_DO_BLANK; /* OK to bring back display */        play_new_rom_file = 1;    	wma_smpl_num = 0;#ifdef WMA_CERT        {	    extern int MLP_dump;	    MLP_dump = 0;        }#endif#ifdef ANTI_SHOCK	ABV_gdptr = ABV_wrptr = ABV_rdptr = ABV_start;#endif        vcx_bitstream_type = MP3_PS; /* data to ABV */    }#endif /* WMA_DEC */#if (defined(JPEG_DEC) || defined(AVI_DEC))    if ((STREAM_type == JPEG_ID)#ifdef AVI_DEC        || (STREAM_type == AVI_ID)#endif        ) {#ifdef XSEG1_ON_FLY	if (vcx_xseg_loaded != XSEG1_CODE) {	    Decompress(xtra_s1_compress_data_start, 		       (JPEG_globals_start<<2), XSEG1_DATA);	    	    Decompress(xtra_s1_compress_text_start,		       dram_cached(JPEG_code_start), XSEG1_CODE);	}#endif /* XSEG1_ON_FLY */	/* jpeg display size: (180*576*3) DW */	DISP_END = JPEG_disp_end; #ifdef KARASC        KSC_mode = 0;#endif#ifdef EQUALIZER	EQ_mode = DAE_mode = DAE_mode_save = 0;#endif#ifdef AVI_DEC        if (STREAM_type == AVI_ID) {            AVI_start();            MP3_VBR_gain = 7680; /* Set to default value */            /*              * Trace AVI as MP3 data, so that data is going to ABV and we              * can parse it Video data and send to VBV, audio data directly              * transfer to PCM and send to PCM buffer.             */             vcx_bitstream_type = MP3_PS;         } else#endif        {            JPG_start(1);            jpeg_pause = 0;            g_jpeg_filesize = iso9660_file[file_rec].bsize;            vcx_bitstream_type = DATA_PS; /* data to VBV */#ifdef JPEG_THUMBNAIL            extern int g_jpeg_SOI;            g_jpeg_SOI = 0;#endif        }	/* For JPEG, clear menu if on */	if (CG_menu_on) CLEARALLOSD();    }#endif     /* reset bad audio frame counter to zero at the beginning */    bad_track_len = 0;     /* reset picture_type to normal */    picture_type = 0xe0;     /* update panel */    panel_running_time(0);   /* clear up "CLOSE" message */    panel_play_track(track_number);     /* "depresses" the specified button and redraws the menu if necessary */    track_to_mp3(cur_track_number);     dsa_reset();     /* get track info */    play_item_begin_time = (iso9660_file[file_rec].loc & x00ffffff);    play_item_real_end_time = iso9660_file[file_rec].size;    play_item_start_time = play_item_begin_time;    play_item_end_time = play_item_real_end_time;    play_item_type = DATA_TRACK;#ifdef MIC_RECORD    if(STREAM_type == MP3_ID){       REC_begin_msf = REC_end_msf = play_item_start_time;       rec_msf[0] = rec_msf[1] = rec_msf[2] = REC_begin_msf;    } else REC_mode = REC_OFF;#endif #ifdef GAMEBOY    if(STREAM_type == GAME_GB_ID) {#ifdef JPEG_DEC        is_jpeg = 0;#endif#ifdef REVERB	RVB_on |= RVB_MODE_SUPPRESS;#endif	gmby_start_time = play_item_begin_time;	gmby_sect_sum = play_item_real_end_time;	gmby_name_id = (iso9660_file[file_rec].loc>>24) & 0xff;	play_state = PLAY_GMBY_STATE;	return;    }#endif#ifdef ID3#ifdef USE_ID3_INFO    id3_str_index = 0;#endif    ID3_ABV_offset = 0; /* default..non-MP3 */    if (STREAM_type == MP3_ID) {        ID3_ABV_offset = ID3_detect(play_item_begin_time,                                    play_item_real_end_time, 2048);#ifdef USE_ID3_INFO        cd_stop = 0;        show_ID3(track_number);#endif	if (ID3_ABV_offset) {	    int tmp = 0;	    	    /* For ID3-V2.x tags larger than one sector we'll adjust	     * MP3 file's start time.	     */	    while (ID3_ABV_offset >= 2048) {		/* currently assume MP3 sector size is 2048B */		ID3_ABV_offset -= 2048;		tmp++;	    }	    ID3_ABV_offset >>= 2; /* Bytes to DWords */

⌨️ 快捷键说明

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