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

📄 bindings.c

📁 基于linux的DVD播放器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <sys/time.h>#include <ogle/dvdcontrol.h>#include <ogle/msgevents.h>#include <X11/Xlib.h>#include <X11/Xutil.h>#include "debug_print.h"#include "bindings.h"extern DVDNav_t *nav;extern int bookmarks_autosave;int prevpg_timeout = 1;int digit_timeout = 0;int number_timeout = 0;int default_skip_seconds = 15;int skip_seconds = 15;static int fs = 0;static int isPaused = 0;static double speed = 1.0;struct action_number{  int valid;  int32_t nr;  struct timeval timestamp;};static struct action_number user_nr = { 0, 0 };void actionUpperButtonSelect(void *data){  DVDUpperButtonSelect(nav);	  }void actionLowerButtonSelect(void *data){  DVDLowerButtonSelect(nav);}void actionLeftButtonSelect(void *data){  DVDLeftButtonSelect(nav);}void actionRightButtonSelect(void *data){  DVDRightButtonSelect(nav);}void actionButtonActivate(void *data){  struct action_number *user = (struct action_number *)data;  if(user != NULL && user->valid && (user->nr >= 0)) {    DVDButtonSelectAndActivate(nav, user->nr);  } else {     DVDButtonActivate(nav);  }  if(user != NULL) {    user->valid = 0;  }}void actionMenuCallTitle(void *data){  DVDMenuCall(nav, DVD_MENU_Title);}void actionMenuCallRoot(void *data){  DVDMenuCall(nav, DVD_MENU_Root);}void actionMenuCallSubpicture(void *data){  DVDMenuCall(nav, DVD_MENU_Subpicture);}void actionMenuCallAudio(void *data){  DVDMenuCall(nav, DVD_MENU_Audio);}void actionMenuCallAngle(void *data){  DVDMenuCall(nav, DVD_MENU_Angle);}void actionMenuCallPTT(void *data){  DVDMenuCall(nav, DVD_MENU_Part);}void actionResume(void *data){  DVDResume(nav);}void actionPauseToggle(void *data){    if(isPaused) {    DVDPauseOff(nav);    isPaused = 0;  } else {    DVDPauseOn(nav);    isPaused = 1;  }  }void actionPauseOn(void *data){    DVDPauseOn(nav);    isPaused = 1;}void actionPauseOff(void *data){    DVDPauseOff(nav);    isPaused = 0;}void actionSubpictureToggle(void *data){  DVDResult_t res;  int spu_nr;  DVDStream_t spu_this;  DVDBool_t spu_shown;  res = DVDGetCurrentSubpicture(nav, &spu_nr, &spu_this, &spu_shown);  if(res != DVD_E_Ok) {    return;  }  if(spu_shown == DVDTrue) {    DVDSetSubpictureState(nav, DVDFalse);  } else {    DVDSetSubpictureState(nav, DVDTrue);  }}struct timeval pg_timestamp = {0, 0};void actionNextPG(void *data){  struct timeval curtime;  gettimeofday(&curtime, NULL);  pg_timestamp = curtime;  DVDNextPGSearch(nav);}void actionPrevPG(void *data){  struct timeval curtime;  long diff;    gettimeofday(&curtime, NULL);  diff = curtime.tv_sec - pg_timestamp.tv_sec;  pg_timestamp = curtime;    if((prevpg_timeout && (diff > prevpg_timeout))) {    DVDTopPGSearch(nav);  } else {    DVDPrevPGSearch(nav);  }}void autosave_bookmark(void){  DVDBookmark_t *bm;  unsigned char id[16];  char volid[33];  int volid_type;  char *state = NULL;  int n;    if(bookmarks_autosave) {    if(DVDGetDiscID(nav, id) != DVD_E_Ok) {      NOTE("%s", "GetDiscID failed\n");      return;    }        if(DVDGetVolumeIdentifiers(nav, 0, &volid_type, volid, NULL) != DVD_E_Ok) {      DNOTE("%s", "GetVolumeIdentifiers failed\n");      volid_type = 0;    }        if(DVDGetState(nav, &state) == DVD_E_Ok) {            if((bm = DVDBookmarkOpen(id, NULL, 1)) == NULL) {	if(errno != ENOENT) {	  NOTE("%s", "BookmarkOpen failed: ");	  perror("");	}	free(state);	return;      }          n = DVDBookmarkGetNr(bm);            if(n == -1) {	NOTE("%s", "DVDBookmarkGetNr failed\n");      } else if(n > 0) {	for(n--; n >= 0; n--) {	  char *appinfo;	  if(DVDBookmarkGet(bm, n, NULL, NULL,			    "common", &appinfo) != -1) {	    if(appinfo) {	      if(!strcmp(appinfo, "autobookmark")) {		if(DVDBookmarkRemove(bm, n) == -1) {		  NOTE("%s", "DVDBookmarkRemove failed\n");		}	      }	      free(appinfo);	    }	  } else {	    NOTE("%s", "DVDBookmarkGet failed\n");	  }	}      }                        if(DVDBookmarkAdd(bm, state, NULL, "common", "autobookmark") == -1) {	DNOTE("%s", "BookmarkAdd failed\n");	DVDBookmarkClose(bm);	free(state);	return;      }      free(state);            if(volid_type != 0) {	char *disccomment = NULL;	if(DVDBookmarkGetDiscComment(bm, &disccomment) != -1) {	  if((disccomment == NULL) || (disccomment[0] == '\0')) {	    if(DVDBookmarkSetDiscComment(bm, volid) == -1) {	      DNOTE("%s", "SetDiscComment failed\n");	    }	  }	  if(disccomment) {	    free(disccomment);	  }	}      }      if(DVDBookmarkSave(bm, 0) == -1) {	NOTE("%s", "BookmarkSave failed\n");      }      DVDBookmarkClose(bm);    }  }}void actionQuit(void *data){  DVDResult_t res;    autosave_bookmark();  res = DVDCloseNav(nav);  if(res != DVD_E_Ok ) {    DVDPerror("DVDCloseNav", res);  }  exit(0);}void actionFullScreenToggle(void *data){  fs = !fs;  if(fs) {    DVDSetZoomMode(nav, ZoomModeFullScreen);  } else {    DVDSetZoomMode(nav, ZoomModeResizeAllowed);  }}void actionForwardScan(void *data){  DVDForwardScan(nav, 1.0);}void actionPlay(void *data){  if(isPaused) {    isPaused = 0;    DVDPauseOff(nav);  }  speed = 1.0;  DVDForwardScan(nav, speed);}void actionFastForward(void *data){  if(isPaused) {    isPaused = 0;    DVDPauseOff(nav);  }  if((speed >= 1.0) && (speed < 8.0)) {    speed +=0.5;  } else if(speed < 1.0) {    speed = 1.5;  }  DVDForwardScan(nav, speed);}void actionSlowForward(void *data){  if(isPaused) {    isPaused = 0;    DVDPauseOff(nav);  }  if(speed > 1.0) {    speed = 0.5;  } else if((speed > 0.1) && (speed <= 1.0)) {    speed /= 2.0;  }  DVDForwardScan(nav, speed);}void actionFaster(void *data){  if(isPaused) {    isPaused = 0;    DVDPauseOff(nav);  }    if((speed >= 1.0) && (speed < 8.0)) {    speed += 0.5;  } else if(speed < 1.0) {    speed *= 2.0;  }  DVDForwardScan(nav, speed);}void actionSlower(void *data){  if(isPaused) {    isPaused = 0;    DVDPauseOff(nav);  }  if(speed > 1.0) {    speed -= 0.5;  } else if((speed > 0.1) && (speed <= 1.0)) {    speed /= 2.0;  }  DVDForwardScan(nav, speed);}void actionBookmarkAdd(void *data){  DVDBookmark_t *bm;  unsigned char id[16];  char *state = NULL;  char volid[33];  int volid_type;  char *disccomment = NULL;    if(DVDGetDiscID(nav, id) != DVD_E_Ok) {    NOTE("%s", "GetDiscID failed\n");    return;  }    if(DVDGetVolumeIdentifiers(nav, 0, &volid_type, volid, NULL) != DVD_E_Ok) {    DNOTE("%s", "GetVolumeIdentifiers failed\n");    volid_type = 0;  }    if(DVDGetState(nav, &state) == DVD_E_Ok) {    if((bm = DVDBookmarkOpen(id, NULL, 1)) == NULL) {      if(errno != ENOENT) {	NOTE("%s", "BookmarkOpen failed: ");	perror("");      }      free(state);      return;    }    if(DVDBookmarkAdd(bm, state, NULL, NULL, NULL) == -1) {      DNOTE("%s", "BookmarkAdd failed\n");      DVDBookmarkClose(bm);      free(state);      return;    }    free(state);    if(volid_type != 0) {      if(DVDBookmarkGetDiscComment(bm, &disccomment) != -1) {	if((disccomment == NULL) || (disccomment[0] == '\0')) {	  if(DVDBookmarkSetDiscComment(bm, volid) == -1) {	    DNOTE("%s", "SetDiscComment failed\n");	  }

⌨️ 快捷键说明

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