?? ir_drv.c
字號:
case(VOD_LOGO_14):
return vod_logo_14(rx);
break;
case(VOD_LOGO_15):
return vod_logo_15(rx);
break;
case(VOD_LOGO_111):
return vod_logo_111(rx);
break;
case(VOD_LOGO_121):
return vod_logo_121(rx);
break;
case(VOD_LOGO_13_NO_MUS):
return vod_logo_13_music_not_found(rx);
break;
case(VOD_LOGO_141):
return vod_logo_141(rx);
break;
case(VOD_LOGO_1411):
return vod_logo_1411(rx);
break;
case(VOD_LOGO_151):
return vod_logo_151(rx);
break;
case(VOD_LOGO_1511):
return vod_logo_1511(rx);
break;
case(VOD_LOGO_15_NO_PIC):
return vod_logo_15_pic_not_found(rx);
break;
case(VOD_LOGO_PASSWORD):
return vod_logo_password(rx);
break;
case(VOD_LOGO_PASSWORD_NO_FONTLIB):
return vod_logo_password_no_fontlib(rx);
break;
case(VOD_LOGO_SETUP):
return vod_logo_setup(rx);
break;
case(VOD_LOGO_IP_CLEAR):
return vod_logo_ip_clear(rx);
break;
case(VOD_LOGO_NETWORK_CHECK):
return vod_logo_network_check(rx);
break;
case(VOD_LOGO_COPYRIGHT):
return vod_logo_copyright(rx);
break;
#ifdef HOTEL_IPTV_SYSTEM
case(VOD_LOGO_RETURN_HOTEL_SYSTEM):
return vod_logo_return_hotel_system(rx);
break;
#endif
default:
return 0;
break;
}
}
/*******************************************************************
如果在視頻播放的狀態下
********************************************************************/
#include "framebuf_if.h"
BYTE vod_video_ir(UINT16 rx){
//如果是GOTO
if(vod_isVideo & VOD_VIDEO_Y_GOTO){
return vod_video_ir_goto(rx);
}
//如果是收費視頻
if(vod_isVideo & VOD_VIDEO_Y_CHARGE){
return vod_video_ir_ischarge(rx);
}
//如果是詢問是否要退出視頻
if(vod_isVideo & VOD_VIDEO_Y_ISEXIT){
return vod_video_ir_isexit(rx);
}
//在進入視頻播放主函數前,則不執行以下代碼
if(vod_video_play_state == VOD_VIDEO_STOP)
return 0;
//返回
if(rx == VOD_IRC_RETURN){
//畫詢問框,詢問客戶,是否要退出視頻
vod_osd_video_isexit();
vod_isVideo |= VOD_VIDEO_Y_ISEXIT;
return 1;
}
//放大,按鍵'電視/VOD'
if(rx == VOD_IRC_ZOOM){
//放大
ircmd_zoom();
vod_osd_video_display(VOD_VIDEO_ZOOM);
printf_w("###vpp_zoom = %d\n",vpp_zoom);
return 0;
}
//暫停
if(rx == VOD_IRC_PAUSE_PLAY){
/*
// 如果還沒付款,則不進行以下動作
if(vod_video_isCharges == VOD_VIDEO_CHARGES_WAIT_FOR_PAID)
return 0;
*/
//暫停播放
if(play_state == VCD_STATE_NORMAL){
//run_pause(1);
//avd_pause_on();
Pause();
play_state=VCD_STATE_PAUSE;
}
//繼續播放
else{
//avd_pause_off();
//Continue();
chg2normal_play(FAST2NORM|PAUSE2NORM|SLOW2NORM,REALPLAY);
play_state=VCD_STATE_NORMAL;
}
vod_osd_video_display(VOD_VIDEO_PAUSE);
return 0;
}
//停止
//音量-
if(rx == VOD_IRC_VOLUME_DN){
if(vod_video_time_display_state){
//清除靜音
user_mute = 0;
if(audio_volume<=0)
audio_volume = 0;
else
audio_volume --;
AUDIF_Set_Volume(audio_volume);
}
vod_osd_video_display(VOD_VIDEO_VOLUME);
return 0;
}
//音量+
if(rx == VOD_IRC_VOLUME_UP){
if(vod_video_time_display_state){
//清除靜音
user_mute = 0;
if(audio_volume>=15)
audio_volume = 15;
else
audio_volume ++;
AUDIF_Set_Volume(audio_volume);
}
vod_osd_video_display(VOD_VIDEO_VOLUME);
return 0;
}
//靜音
if(rx == VOD_IRC_MUTE){
//ircmd_mute();
if(user_mute){
//清除靜音
user_mute = 0;
AUDIF_Set_Volume(audio_volume);
}
else{
//設置靜音
user_mute = 1;
AUDIF_Set_Volume(0);
}
vod_osd_video_display(VOD_VIDEO_MUTE);
return 0;
}
//聲道
if(rx == VOD_IRC_CHANNEL){
if(vod_video_time_display_state){
ircmd_channel1();
}
vod_osd_video_display(VOD_VIDEO_CHANNEL);
return 0;
}
//語言
if(rx == VOD_IRC_LANGUAGE){
if(vod_video_time_display_state){
//如果是AVI視頻
if(iptv_file_type == IPTV_FILE_TYPE_AVI){
//如果存在idx1
if(idx1_position ){
if (NP_ASTN==0xf){
NP_ASTN = 0;
}
else{
NP_ASTN++;
if (NP_ASTN >= pDSV->dAv_AST_Ns){
NP_ASTN = 0x0;
}
}
if (audio_chan_num != NP_ASTN){
mp4_aud_channel_flg = 1;
audio_chan_num = NP_ASTN;
}
}
}
//不是AVI視頻
else {
if(audio_chan_num==1)
audio_chan_num = 0;
else
audio_chan_num = 1;
AUDIF_AutoDownload_Codec(audio_chan_num); //自動判斷音軌切換
}
}
vod_osd_video_display(VOD_VIDEO_LANGUAGE);
//printf_w("####audio_chan_num = %d\n",audio_chan_num);
return 0;
}
//快進
if(rx == VOD_IRC_FASTFORWARD){
if(adv_search_time == 5){
adv_search_time = 0;
ircmd_play_resume();
}
else{
play_state=VCD_STATE_FASTFORWARD;
ircmd_forward();
}
vod_osd_video_display(VOD_VIDEO_FASTFORWARD);
printf_w("###adv_search_time = %d\n",adv_search_time);
return 0;
}
//后退
if(rx == VOD_IRC_FASTBACKWARD){
//如果是在快進狀態,不執行
if(play_state == VCD_STATE_FASTFORWARD){
return 0;
}
//如果長度太小,不執行
if(iptv_file_parser_length < VOD_VIDEO_GOTO_TOTAL_LENGTH)
return 0;
//如果是AVI視頻,不執行
if(iptv_file_type == IPTV_FILE_TYPE_AVI){
//如果不存在idx1
if(idx1_position == 0)
return 0;
vod_video_goto_curPos = GET_MP4_TIME()/(vod_avi_total_time/VOD_VIDEO_GOTO_TOTAL_LENGTH);
}
else{
vod_video_goto_curPos = iptv_file_media_control /(iptv_file_parser_length/VOD_VIDEO_GOTO_TOTAL_LENGTH);
}
if(vod_video_goto_curPos)
vod_video_goto_curPos --;
//顯示當前位置
vod_osd_video_display(VOD_VIDEO_GOTO);
vod_osd_video_display(VOD_VIDEO_FASTBACKWARD);
//按下OK鍵
vod_video_ir_goto(VOD_IRC_CONFIRM);
return 0;
}
//GOTO,按鍵'章節'
if(rx == VOD_IRC_NOVEL_CHANGE_PIC){
//如果是等待收費狀態
if(vod_video_isCharges ==VOD_VIDEO_CHARGES_NOTICE ||vod_video_isCharges ==VOD_VIDEO_CHARGES_WAIT_FOR_PAID){
return 0;
}
//如果是在快進狀態,不執行
if(play_state == VCD_STATE_FASTFORWARD){
return 0;
}
//如果長度太小,不執行
if(iptv_file_parser_length < VOD_VIDEO_GOTO_TOTAL_LENGTH)
return 0;
//如果是AVI視頻
if(iptv_file_type == IPTV_FILE_TYPE_AVI){
//如果不存在idx1
if(idx1_position == 0)
return 0;
vod_video_goto_curPos = GET_MP4_TIME()/(vod_avi_total_time/VOD_VIDEO_GOTO_TOTAL_LENGTH);
//printf_w("####current_time = %d\n",current_time);
}
else{
vod_video_goto_curPos = iptv_file_media_control /(iptv_file_parser_length/VOD_VIDEO_GOTO_TOTAL_LENGTH);
}
vod_video_goto_playingPos = vod_video_goto_curPos;
vod_osd_video_display(VOD_VIDEO_GOTO);
vod_isVideo |= VOD_VIDEO_Y_GOTO;
return 0;
}
//字幕
if(rx == VOD_IRC_SUBTITLES){
if(vod_video_time_display_state){
vod_video_subtitle_id = Subp_stream_Chg_VOB(1);
}
vod_osd_video_display(VOD_VIDEO_SUBTITLE);
printf_w("#####sub_id = %x\n",vod_video_subtitle_id);
return 0;
}
//放大時候移動
//按鍵‘上’
if(rx == VOD_IRC_UP){
if(vpp_zoom> 0 && vpp_zoom <= 4)
ircmd_up();
return 0;
}
//按鍵‘下’
if(rx == VOD_IRC_DOWN){
if(vpp_zoom> 0 && vpp_zoom <= 4)
ircmd_down();
return 0;
}
//按鍵‘左’
if(rx == VOD_IRC_LEFT){
if(vpp_zoom> 0 && vpp_zoom <= 4){
ircmd_left();
}
return 0;
}
//按鍵‘右’
if(rx == VOD_IRC_RIGHT){
if(vpp_zoom> 0 && vpp_zoom <= 4){
ircmd_right();
}
return 0;
}
//上一頁,連續劇上一集
if(rx == VOD_IRC_PAGE_UP){
if(vod_current_logo == VOD_LOGO_12){
if(vod_series_episode ){
// 停止播放,播放上一集
AVD_SetMediaInterrupt();
vod_video_play_state = VOD_VIDEO_PLAY_PRE;
}
}
}
//下一頁,連續劇下一集
if(rx == VOD_IRC_PAGE_DOWN){
if(vod_current_logo == VOD_LOGO_12){
vod_program_t * program_header = (vod_program_t *)(vod_series_bufstart+ VOD_SERVER_HEADER);
UINT16 shEpisodes = (program_header+vod_program_search_result[vod_current_page*6+vod_current_button_right+1])->shEpisodes;
if(vod_series_episode + 1 < shEpisodes)
{
// 停止播放,播放下一集
AVD_SetMediaInterrupt();
}
}
}
return 0;
}
/*******************************************************************
如果在視頻播放的狀態下,goto
********************************************************************/
BYTE vod_video_ir_goto(UINT16 rx){
//按鍵‘左’
if(rx == VOD_IRC_LEFT){
if(vod_video_goto_curPos > 0){
vod_video_goto_curPos --;
vod_osd_video_display(VOD_VIDEO_GOTO);
}
return 0;
}
//按鍵‘右’
if(rx == VOD_IRC_RIGHT){
if( vod_video_goto_curPos < VOD_VIDEO_GOTO_TOTAL_LENGTH){
vod_video_goto_curPos ++;
vod_osd_video_display(VOD_VIDEO_GOTO);
}
return 0;
}
//按鍵'OK'
if(rx == VOD_IRC_CONFIRM){
//如果跳轉到最后,則退出視頻
if(vod_video_goto_curPos >= VOD_VIDEO_GOTO_TOTAL_LENGTH){
// 停止播放
AVD_SetMediaInterrupt();
vod_isVideo = VOD_VIDEO_Y;
vod_osd_video_display_clear();
return 1;
}
//如果跳轉的位置是當前位置,則不跳轉
if(vod_video_goto_curPos == vod_video_goto_playingPos){
vod_isVideo = VOD_VIDEO_Y;
vod_osd_video_display_clear();
return 0;
}
//斷開連接,暫停
vod_Socket_Disonnect(0);
vod_Socket_Connect(0);
Pause();
//同步音視頻
vod_video_audio_synchn = 1;
//如果是avi
if(iptv_file_type == IPTV_FILE_TYPE_AVI){
//disp_time = GET_MP4_TIME();
//UINT32 total_time =( iptv_file_parser_length / iptv_file_media_control) * disp_time;
nGotoPck = vod_video_goto_curPos*(vod_avi_total_time/VOD_VIDEO_GOTO_TOTAL_LENGTH);
//nGotoPck = 500*vod_video_goto_curPos; //GOTO 的時間 秒為單位。
//iptv_file_media_control = avi_set_goto(nGotoPck);
UINT64 file_length = iptv_file_parser_length;
//解碼長度
iptv_file_media_control = (file_length*nGotoPck)/vod_avi_total_time;
//如果是播放電影
if(vod_current_logo == VOD_LOGO_11){
if(vod_video_file_current ){
file_length = vod_video_files_size[vod_video_file_current] - vod_video_files_size[vod_video_file_current -1] ;
iptv_file_media_control = (file_length*nGotoPck)/vod_avi_total_time;
iptv_file_media_control += vod_video_files_size[vod_video_file_current -1] ;
}
else{
file_length = vod_video_files_size[0];
iptv_file_media_control = (file_length*nGotoPck)/vod_avi_total_time;
}
}
iptv_file_media_control = 512*(iptv_file_media_control/512);
}
else{
//接收、解碼長度的設置
iptv_file_media_control = vod_video_goto_curPos * (iptv_file_parser_length/VOD_VIDEO_GOTO_TOTAL_LENGTH);
}
//已接收的長度
vod_video_rx_len = iptv_file_media_control;
//上次接收的長度
vod_video_rx_len_last_time = vod_video_rx_len ;
iptv_buf_rdp = 0;
iptv_buf_wrp = 0;
//如果是播放電影(有多個文件)
if(vod_current_logo == VOD_LOGO_11){
vod_video_file_current = 0;
while(vod_video_rx_len >= vod_video_files_size[vod_video_file_current]){
//下一個視頻文件
vod_video_file_current ++;
}
vod_tx_s0_command.request_file.dwNumber = vod_video_file_current+1;
}
printf_w("###vod_video_files_size[vod_video_file_current] = %llu\n",vod_video_files_size[vod_video_file_current]);
printf_w("###iptv_file_parser_length = %llu\n",iptv_file_parser_length);
printf_w("###vod_video_rx_len = %llu\n",vod_video_rx_len);
vod_isVideo = VOD_VIDEO_Y;
vod_osd_video_display_clear();
return 1;
}
//返回鍵,或GOTO鍵
if(rx == VOD_IRC_RETURN){
vod_isVideo = VOD_VIDEO_Y;
vod_osd_video_display_clear();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -