Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 135890 Details for
Bug 199026
media-plugins/vdr-dvd: Add DVD drive speed limiting support
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
dvdspeed-cvs-11-13-2007.diff
dvdspeed-cvs-11-13-2007.diff (text/plain), 9.00 KB, created by
Sebastian
on 2007-11-13 14:37:46 UTC
(
hide
)
Description:
dvdspeed-cvs-11-13-2007.diff
Filename:
MIME Type:
Creator:
Sebastian
Created:
2007-11-13 14:37:46 UTC
Size:
9.00 KB
patch
obsolete
>diff -Nur dvd.old/i18n.c dvd/i18n.c >--- dvd.old/i18n.c 2007-11-13 15:05:07.000000000 +0100 >+++ dvd/i18n.c 2007-11-13 15:10:15.000000000 +0100 >@@ -280,6 +280,32 @@ > #endif > }, > { >+ "Setup.DVD$DVD-ROM Speed", // English >+ "DVD-ROM-Geschwindigkeit", // Deutsch >+ "DVD-ROM Speed", // Slovenski >+ "DVD-ROM Speed", // Italiano >+ "DVD-ROM Speed", // Nederlands >+ "DVD-ROM Speed", // Português >+ "DVD-ROM Speed", // Français >+ "DVD-ROM Speed", // Norsk >+ "DVD-ROM Speed", // suomi >+ "DVD-ROM Speed", // Polski >+ "DVD-ROM Speed", // Español >+ "DVD-ROM Speed", // ÅëëçíéêÜ (Greek) >+ "DVD-ROM Speed", // Svenska >+ "DVD-ROM Speed", // Romaneste >+ "DVD-ROM Speed", // Magyar >+ "DVD-ROM Speed", // Català >+ "DVD-ROM Speed", // ÀãááÚØÙ (Russian) >+ "DVD-ROM Speed", // Hrvatski (Croatian) >+ "DVD-ROM Speed", // Eesti >+ "DVD-ROM Speed", // Dansk >+ "DVD-ROM Speed", // Czech >+#if VDRVERSNUM >= 10502 >+ "DVD-ROM Speed" // Türkçe >+#endif >+ }, >+ { > "Setup.DVD$Gain (analog)", > "Verstärkung (analog)", // Deutsch > "Ojaèanje (analogno)", // Slovenski >diff -Nur dvd.old/player-dvd.c dvd/player-dvd.c >--- dvd.old/player-dvd.c 2007-09-17 21:04:43.000000000 +0200 >+++ dvd/player-dvd.c 2007-11-13 15:27:21.000000000 +0100 >@@ -35,6 +35,11 @@ > #include "control-dvd.h" > #include "dvd.h" > >+/* Needed for DvdSetSpeed() */ >+#include <linux/cdrom.h> >+#include <scsi/sg.h> >+#include <sys/ioctl.h> >+ > /** > * this was "weak"'s solution of a forced > * SPU only stream choice, >@@ -252,6 +257,7 @@ > bool cDvdPlayer::HasBitStreamOut = false; > bool cDvdPlayer::HasSoftDeviceOut = false; > bool cDvdPlayer::SoftDeviceOutActive = false; >+bool cDvdPlayer::DvdSetSpeedActive = false; > > const int cDvdPlayer::MaxAudioTracks = 0x20; > const int cDvdPlayer::AudioTrackMask = 0x1F; >@@ -565,6 +571,93 @@ > #endif > } > >+/* This function was ripped off of mplayer */ >+void cDvdPlayer::DvdSetSpeed(const char *device, int speed) >+{ >+#if defined(SG_IO) && defined(GPCMD_SET_STREAMING) >+ int fd; >+ unsigned char buffer[28]; >+ unsigned char cmd[16]; >+ unsigned char sense[16]; >+ struct sg_io_hdr sghdr; >+ struct stat st; >+ >+ memset(&sghdr, 0, sizeof(sghdr)); >+ memset(buffer, 0, sizeof(buffer)); >+ memset(sense, 0, sizeof(sense)); >+ memset(cmd, 0, sizeof(cmd)); >+ memset(&st, 0, sizeof(st)); >+ >+ if (stat(device, &st) == -1) { >+ esyslog("ERROR: dvd-plugin: DVD device %s doesn't exist", device); >+ return; >+ } >+ >+ if (!S_ISBLK(st.st_mode)) { >+ esyslog("ERROR: dvd-plugin: DVD device %s is not a block device", device); >+ return; >+ } >+ >+ if ((fd = open(device, O_RDWR | O_NONBLOCK)) == -1) { >+ esyslog("ERROR: dvd-plugin: Failed to open DVD device %s O_RDWR | O_NONBLOCK", device); >+ return; >+ } >+ >+ if (speed < 100 && speed > 0) { /* speed times 1350KB/s (DVD single speed) */ >+ speed *= 1350; >+ } >+ >+ switch (speed) { >+ case 0: /* don't touch speed setting */ >+ close(fd); >+ return; >+ case -1: /* restore default value */ >+ speed = 0; >+ buffer[0] = 4; /* restore default */ >+ isyslog("dvd-plugin: Restoring initial DVD drive speed"); >+ break; >+ default: /* limit to <speed> KB/s */ >+ isyslog("dvd-plugin: Limiting speed to %d KB/s", speed); >+ break; >+ } >+ >+ sghdr.interface_id = 'S'; >+ sghdr.timeout = 5000; >+ sghdr.dxfer_direction = SG_DXFER_TO_DEV; >+ sghdr.mx_sb_len = sizeof(sense); >+ sghdr.dxfer_len = sizeof(buffer); >+ sghdr.cmd_len = sizeof(cmd); >+ sghdr.sbp = sense; >+ sghdr.dxferp = buffer; >+ sghdr.cmdp = cmd; >+ >+ cmd[0] = GPCMD_SET_STREAMING; >+ cmd[10] = sizeof(buffer); >+ >+ buffer[8] = 0xff; /* first sector 0, last sector 0xffffffff */ >+ buffer[9] = 0xff; >+ buffer[10] = 0xff; >+ buffer[11] = 0xff; >+ >+ buffer[12] = buffer[20] = (speed >> 24) & 0xff; /* <speed> kilobyte */ >+ buffer[13] = buffer[21] = (speed >> 16) & 0xff; >+ buffer[14] = buffer[22] = (speed >> 8) & 0xff; >+ buffer[15] = buffer[23] = speed & 0xff; >+ >+ buffer[18] = buffer[26] = 0x03; /* 1 second */ >+ buffer[19] = buffer[27] = 0xe8; >+ >+ if (ioctl(fd, SG_IO, &sghdr) < 0) { >+ esyslog("ERROR: dvd-plugin: DVD speed limiting failed"); >+ close(fd); >+ return; >+ } >+ isyslog("dvd-plugin: DVD speed limiting successful"); >+ DvdSetSpeedActive = true; >+ close(fd); >+#endif >+} >+ > void cDvdPlayer::Action(void) { > memset(event_buf, 0, sizeof(uint8_t)*4096); > >@@ -590,6 +683,10 @@ > } > dsyslog("dvd-plugin: SoftDeviceOutActive=%d, HasSoftDeviceOut=%d", SoftDeviceOutActive, HasSoftDeviceOut); > >+ /* Try to reduce drive speed if the user wants us to */ >+ if (DVDSetup.Speed) >+ DvdSetSpeed(const_cast<char *>(cDVD::getDVD()->DeviceName()), DVDSetup.Speed); >+ > if (dvdnav_open(&nav, const_cast<char *>(cDVD::getDVD()->DeviceName())) != DVDNAV_STATUS_OK) { > Skins.Message(mtError, tr("Error.DVD$Error opening DVD!")); > esyslog("ERROR: dvd-plugin cannot open dvdnav device %s -> input thread ended (pid=%d) !", const_cast<char *>(cDVD::getDVD()->DeviceName()), getpid()); >@@ -1203,6 +1300,12 @@ > dvdnav_close(nav); > nav=NULL; > >+ /* Try to restore drive speed if it was previously changed */ >+ if (DvdSetSpeedActive) { >+ DvdSetSpeed(const_cast<char *>(cDVD::getDVD()->DeviceName()), -1); >+ DvdSetSpeedActive = false; >+ } >+ > DEBUGDVD("%s:%d: input thread ended (pid=%d)\n", __FILE__, __LINE__, getpid()); > fflush(NULL); > } >diff -Nur dvd.old/player-dvd.h dvd/player-dvd.h >--- dvd.old/player-dvd.h 2007-09-17 21:04:43.000000000 +0200 >+++ dvd/player-dvd.h 2007-11-13 15:07:57.000000000 +0100 >@@ -168,6 +168,7 @@ > static bool HasBitStreamOut; > static bool SoftDeviceOutActive; // currently used to switch for xine > static bool HasSoftDeviceOut; // currently used to switch for xine >+ static bool DvdSetSpeedActive; > > //dvd stuff > int currButtonN; >@@ -229,6 +230,7 @@ > void DrawSPU(); > void HideSPU(); > void EmptySPU(); >+ void DvdSetSpeed(const char*, int); > > void Pause(void); > void Play(void); >diff -Nur dvd.old/setup-dvd.c dvd/setup-dvd.c >--- dvd.old/setup-dvd.c 2007-11-13 15:01:00.000000000 +0100 >+++ dvd/setup-dvd.c 2007-11-13 15:07:57.000000000 +0100 >@@ -35,6 +35,7 @@ > Gain = 4; > > AC3dynrng = 0; >+ Speed = 0; > } > > bool cDVDSetup::SetupParse(const char *Name, const char *Value) >@@ -47,6 +48,7 @@ > else if (!strcasecmp(Name, "ShowSubtitles")) ShowSubtitles = atoi(Value); > else if (!strcasecmp(Name, "HideMainMenu")) HideMainMenu = atoi(Value); > else if (!strcasecmp(Name, "ReadAHead")) ReadAHead = atoi(Value); >+ else if (!strcasecmp(Name, "Speed")) Speed = atoi(Value); > else if (!strcasecmp(Name, "Gain")) Gain = atoi(Value); > else if (!strcasecmp(Name, "AC3dynrng")) AC3dynrng = atoi(Value); > else >@@ -73,6 +75,7 @@ > Add(new cMenuEditBoolItem(tr("Setup.DVD$Display subtitles"), &data.ShowSubtitles)); > Add(new cMenuEditBoolItem(tr("Setup.DVD$Hide Mainmenu Entry"), &data.HideMainMenu)); > Add(new cMenuEditBoolItem(tr("Setup.DVD$ReadAHead"), &data.ReadAHead)); >+ Add(new cMenuEditIntItem( tr("Setup.DVD$DVD-ROM Speed"), &data.Speed, 0, 4)); > Add(new cMenuEditIntItem( tr("Setup.DVD$Gain (analog)"), &data.Gain, 0, 10)); > Add(new cMenuEditBoolItem(tr("Setup.DVD$A52 DRC"), &data.AC3dynrng)); > } >@@ -87,6 +90,7 @@ > SetupStore("ShowSubtitles", DVDSetup.ShowSubtitles ); > SetupStore("HideMainMenu", DVDSetup.HideMainMenu ); > SetupStore("ReadAHead", DVDSetup.ReadAHead ); >+ SetupStore("Speed", DVDSetup.Speed ); > SetupStore("Gain", DVDSetup.Gain ); > SetupStore("AC3dynrng", DVDSetup.AC3dynrng ); > } >diff -Nur dvd.old/setup-dvd.h dvd/setup-dvd.h >--- dvd.old/setup-dvd.h 2005-01-05 17:32:21.000000000 +0100 >+++ dvd/setup-dvd.h 2007-11-13 15:07:57.000000000 +0100 >@@ -23,6 +23,7 @@ > int HideMainMenu; > int ReadAHead; > int Gain; >+ int Speed; > > // AC3 stuff > int AC3dynrng;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 199026
:
135874
|
135876
|
135888
|
135890
|
135895
|
136059