diff options
author | jbrjake <[email protected]> | 2008-03-22 00:16:22 +0000 |
---|---|---|
committer | jbrjake <[email protected]> | 2008-03-22 00:16:22 +0000 |
commit | ecc54675dddb56825215ce0c11358f81fc72f660 (patch) | |
tree | 22d60adb6b98b2a388445d1a2436bcea431009d4 | |
parent | 9880cbfd5b0db35bff71efa524e11c6c4dcfbe68 (diff) |
"If one would give me six lines written by the hand of the most honest man, I would find something in them to have him hanged."
- Banishes libdvdcss, removing DVD decryption from HandBrake's binaries.
- For decrypttion, the MacGui and Mac CLI now will load at runtime VLC's dynamic library of dvdcss if the media player's available on the user's system.
- Linux users can build with a statically linked lib of dvdcss by using ./configure --libdvdcss, which will download it from a remote third party (videolan.org).
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1354 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r-- | Jamfile | 2 | ||||
-rwxr-xr-x | configure | 11 | ||||
-rw-r--r-- | contrib/Jamfile | 22 | ||||
-rw-r--r-- | contrib/patch-libdvdread-css-vlc-dylib.patch | 11 | ||||
-rw-r--r-- | contrib/version_libdvdcss.txt | 2 | ||||
-rw-r--r-- | macosx/Controller.mm | 75 | ||||
-rw-r--r-- | macosx/HandBrake.xcodeproj/project.pbxproj | 9 |
7 files changed, 103 insertions, 29 deletions
@@ -24,7 +24,7 @@ if $(OS) = UNKNOWN OS = CYGWIN ; } -if $(OS) != CYGWIN +if $(CSS) = 1 { HANDBRAKE_LIBS = $(HANDBRAKE_LIBS) contrib/lib/libdvdcss.a ; } @@ -98,13 +98,21 @@ MAKE=make fi # If the user included the --snapshot argument, mark it down. -if [[ $1 = "--snapshot" ]] +if [[ $1 = "--snapshot" ]] || [[ $2 = "--snapshot" ]] then SNAPSHOT=1 else SNAPSHOT=0 fi +# We fought the law and the law won +if [[ $1 = "--libdvdcss" ]] || [[ $2 = "--libdvdcss" ]] +then + CSS=1 +else + CSS=0 +fi + # Generating the HB_BUILD and HB_VERSION for snapshots requires # the build date, working path, and current SVN revision. BUILD_DATE=$(date +%Y%m%d) @@ -127,6 +135,7 @@ SNAPSHOT = $SNAPSHOT ; BUILD_DATE = $BUILD_DATE ; FULL_PATH = $FULL_PATH ; SVN_REV = $SVN_REV ; +CSS = $CSS ; EOF echo diff --git a/contrib/Jamfile b/contrib/Jamfile index 891483102..fd0b9811f 100644 --- a/contrib/Jamfile +++ b/contrib/Jamfile @@ -101,8 +101,9 @@ LibAvUtil $(SUBDIR)/lib/libavutil.a : $(SUBDIR)/lib/libavcodec.a ; LibAvUtil $(SUBDIR)/lib/libavformat.a : $(SUBDIR)/lib/libavcodec.a ; LibAvUtil $(SUBDIR)/lib/libswscale.a : $(SUBDIR)/lib/libavcodec.a ; -# CSS doesn't work on Cygwin/Windows as of now, so don't use it. -if $(OS) != CYGWIN +# HandBrake does not include a DVD decrypting library, +# so if a user requests it, let them download and compile it from a 3rd party +if $(CSS) = 1 { # libdvdcss # We need libdvdcss.so for libdvdread's configure to work... @@ -114,8 +115,8 @@ if $(OS) != CYGWIN actions LibDvdCss { cd `dirname $(>)` && CONTRIB=`pwd` && - rm -rf libdvdcss && (gzip -dc libdvdcss.tar.gz | tar xf - ) && - cd libdvdcss && + rm -rf libdvdcss-1.2.9 && (gzip -dc libdvdcss.tar.gz | tar xf - ) && + cd libdvdcss-1.2.9 && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libdvdcss.a } @@ -145,8 +146,14 @@ rule LibDvdRead { Depends $(<) : $(>) ; Depends lib : $(<) ; + + if $(OS) = MACOSX + { + DVDREAD_PATCH = "$(PATCH) -p0 < ../patch-libdvdread-css-vlc-dylib.patch &&" ; + } + } -if $(OS) != CYGWIN +if $(CSS) = 1 # Include CSS support in libdvdread if requested { actions LibDvdRead { @@ -161,11 +168,12 @@ if $(OS) != CYGWIN else { # Cygwin/Windows doesn't use CSS as of now, so don't include it on the # configure line. + # MacOSX uses a dylib for CSS, so it doesn't need including there either. actions LibDvdRead { cd `dirname $(>)` && CONTRIB=`pwd` && - rm -rf libdvdread && (gzip -dc libdvdread.tar.gz | tar xf - ) && - cd libdvdread && + rm -rf libdvdread && (gzip -dc libdvdread.tar.gz | tar xf - ) && + cd libdvdread && $(DVDREAD_PATCH) ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libdvdread.a diff --git a/contrib/patch-libdvdread-css-vlc-dylib.patch b/contrib/patch-libdvdread-css-vlc-dylib.patch new file mode 100644 index 000000000..6d61cfaba --- /dev/null +++ b/contrib/patch-libdvdread-css-vlc-dylib.patch @@ -0,0 +1,11 @@ +--- dvdread/dvd_input.c 2005-09-19 09:43:08.000000000 -0400 ++++ dvdread/patched-dvd_input.c 2008-03-19 12:47:16.000000000 -0400 +@@ -332,7 +332,7 @@ + + #else + +- dvdcss_library = dlopen("libdvdcss.so.2", RTLD_LAZY); ++ dvdcss_library = dlopen("/Applications/VLC.app/Contents/MacOS/lib/vlc_libdvdcss.dylib", RTLD_LAZY); + + if(dvdcss_library != NULL) { + #if defined(__OpenBSD__) && !defined(__ELF__) diff --git a/contrib/version_libdvdcss.txt b/contrib/version_libdvdcss.txt index 81d1ef157..4821730fd 100644 --- a/contrib/version_libdvdcss.txt +++ b/contrib/version_libdvdcss.txt @@ -1 +1 @@ -http://download.m0k.org/handbrake/contrib/libdvdcss-1.2.9.tar.gz +http://download.videolan.org/pub/libdvdcss/1.2.9/libdvdcss-1.2.9.tar.gz
\ No newline at end of file diff --git a/macosx/Controller.mm b/macosx/Controller.mm index 207f1f1bc..2534994d5 100644 --- a/macosx/Controller.mm +++ b/macosx/Controller.mm @@ -1229,6 +1229,8 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It /* Here we actually tell hb_scan to perform the source scan, using the path to source and title number*/ - (void) performScan:(NSString *) scanPath scanTitleNum: (int) scanTitleNum { + /* use a bool to determine whether or not we can decrypt using vlc */ + BOOL cancelScanDecrypt = 0; NSString *path = scanPath; HBDVDDetector *detector = [HBDVDDetector detectorForPath:path]; if( [detector isVideoDVD] ) @@ -1237,21 +1239,74 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It // device path instead. path = [detector devicePath]; [self writeToActivityLog: "trying to open a physical dvd at: %s", [scanPath UTF8String]]; + + /* lets check for vlc here to make sure we have a dylib available to use for decrypting */ + NSString *vlcPath = @"/Applications/VLC.app"; + NSFileManager * fileManager = [NSFileManager defaultManager]; + if ([fileManager fileExistsAtPath:vlcPath] == 0) + { + /*vlc not found in /Applications so we set the bool to cancel scanning to 1 */ + cancelScanDecrypt = 1; + [self writeToActivityLog: "VLC app not found for decrypting physical dvd"]; + int status; + status = NSRunAlertPanel(@"HandBrake could not find VLC.",@"Please download and install VLC media player in your /Applications folder if you wish to read encrypted DVDs.", @"Get VLC", @"Cancel Scan", @"Attempt Scan Anyway"); + [NSApp requestUserAttention:NSCriticalRequest]; + + if (status == NSAlertDefaultReturn) + { + /* User chose to go download vlc (as they rightfully should) so we send them to the vlc site */ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.videolan.org/"]]; + } + else if (status == NSAlertAlternateReturn) + { + /* User chose to cancel the scan */ + [self writeToActivityLog: "cannot open physical dvd , scan cancelled"]; + } + else + { + /* User chose to override our warning and scan the physical dvd anyway, at their own peril. on an encrypted dvd this produces massive log files and fails */ + cancelScanDecrypt = 0; + [self writeToActivityLog: "user overrode vlc warning -trying to open physical dvd without decryption"]; + } + + } + else + { + /* VLC was found in /Applications so all is well, we can carry on using vlc's libdvdcss.dylib for decrypting if needed */ + [self writeToActivityLog: "VLC app found for decrypting physical dvd"]; + } + } - /* If there is no title number passed to scan, we use "0" - * which causes the default behavior of a full source scan - */ - if (!scanTitleNum) + + + + if (cancelScanDecrypt == 0) { - scanTitleNum = 0; + + /* we actually pass the scan off to libhb here */ + /* If there is no title number passed to scan, we use "0" + * which causes the default behavior of a full source scan + */ + if (!scanTitleNum) + { + scanTitleNum = 0; + } + if (scanTitleNum > 0) + { + [self writeToActivityLog: "scanning specifically for title: %d", scanTitleNum]; + } + hb_scan( fHandle, [path UTF8String], scanTitleNum ); + [fSrcDVD2Field setStringValue: [NSString stringWithFormat: @"Scanning new source ..."]]; } - if (scanTitleNum > 0) + else { - [self writeToActivityLog: "scanning specifically for title: %d", scanTitleNum]; + /* if we have a title loaded up */ + if ([[fSrcDVD2Field stringValue] length] > 0) + { + [self enableUI: YES]; + } } - [fSrcDVD2Field setStringValue: [NSString stringWithFormat: @"Scanning new source ..."]]; - /* we actually pass the scan off to libhb here */ - hb_scan( fHandle, [path UTF8String], scanTitleNum ); + } diff --git a/macosx/HandBrake.xcodeproj/project.pbxproj b/macosx/HandBrake.xcodeproj/project.pbxproj index 7cc5b5265..d8973ae13 100644 --- a/macosx/HandBrake.xcodeproj/project.pbxproj +++ b/macosx/HandBrake.xcodeproj/project.pbxproj @@ -976,7 +976,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1037,7 +1036,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1096,7 +1094,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1182,7 +1179,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1228,7 +1224,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1349,7 +1344,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1393,7 +1387,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1450,7 +1443,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, @@ -1510,7 +1502,6 @@ ../contrib/lib/libavcodec.a, ../contrib/lib/libavutil.a, ../contrib/lib/libdvdread.a, - ../contrib/lib/libdvdcss.a, ../contrib/lib/libfaac.a, ../contrib/lib/libmp3lame.a, ../contrib/lib/libmpeg2.a, |