From a74fd5a1ec37e53fe7008f022639af6ede0e82c9 Mon Sep 17 00:00:00 2001 From: prigaux Date: Sun, 11 Feb 2007 20:00:15 +0000 Subject: [PATCH] Merge the 0.8.0_mpeg4ip branch into the trunk git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@285 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- BUILD | 13 +- BuildContribsDarwin.sh | 71 + DownloadMacOsXContribBinaries.sh | 32 + Jamfile | 35 +- Jamrules | 32 +- MacOsXContribBinariesVersion.txt | 1 + Makefile | 64 + configure | 5 +- contrib/Jamfile | 41 + contrib/patch_mpeg4ip_cygwin.patch | 262 +++ contrib/version_a52dec.txt | 2 +- contrib/version_faac.txt | 2 +- contrib/version_ffmpeg.txt | 2 +- contrib/version_lame.txt | 2 +- contrib/version_libdvdcss.txt | 2 +- contrib/version_libdvdread.txt | 2 +- contrib/version_libogg.txt | 2 +- contrib/version_libsamplerate.txt | 2 +- contrib/version_libvorbis.txt | 2 +- contrib/version_mpeg2dec.txt | 2 +- contrib/version_mpeg4ip.txt | 1 + contrib/version_x264.txt | 2 +- contrib/version_xvidcore.txt | 2 +- jam | Bin 98260 -> 203788 bytes jamintel | Bin 101388 -> 0 bytes libhb/muxmp4.c | 198 -- {libhb => libmediafork}/Jamfile | 13 +- libmediafork/Makefile | 105 ++ {libhb => libmediafork}/common.c | 23 + {libhb => libmediafork}/common.h | 30 +- {libhb => libmediafork}/deca52.c | 2 +- {libhb => libmediafork}/decavcodec.c | 2 +- {libhb => libmediafork}/declpcm.c | 2 +- {libhb => libmediafork}/decmpeg2.c | 2 +- {libhb => libmediafork}/decsub.c | 2 +- {libhb => libmediafork}/demuxmpeg.c | 2 +- {libhb => libmediafork}/dvd.c | 2 +- {libhb => libmediafork}/encavcodec.c | 11 +- {libhb => libmediafork}/encfaac.c | 2 +- {libhb => libmediafork}/enclame.c | 2 +- {libhb => libmediafork}/encvorbis.c | 2 +- {libhb => libmediafork}/encx264.c | 194 +- {libhb => libmediafork}/encxvid.c | 9 +- {libhb => libmediafork}/fifo.c | 2 +- {libhb => libmediafork}/internal.h | 8 + libmediafork/ipodutil.cpp | 34 + {libhb => libmediafork}/lang.h | 0 libhb/hb.c => libmediafork/mediafork.c | 98 +- libhb/hb.h => libmediafork/mediafork.h | 7 +- {libhb => libmediafork}/muxavi.c | 2 +- {libhb => libmediafork}/muxcommon.c | 2 +- libmediafork/muxmp4.c | 167 ++ {libhb => libmediafork}/muxogm.c | 2 +- {libhb => libmediafork}/ports.c | 2 +- {libhb => libmediafork}/ports.h | 4 +- {libhb => libmediafork}/reader.c | 2 +- {libhb => libmediafork}/render.c | 2 +- {libhb => libmediafork}/scan.c | 18 +- {libhb => libmediafork}/sync.c | 2 +- {libhb => libmediafork}/update.c | 2 +- {libhb => libmediafork}/work.c | 14 +- macosx/Controller.h | 32 +- macosx/Controller.mm | 287 ++- macosx/DriveDetector.h | 2 +- macosx/DriveDetector.m | 2 +- macosx/English.lproj/MainMenu.nib/classes.nib | 43 +- macosx/English.lproj/MainMenu.nib/info.nib | 28 +- .../MainMenu.nib/keyedobjects.nib | Bin 58385 -> 70063 bytes macosx/Express.plist | 4 +- macosx/ExpressController.h | 2 +- macosx/HandBrake.icns | Bin 47214 -> 0 bytes macosx/HandBrake.xcodeproj/project.pbxproj | 713 ------- macosx/MediaFork.icns | Bin 0 -> 59687 bytes macosx/{HandBrake.plist => MediaFork.plist} | 16 +- macosx/MediaFork.xcodeproj/project.pbxproj | 1654 +++++++++++++++++ macosx/PictureController.h | 7 +- macosx/PictureController.mm | 64 +- macosx/PictureGLView.h | 2 +- macosx/PrefsController.h | 7 + macosx/PrefsController.m | 113 +- macosx/QueueController.h | 2 +- macosx/ScanController.h | 4 +- macosx/ScanController.mm | 9 +- macosx/i18n/Localizable.strings | Bin 8426 -> 8426 bytes macosx/i18n/de.strings | Bin 10138 -> 10138 bytes macosx/i18n/es.strings | Bin 10238 -> 10238 bytes macosx/i18n/fr.strings | Bin 8246 -> 8246 bytes macosx/i18n/it.strings | Bin 10240 -> 10240 bytes macosx/i18n/ja.strings | Bin 9252 -> 9252 bytes macosx/i18n/nl.strings | Bin 10106 -> 10106 bytes macosx/i18n/pl.strings | Bin 10110 -> 10110 bytes macosx/i18n/pt.strings | 2 +- macosx/i18n/ru.strings | Bin 9870 -> 9870 bytes macosx/localize.sh | 10 + test/BUILDSHARED | 36 + test/Makefile | 29 + test/fakexcode.cpp | 3 + test/test.c | 27 +- 98 files changed, 3489 insertions(+), 1161 deletions(-) create mode 100755 BuildContribsDarwin.sh create mode 100755 DownloadMacOsXContribBinaries.sh create mode 100644 MacOsXContribBinariesVersion.txt create mode 100644 Makefile create mode 100644 contrib/patch_mpeg4ip_cygwin.patch create mode 100644 contrib/version_mpeg4ip.txt delete mode 100755 jamintel delete mode 100644 libhb/muxmp4.c rename {libhb => libmediafork}/Jamfile (52%) create mode 100644 libmediafork/Makefile rename {libhb => libmediafork}/common.c (95%) rename {libhb => libmediafork}/common.h (92%) rename {libhb => libmediafork}/deca52.c (99%) rename {libhb => libmediafork}/decavcodec.c (99%) rename {libhb => libmediafork}/declpcm.c (98%) rename {libhb => libmediafork}/decmpeg2.c (99%) rename {libhb => libmediafork}/decsub.c (99%) rename {libhb => libmediafork}/demuxmpeg.c (99%) rename {libhb => libmediafork}/dvd.c (99%) rename {libhb => libmediafork}/encavcodec.c (94%) rename {libhb => libmediafork}/encfaac.c (99%) rename {libhb => libmediafork}/enclame.c (99%) rename {libhb => libmediafork}/encvorbis.c (99%) rename {libhb => libmediafork}/encx264.c (55%) rename {libhb => libmediafork}/encxvid.c (97%) rename {libhb => libmediafork}/fifo.c (99%) rename {libhb => libmediafork}/internal.h (97%) create mode 100644 libmediafork/ipodutil.cpp rename {libhb => libmediafork}/lang.h (100%) rename libhb/hb.c => libmediafork/mediafork.c (87%) rename libhb/hb.h => libmediafork/mediafork.h (93%) rename {libhb => libmediafork}/muxavi.c (99%) rename {libhb => libmediafork}/muxcommon.c (99%) create mode 100644 libmediafork/muxmp4.c rename {libhb => libmediafork}/muxogm.c (99%) rename {libhb => libmediafork}/ports.c (99%) rename {libhb => libmediafork}/ports.h (98%) rename {libhb => libmediafork}/reader.c (99%) rename {libhb => libmediafork}/render.c (99%) rename {libhb => libmediafork}/scan.c (96%) rename {libhb => libmediafork}/sync.c (99%) rename {libhb => libmediafork}/update.c (99%) rename {libhb => libmediafork}/work.c (96%) delete mode 100644 macosx/HandBrake.icns delete mode 100644 macosx/HandBrake.xcodeproj/project.pbxproj create mode 100644 macosx/MediaFork.icns rename macosx/{HandBrake.plist => MediaFork.plist} (76%) create mode 100644 macosx/MediaFork.xcodeproj/project.pbxproj create mode 100755 macosx/localize.sh create mode 100644 test/BUILDSHARED create mode 100644 test/Makefile create mode 100644 test/fakexcode.cpp diff --git a/BUILD b/BUILD index b6822950b..8f4788ad9 100644 --- a/BUILD +++ b/BUILD @@ -24,7 +24,7 @@ Step 1: get needed tools http://public.perforce.com/public/jam/index.html, compile it with gcc in Cygwin, and put the jam executable somewhere on your path. -+ nasm (Only for x86. On Mac OS X Intel, Nasm CVS is required) ++ nasm (Only for x86. On Mac OS X Intel, Xcode 2.4.1 include it) Cygwin setup: There are a couple extra things required to make the code build for Cygwin. @@ -44,3 +44,14 @@ Step 2: build Run `./configure && jam'. This will build every library HandBrake requires, then HandBrake itself. + + +Experimental UB build on MacOsX +=============================== + +Run `make'. This will build libmediafork, MediaFork and MediaForkCLI as Universal Binary. +This build method use precompiled contrib libraries. Script to build those binaries are provided too. +All the build is handled by Xcode 2.4.1, should work on powerPC and Intel Macs. + + + diff --git a/BuildContribsDarwin.sh b/BuildContribsDarwin.sh new file mode 100755 index 000000000..312a1332f --- /dev/null +++ b/BuildContribsDarwin.sh @@ -0,0 +1,71 @@ +#!/bin/sh +# This script build the contrib libs +# This used on MaxOs X to generate a universal version of the contrib libraries +# The new building process for MediaFork is to download a precompiled universal contrib folder +# and use them to build universal binaries of MediaFork +# pri: 01/28/07 +# ######################################################################## +# Parameters: +# Package Version (Version must be incremented to ensure that each of trunk/branches use the correct version) +# IP of the other platform host +# Username to connect with (passwordless must be setup between the 2 machines) +# +# ie: ./BuildContribsDarwin.sh 0001 192.168.0.150 toto +# +# ######################################################################### +# The script will connect to the other computer, download and build all of the contrib libraries +# and in the same time download and compile the contrib libraries on the native system +# My setup to do that is Mac Pro Intel as native and a Mac mini G4 ppc as foreign +# +# Native is the master computer, it sends compile commands to the foreign, get the library, then do a lipo +# to assemble both versions and put a universal binary version of the library in contrib/lib folder +# +# Once all of the contrib libraries are builded, a contribbin-darwin-${version}.tar.gz file is created, this file must +# be uploaded to the ftp server so Xcode will be able to build universal binaries of the MediaFork, MediaForkCLI and libmediafork +# +# ########################################################################## +# SSH passwordless setup instructions +# 1) log on native using terminal +# 2) ssh-keygen -t rsa +# 3) leave passphrase empty (hit return) +# 4) copy the $HOME/.ssh/id_rsa.pub to foreign machine $HOME/.ssh/authorized_keys +# ########################################################################## +export VERSION=$1 +export IP=$2 +export USERNAME=$3 +export REPOS=svn://multics.dynalias.com/HandBrake/branches/MediaFork_0.8.0_mpeg4ip +# ########################################################################## +# Launch the build on the foreign system +# ########################################################################## +ssh $USERNAME@$IP "rm -rf MFBUILDTMP ; mkdir MFBUILDTMP ; svn co $REPOS MFBUILDTMP ; cd MFBUILDTMP ; ./configure ; cd contrib ; cp ../config.jam . ; ../jam ; touch BUILDTERMINATED" & +./configure +cd contrib +rm -rf lib include *tar.gz bin share man native foreign +cp ../config.jam . +# Use the new UB jam to be shure to use the correct version to build libraries (native on each system) +../jam +mkdir native +mv lib native +mkdir lib +mkdir foreign +# wait until the foreign build is done :) +wait +echo the foreign build is done, transferring files to native computer: +cd foreign +mkdir lib +cd lib +scp $USERNAME@$IP:/Users/$USERNAME/MFBUILDTMP/contrib/lib/*a . +for lib in `ls *.a` +do + echo ... lipo: $lib + lipo -create $lib ../../native/lib/$lib -output ../../lib/$lib +done; + +cd ../.. +echo $VERSION > DarwinContribVersion.txt +echo Creating contribbin-darwin-$VERSION.tar.gz +tar zcvf contribbin-darwin-$VERSION.tar.gz lib include DarwinContribVersion.txt +echo Done.... +ls -l contribbin-darwin-$VERSION.tar.gz +cd .. +echo $VERSION > MacOsXContribBinariesVersion.txt diff --git a/DownloadMacOsXContribBinaries.sh b/DownloadMacOsXContribBinaries.sh new file mode 100755 index 000000000..93be47cd6 --- /dev/null +++ b/DownloadMacOsXContribBinaries.sh @@ -0,0 +1,32 @@ +#! /bin/sh + +# Incremented every time a new contrib package is available +VERSION=`cat MacOsXContribBinariesVersion.txt` + +if [ -f contrib/DarwinContribVersion.txt ]; then + if [ "`cat contrib/DarwinContribVersion.txt`" = $VERSION ]; then + echo "Contribs are up to date." + exit 0 + fi +fi + +HOST=download.m0k.org +FILE=contribbin-darwin-$VERSION.tar.gz +URL=http://download.mediafork.dynalias.com/contrib/$FILE + +# Check for internet connectivity +if ! host $HOST > /dev/null 2>&1; then + echo "Please connect to the Internet (could not resolve $HOST)." + exit 1 +fi + +# Look for something that can handle an HTTP download + WGET="curl -L -O" + +# Get and install the package +echo "Getting contribs ($VERSION)..." +( cd contrib && rm -f $FILE && $WGET $URL && rm -Rf lib include && \ + tar xzf $FILE && ranlib lib/*.a ) || exit 1 + +exit 0 + diff --git a/Jamfile b/Jamfile index c9c0450da..8d3b2a414 100644 --- a/Jamfile +++ b/Jamfile @@ -6,11 +6,11 @@ SubDir TOP ; -# libhb + contrib libraries -HB_LIBS = libhb.a +# libmediafork + contrib libraries +MEDIAFORK_LIBS = libmediafork.a contrib/lib/liba52.a contrib/lib/libavformat.a contrib/lib/libavcodec.a contrib/lib/libavutil.a - contrib/lib/libdvdread.a + contrib/lib/libdvdread.a contrib/lib/libmp4v2.a contrib/lib/libfaac.a contrib/lib/libmp3lame.a contrib/lib/libmpeg2.a contrib/lib/libvorbis.a contrib/lib/libvorbisenc.a contrib/lib/libogg.a @@ -24,22 +24,26 @@ if $(OS) = UNKNOWN if $(OS) != CYGWIN { - HB_LIBS = $(HB_LIBS) contrib/lib/libdvdcss.a ; + MEDIAFORK_LIBS = $(MEDIAFORK_LIBS) contrib/lib/libdvdcss.a ; } # Interfaces -TEST_BIN = HBTest ; -TEST_SRC = test/test.c ; +CLI_BIN = MediaForkCLI ; +CLI_SRC = test/test.c ; BEOS_BIN = HandBrake ; BEOS_SRC = beos/HBApp.cpp beos/MainWindow.cpp beos/ScanWindow.cpp beos/PicWindow.cpp beos/Stepper.cpp beos/QueueWindow.cpp ; WX_BIN = wxHB ; WX_SRC = wx/hbWizard.cpp wx/wxHB.cpp ; -UI_BIN = $(TEST_BIN) $(BEOS_BIN) $(WX_BIN) ; -UI_SRC = $(TEST_SRC) $(BEOS_SRC) $(WX_SRC) ; +UI_BIN = $(CLI_BIN) $(BEOS_BIN) $(WX_BIN) ; +UI_SRC = $(CLI_SRC) $(BEOS_SRC) $(WX_SRC) ; # CLI app -Main $(TEST_BIN) : $(TEST_SRC) ; +# Don't build the CLI from here if MACOSX, let xcode build it :) +if $(OS) != MACOSX +{ + Main $(CLI_BIN) : $(CLI_SRC) ; +} if $(OS) = BEOS { @@ -65,7 +69,7 @@ if $(OS) = MACOSX macosx/English.lproj/Express.nib/info.nib macosx/English.lproj/Express.nib/keyedobjects.nib ; - OSXApp HandBrake.app : $(OSX_SRC) $(HB_LIBS) ; + OSXApp MediaFork.app : $(OSX_SRC) $(MEDIAFORK_LIBS) ; # Package OSXPackage HandBrake-$(HB_VERSION)-OSX.zip : HandBrake.app ; @@ -79,13 +83,14 @@ if $(OS) = LINUX #Main $(WX_BIN) : $(WX_SRC) ; } -ObjectHdrs $(UI_SRC) : $(TOP)/libhb ; -LinkLibraries $(UI_BIN) : $(HB_LIBS) ; - +if $(OS) != MACOSX +{ + ObjectHdrs $(UI_SRC) : $(TOP)/libmediafork ; + LinkLibraries $(UI_BIN) : $(MEDIAFORK_LIBS) ; +} # Packages NotFile package ; Depends package : $(HB_PACKAGES) ; SubInclude TOP contrib ; -SubInclude TOP libhb ; - +SubInclude TOP libmediafork ; diff --git a/Jamrules b/Jamrules index 6fcca5249..3f14282f1 100644 --- a/Jamrules +++ b/Jamrules @@ -11,13 +11,13 @@ if ! $(DEFINES) Exit "Please run ./configure first." ; } -HB_VERSION = 0.7.1a2 ; +HB_VERSION = 0.8.0b1 ; HB_BUILD = 20060923 ; DEFINES += HB_VERSION=\\\"$(HB_VERSION)\\\" HB_BUILD=$(HB_BUILD) ; LANGUAGES = fr de it pl ru nl es pt ja ; RM = rm -rf ; -# Build HandBrake.app using Xcode +# Build MediaFork.app using Xcode rule OSXApp { Depends exe : $(<) ; @@ -26,9 +26,9 @@ rule OSXApp } actions OSXApp { - $(RM) $(<) macosx/build/HandBrake.app && \ + $(RM) $(<) macosx/build/MediaFork.app && \ ( cd macosx && xcodebuild -alltargets ) && \ - mv macosx/build/Default/HandBrake.app $(<) && \ + mv macosx/build/Default/MediaFork.app $(<) && \ for i in $(LANGUAGES) ; do \ ( cd $(<)/Contents/Resources && \ cp -r English.lproj $i.lproj && \ @@ -42,24 +42,24 @@ rule OSXPackage } actions OSXPackage { - rm -rf $(<) "HandBrake $(HB_VERSION)" && \ - mkdir "HandBrake $(HB_VERSION)" && \ - cp AUTHORS "HandBrake $(HB_VERSION)/AUTHORS.txt" && \ - cp COPYING "HandBrake $(HB_VERSION)/COPYING.txt" && \ - cp CREDITS "HandBrake $(HB_VERSION)/CREDITS.txt" && \ - cp THANKS "HandBrake $(HB_VERSION)/THANKS.txt" && \ + rm -rf $(<) "MediaFork $(HB_VERSION)" && \ + mkdir "MediaFork $(HB_VERSION)" && \ + cp AUTHORS "MediaFork $(HB_VERSION)/AUTHORS.txt" && \ + cp COPYING "MediaFork $(HB_VERSION)/COPYING.txt" && \ + cp CREDITS "MediaFork $(HB_VERSION)/CREDITS.txt" && \ + cp THANKS "MediaFork $(HB_VERSION)/THANKS.txt" && \ ( echo "[InternetShortcut]" && \ echo "URL=http://handbrake.m0k.org/" ) > \ - "HandBrake $(HB_VERSION)/HandBrake Homepage.url" && \ + "MediaFork $(HB_VERSION)/MediaFork Homepage.url" && \ ( echo "[InternetShortcut]" && \ echo "URL=http://handbrake.m0k.org/forum/" ) > \ - "HandBrake $(HB_VERSION)/HandBrake Forums.url" && \ + "MediaFork $(HB_VERSION)/MediaFork Forums.url" && \ ( echo "[InternetShortcut]" && \ echo "URL=http://handbrake.m0k.org/contribute.php" ) > \ - "HandBrake $(HB_VERSION)/Contribute.url" && \ - cp -r HandBrake.app "HandBrake $(HB_VERSION)" && \ - zip -9 -r $(<) "HandBrake $(HB_VERSION)" && \ - rm -rf "HandBrake $(HB_VERSION)" + "MediaFork $(HB_VERSION)/Contribute.url" && \ + cp -r MediaFork.app "MediaFork $(HB_VERSION)" && \ + zip -9 -r $(<) "MediaFork $(HB_VERSION)" && \ + rm -rf "MediaFork $(HB_VERSION)" } rule BeOSPackage diff --git a/MacOsXContribBinariesVersion.txt b/MacOsXContribBinariesVersion.txt new file mode 100644 index 000000000..1ce74b6b0 --- /dev/null +++ b/MacOsXContribBinariesVersion.txt @@ -0,0 +1 @@ +0003 diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..ed1f05384 --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +SYSTEM = $(shell uname -s) + +# Special case for Mac OS X: everything is handled from the Xcode project +ifeq ($(SYSTEM),Darwin) + +all: clean app release + +app: + (./DownloadMacOsXContribBinaries.sh ; cd macosx ; xcodebuild -alltargets -configuration UB build | sed '/^$$/d' ; cd .. ; ./macosx/localize.sh MediaFork.app) + +clean: + (cd macosx ; xcodebuild -alltargets -configuration UB clean | sed '/^$$/d' ) + +mrproper: + (rm -rf contrib/*tar.gz contrib/include contrib/lib contrib/DarwinContribVersion.txt ; cd macosx ; xcodebuild -alltargets -configuration UB clean | sed '/^$$/d' ) + +release: + (rm -rf MediaFork MediaFork.dmg ; mkdir -p MediaFork/api MediaFork/doc; cp test/BUILDSHARED AUTHORS BUILD COPYING CREDITS NEWS THANKS TRANSLATIONS MediaFork/doc ; cp -rp *MediaFork.app MediaFork ; cp -rp libmediafork/libmediafork.dylib MediaFork/api ; cp -rp libmediafork/mediafork.h libmediafork/common.h libmediafork/ports.h MediaFork/api ; cp -rp MediaForkCLI MediaFork ; hdiutil create -srcfolder MediaFork -format UDBZ MediaFork.dmg ; rm -rf MediaFork ) + +endif + +ifeq ($(SYSTEM),Linux) + +all: contrib/lib libmediafork/libmediafork.a MediaForkCLI + +contrib/lib: + (./configure ; cd contrib ; cp -f ../config.jam . ; jam ; cd ..) + +libmediafork/libmediafork.a: + @$(MAKE) --no-print-directory -C libmediafork all + +MediaForkCLI: + @$(MAKE) --no-print-directory -C test all + +clean: + @$(MAKE) --no-print-directory -C libmediafork clean + @$(MAKE) --no-print-directory -C test clean + +mrproper: clean + (rm -rf contrib/lib ; rm -rf contrib/include/* ) + +endif + +ifeq ($(SYSTEM),CYGWIN_NT-5.1) + +all: contrib/lib libmediafork/libmediafork.a MediaForkCLI + +contrib/lib: + (./configure ; cd contrib ; cp -f ../config.jam . ; jam.exe ; cd ..) + +libmediafork/libmediafork.a: + @$(MAKE) --no-print-directory -C libmediafork all + +MediaForkCLI: + @$(MAKE) --no-print-directory -C test all + +clean: + @$(MAKE) --no-print-directory -C libmediafork clean + @$(MAKE) --no-print-directory -C test clean + +mrproper: clean + (rm -rf contrib/lib ; rm -rf contrib/include/* ) + +endif diff --git a/configure b/configure index 02cea51b4..19df858f7 100755 --- a/configure +++ b/configure @@ -93,7 +93,6 @@ LINKLIBS = $LINKLIBS ; EOF echo -echo "To build HandBrake, run:" -echo " './jamintel' on a Mac Intel," -echo " './jam' on a PPC Mac," +echo "To build MediaFork, run:" +echo " './jam' on a Mac (or 'make' to try the UB build method)," echo " 'jam' on Linux or Windows." diff --git a/contrib/Jamfile b/contrib/Jamfile index 33e9c2e5b..94016f02f 100644 --- a/contrib/Jamfile +++ b/contrib/Jamfile @@ -11,6 +11,11 @@ else WGET = wget -O ; } +if $(OS) = UNKNOWN +{ + OS = CYGWIN ; +} + # Wget rule: downloads $(<) from the link in $(>) rule Wget { @@ -170,6 +175,42 @@ actions LibMp3Lame Wget $(SUBDIR)/lame.tar.gz : $(SUBDIR)/version_lame.txt ; LibMp3Lame $(SUBDIR)/lib/libmp3lame.a : $(SUBDIR)/lame.tar.gz ; +# libmp4v2 +rule LibMp4v2 +{ + Depends $(<) : $(>) ; + Depends lib : $(<) ; +} +if $(OS) != CYGWIN +{ + actions LibMp4v2 + { + cd `dirname $(>)` && CONTRIB=`pwd` && + rm -rf mpeg4ip && tar xzf mpeg4ip.tar.gz && cd mpeg4ip && + ./bootstrap && make -C lib/mp4v2 libmp4v2.la && + cp lib/mp4v2/.libs/libmp4v2.a $CONTRIB/lib && + cp mpeg4ip_config.h include/mpeg4ip.h include/mpeg4ip_version.h \ + include/mpeg4ip_win32.h lib/mp4v2/*.h $CONTRIB/include && + strip -S $CONTRIB/lib/libmp4v2.a + } +} +else +{ + actions LibMp4v2 + { + cd `dirname $(>)` && CONTRIB=`pwd` && + rm -rf mpeg4ip && tar xzf mpeg4ip.tar.gz && cd mpeg4ip && + patch -p1 < ../patch_mpeg4ip_cygwin.patch && ./bootstrap && make -C lib/mp4v2 libmp4v2.la && + cp lib/mp4v2/.libs/libmp4v2.a $CONTRIB/lib && + cp mpeg4ip_config.h include/mpeg4ip.h include/mpeg4ip_version.h \ + include/mpeg4ip_win32.h lib/mp4v2/*.h $CONTRIB/include && + strip -S $CONTRIB/lib/libmp4v2.a + } +} + +Wget $(SUBDIR)/mpeg4ip.tar.gz : $(SUBDIR)/version_mpeg4ip.txt ; +LibMp4v2 $(SUBDIR)/lib/libmp4v2.a : $(SUBDIR)/mpeg4ip.tar.gz ; + # libmpeg2 rule LibMpeg2 { diff --git a/contrib/patch_mpeg4ip_cygwin.patch b/contrib/patch_mpeg4ip_cygwin.patch new file mode 100644 index 000000000..0bc19cda6 --- /dev/null +++ b/contrib/patch_mpeg4ip_cygwin.patch @@ -0,0 +1,262 @@ +diff -Naur mpeg4ip/lib/mp4v2/mp4.cpp /Users/pri/t/mpeg4ip/lib/mp4v2/mp4.cpp +--- mpeg4ip/lib/mp4v2/mp4.cpp 2005-03-30 20:41:58.000000000 +0200 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4.cpp 2007-02-09 22:39:28.000000000 +0100 +@@ -1678,9 +1678,9 @@ + extern "C" bool MP4GetTrackH264SeqPictHeaders (MP4FileHandle hFile, + MP4TrackId trackId, + uint8_t ***pSeqHeader, +- uint32_t **pSeqHeaderSize, ++ u_int32_t **pSeqHeaderSize, + uint8_t ***pPictHeader, +- uint32_t **pPictHeaderSize) ++ u_int32_t **pPictHeaderSize) + { + if (MP4_IS_VALID_FILE_HANDLE(hFile)) { + try { +diff -Naur mpeg4ip/lib/mp4v2/mp4.h /Users/pri/t/mpeg4ip/lib/mp4v2/mp4.h +--- mpeg4ip/lib/mp4v2/mp4.h 2005-03-30 20:41:58.000000000 +0200 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4.h 2007-02-09 22:39:42.000000000 +0100 +@@ -631,9 +631,9 @@ + + bool MP4GetTrackVideoMetadata(MP4FileHandle hFile, + MP4TrackId trackId, +- uint8_t **ppConfig, +- uint32_t *pConfigSize); +- ++ u_int8_t **ppConfig, ++ u_int32_t *pConfigSize); ++ + bool MP4GetTrackESConfiguration( + MP4FileHandle hFile, + MP4TrackId trackId, +@@ -654,9 +654,9 @@ + bool MP4GetTrackH264SeqPictHeaders(MP4FileHandle hFile, + MP4TrackId trackId, + uint8_t ***pSeqHeaders, +- uint32_t **pSeqHeaderSize, ++ u_int32_t **pSeqHeaderSize, + uint8_t ***pPictHeader, +- uint32_t **pPictHeaderSize); ++ u_int32_t **pPictHeaderSize); + bool MP4GetTrackH264LengthSize(MP4FileHandle hFile, + MP4TrackId trackId, + uint32_t *pLength); +diff -Naur mpeg4ip/lib/mp4v2/mp4container.cpp /Users/pri/t/mpeg4ip/lib/mp4v2/mp4container.cpp +--- mpeg4ip/lib/mp4v2/mp4container.cpp 2001-11-19 18:06:58.000000000 +0100 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4container.cpp 2007-02-09 22:10:23.000000000 +0100 +@@ -207,7 +207,7 @@ + u_int32_t numProperties = m_pProperties.Size(); + + if (numProperties == 0) { +- WARNING(numProperties == 0); ++ //WARNING(numProperties == 0); + return; + } + +diff -Naur mpeg4ip/lib/mp4v2/mp4container.h /Users/pri/t/mpeg4ip/lib/mp4v2/mp4container.h +--- mpeg4ip/lib/mp4v2/mp4container.h 2001-11-19 18:06:58.000000000 +0100 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4container.h 2007-02-09 22:06:42.000000000 +0100 +@@ -1,24 +1,3 @@ +-/* +- * The contents of this file are subject to the Mozilla Public +- * License Version 1.1 (the "License"); you may not use this file +- * except in compliance with the License. You may obtain a copy of +- * the License at http://www.mozilla.org/MPL/ +- * +- * Software distributed under the License is distributed on an "AS +- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +- * implied. See the License for the specific language governing +- * rights and limitations under the License. +- * +- * The Original Code is MPEG4IP. +- * +- * The Initial Developer of the Original Code is Cisco Systems Inc. +- * Portions created by Cisco Systems Inc. are +- * Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved. +- * +- * Contributor(s): +- * Dave Mackie dmackie@cisco.com +- */ +- + #ifndef __MP4_CONTAINER_INCLUDED__ + #define __MP4_CONTAINER_INCLUDED__ + +diff -Naur mpeg4ip/lib/mp4v2/mp4descriptor.cpp /Users/pri/t/mpeg4ip/lib/mp4v2/mp4descriptor.cpp +--- mpeg4ip/lib/mp4v2/mp4descriptor.cpp 2004-02-12 03:06:02.000000000 +0100 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4descriptor.cpp 2007-02-09 22:24:17.000000000 +0100 +@@ -149,7 +149,7 @@ + u_int32_t numProperties = m_pProperties.Size(); + + if (numProperties == 0) { +- WARNING(numProperties == 0); ++ //WARNING(numProperties == 0); + return; + } + +@@ -194,7 +194,7 @@ + u_int32_t numProperties = m_pProperties.Size(); + + if (numProperties == 0) { +- WARNING(numProperties == 0); ++ //WARNING(numProperties == 0); + return; + } + for (u_int32_t i = 0; i < numProperties; i++) { +diff -Naur mpeg4ip/lib/mp4v2/mp4file.cpp /Users/pri/t/mpeg4ip/lib/mp4v2/mp4file.cpp +--- mpeg4ip/lib/mp4v2/mp4file.cpp 2005-03-30 20:41:58.000000000 +0200 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4file.cpp 2007-02-09 22:44:08.000000000 +0100 +@@ -1431,7 +1431,7 @@ + return trackId; + } + +-MP4TrackId MP4File::AddCntlTrackDefault (uint32_t timeScale, ++MP4TrackId MP4File::AddCntlTrackDefault (u_int32_t timeScale, + MP4Duration sampleDuration, + const char *type) + { +@@ -1682,7 +1682,7 @@ + (MP4Property **)&pLength) == false) || + (avcCAtom->FindProperty("avcC.sequenceEntries.sequenceParameterSetNALUnit", + (MP4Property **)&pUnit) == false)) { +- VERBOSE_ERROR(m_verbosity, WARNING("Could not find avcC properties")); ++ //VERBOSE_ERROR(m_verbosity, WARNING("Could not find avcC properties")); + return false; + } + uint32_t count = pCount->GetValue(); +@@ -1692,7 +1692,7 @@ + for (uint32_t index = 0; index < count; index++) { + if (pLength->GetValue(index) == sequenceLen) { + uint8_t *seq; +- uint32_t seqlen; ++ u_int32_t seqlen; + pUnit->GetValue(&seq, &seqlen, index); + if (memcmp(seq, pSequence, sequenceLen) == 0) { + free(seq); +@@ -1724,8 +1724,8 @@ + (MP4Property **)&pLength) == false) || + (avcCAtom->FindProperty("avcC.pictureEntries.pictureParameterSetNALUnit", + (MP4Property **)&pUnit) == false)) { +- VERBOSE_ERROR(m_verbosity, +- WARNING("Could not find avcC picture table properties")); ++ //VERBOSE_ERROR(m_verbosity, ++ //WARNING("Could not find avcC picture table properties")); + return false; + } + uint32_t count = pCount->GetValue(); +@@ -1735,7 +1735,7 @@ + for (uint32_t index = 0; index < count; index++) { + if (pLength->GetValue(index) == pictLen) { + uint8_t *seq; +- uint32_t seqlen; ++ u_int32_t seqlen; + pUnit->GetValue(&seq, &seqlen, index); + if (memcmp(seq, pPict, pictLen) == 0) { + VERBOSE_WRITE(m_verbosity, +@@ -2472,9 +2472,9 @@ + + bool MP4File::GetTrackH264SeqPictHeaders (MP4TrackId trackId, + uint8_t ***pppSeqHeader, +- uint32_t **ppSeqHeaderSize, ++ u_int32_t **ppSeqHeaderSize, + uint8_t ***pppPictHeader, +- uint32_t **ppPictHeaderSize) ++ u_int32_t **ppPictHeaderSize) + { + uint32_t count; + +@@ -2490,15 +2490,15 @@ + (MP4Property **)&pSeqLen) == false) || + (avcCAtom->FindProperty("avcC.sequenceEntries.sequenceParameterSetNALUnit", + (MP4Property **)&pSeqVal) == false)) { +- VERBOSE_ERROR(m_verbosity, WARNING("Could not find avcC properties")); ++ //VERBOSE_ERROR(m_verbosity, WARNING("Could not find avcC properties")); + return false; + } + uint8_t **ppSeqHeader = + (uint8_t **)malloc((pSeqCount->GetValue() + 1) * sizeof(uint8_t *)); + *pppSeqHeader = ppSeqHeader; + +- uint32_t *pSeqHeaderSize = +- (uint32_t *)malloc((pSeqCount->GetValue() + 1) * sizeof(uint32_t *)); ++ u_int32_t *pSeqHeaderSize = ++ (u_int32_t *)malloc((pSeqCount->GetValue() + 1) * sizeof(u_int32_t *)); + + *ppSeqHeaderSize = pSeqHeaderSize; + for (count = 0; count < pSeqCount->GetValue(); count++) { +@@ -2513,15 +2513,15 @@ + (MP4Property **)&pPictLen) == false) || + (avcCAtom->FindProperty("avcC.pictureEntries.pictureParameterSetNALUnit", + (MP4Property **)&pPictVal) == false)) { +- VERBOSE_ERROR(m_verbosity, +- WARNING("Could not find avcC picture table properties")); ++ //VERBOSE_ERROR(m_verbosity, ++ //WARNING("Could not find avcC picture table properties")); + return false; + } + uint8_t + **ppPictHeader = + (uint8_t **)malloc((pPictCount->GetValue() + 1) * sizeof(uint8_t *)); +- uint32_t *pPictHeaderSize = +- (uint32_t *)malloc((pPictCount->GetValue() + 1)* sizeof(uint32_t *)); ++ u_int32_t *pPictHeaderSize = ++ (u_int32_t *)malloc((pPictCount->GetValue() + 1)* sizeof(u_int32_t *)); + *pppPictHeader = ppPictHeader; + *ppPictHeaderSize = pPictHeaderSize; + +diff -Naur mpeg4ip/lib/mp4v2/mp4file.h /Users/pri/t/mpeg4ip/lib/mp4v2/mp4file.h +--- mpeg4ip/lib/mp4v2/mp4file.h 2005-03-30 20:41:58.000000000 +0200 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4file.h 2007-02-09 22:35:21.000000000 +0100 +@@ -329,9 +329,9 @@ + uint8_t *pLevel); + bool GetTrackH264SeqPictHeaders(MP4TrackId trackId, + uint8_t ***pSeqHeader, +- uint32_t **pSeqHeaderSize, ++ u_int32_t **pSeqHeaderSize, + uint8_t ***pPictHeader, +- uint32_t **pPictHeaderSize); ++ u_int32_t **pPictHeaderSize); + void GetTrackH264LengthSize(MP4TrackId, + uint32_t *pLength); + const char* GetHintTrackSdp(MP4TrackId hintTrackId); +diff -Naur mpeg4ip/lib/mp4v2/mp4file_io.cpp /Users/pri/t/mpeg4ip/lib/mp4v2/mp4file_io.cpp +--- mpeg4ip/lib/mp4v2/mp4file_io.cpp 2004-07-15 20:09:48.000000000 +0200 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4file_io.cpp 2007-02-09 22:44:47.000000000 +0100 +@@ -86,7 +86,7 @@ + } + + ASSERT(pBytes); +- WARNING(m_numReadBits > 0); ++ //WARNING(m_numReadBits > 0); + + if (pFile == NULL) { + pFile = m_pFile; +diff -Naur mpeg4ip/lib/mp4v2/mp4property.cpp /Users/pri/t/mpeg4ip/lib/mp4v2/mp4property.cpp +--- mpeg4ip/lib/mp4v2/mp4property.cpp 2004-08-23 20:28:21.000000000 +0200 ++++ /Users/pri/t/mpeg4ip/lib/mp4v2/mp4property.cpp 2007-02-09 22:47:04.000000000 +0100 +@@ -636,7 +636,7 @@ + u_int32_t numProperties = m_pProperties.Size(); + + if (numProperties == 0) { +- WARNING(numProperties == 0); ++ //WARNING(numProperties == 0); + return; + } + +@@ -670,7 +670,7 @@ + u_int32_t numProperties = m_pProperties.Size(); + + if (numProperties == 0) { +- WARNING(numProperties == 0); ++ //WARNING(numProperties == 0); + return; + } + +@@ -709,7 +709,7 @@ + u_int32_t numProperties = m_pProperties.Size(); + + if (numProperties == 0) { +- WARNING(numProperties == 0); ++ //WARNING(numProperties == 0); + return; + } + diff --git a/contrib/version_a52dec.txt b/contrib/version_a52dec.txt index 3aa0ed89f..37aee8622 100644 --- a/contrib/version_a52dec.txt +++ b/contrib/version_a52dec.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/a52dec-0.7.4.tar.gz +http://download.mediafork.dynalias.com/contrib/a52dec-0.7.4.tar.gz diff --git a/contrib/version_faac.txt b/contrib/version_faac.txt index 5974895ef..807360621 100644 --- a/contrib/version_faac.txt +++ b/contrib/version_faac.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/faac-1.24.tar.gz +http://download.mediafork.dynalias.com/contrib/faac-1.24.tar.gz diff --git a/contrib/version_ffmpeg.txt b/contrib/version_ffmpeg.txt index 8a76b72f7..e7934a0ee 100644 --- a/contrib/version_ffmpeg.txt +++ b/contrib/version_ffmpeg.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/ffmpeg-7444.tar.gz +http://download.mediafork.dynalias.com/contrib/ffmpeg-7444.tar.gz diff --git a/contrib/version_lame.txt b/contrib/version_lame.txt index d001c67be..0563f9855 100644 --- a/contrib/version_lame.txt +++ b/contrib/version_lame.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/lame-3.96.1.tar.gz +http://download.mediafork.dynalias.com/contrib/lame-3.96.1.tar.gz diff --git a/contrib/version_libdvdcss.txt b/contrib/version_libdvdcss.txt index 555f390eb..c10c39de2 100644 --- a/contrib/version_libdvdcss.txt +++ b/contrib/version_libdvdcss.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/libdvdcss-1.2.9.tar.gz +http://download.mediafork.dynalias.com/contrib/libdvdcss-1.2.9.tar.gz diff --git a/contrib/version_libdvdread.txt b/contrib/version_libdvdread.txt index ff442ba80..e230e3cb7 100644 --- a/contrib/version_libdvdread.txt +++ b/contrib/version_libdvdread.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/libdvdread-20050928.tar.gz +http://download.mediafork.dynalias.com/contrib/libdvdread-20050928.tar.gz diff --git a/contrib/version_libogg.txt b/contrib/version_libogg.txt index f7e457399..e7cee15a3 100644 --- a/contrib/version_libogg.txt +++ b/contrib/version_libogg.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/libogg-1.1.2.tar.gz +http://download.mediafork.dynalias.com/contrib/libogg-1.1.2.tar.gz diff --git a/contrib/version_libsamplerate.txt b/contrib/version_libsamplerate.txt index d8dd6a1d6..636ace2f6 100644 --- a/contrib/version_libsamplerate.txt +++ b/contrib/version_libsamplerate.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/libsamplerate-0.1.2.tar.gz +http://download.mediafork.dynalias.com/contrib/libsamplerate-0.1.2.tar.gz diff --git a/contrib/version_libvorbis.txt b/contrib/version_libvorbis.txt index 8761077f1..3235254e6 100644 --- a/contrib/version_libvorbis.txt +++ b/contrib/version_libvorbis.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/libvorbis-1.1.1.tar.gz +http://download.mediafork.dynalias.com/contrib/libvorbis-1.1.1.tar.gz diff --git a/contrib/version_mpeg2dec.txt b/contrib/version_mpeg2dec.txt index e58f080ed..ca31e0ce6 100644 --- a/contrib/version_mpeg2dec.txt +++ b/contrib/version_mpeg2dec.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/mpeg2dec-20051112.tar.gz +http://download.mediafork.dynalias.com/contrib/mpeg2dec-20051112.tar.gz diff --git a/contrib/version_mpeg4ip.txt b/contrib/version_mpeg4ip.txt new file mode 100644 index 000000000..a374de85f --- /dev/null +++ b/contrib/version_mpeg4ip.txt @@ -0,0 +1 @@ +http://download.mediafork.dynalias.com/contrib/mpeg4ip-1.3.tar.gz \ No newline at end of file diff --git a/contrib/version_x264.txt b/contrib/version_x264.txt index eff0d42c3..73a659be2 100644 --- a/contrib/version_x264.txt +++ b/contrib/version_x264.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/x264-r604.tar.gz +http://download.mediafork.dynalias.com/contrib/x264-r604.tar.gz diff --git a/contrib/version_xvidcore.txt b/contrib/version_xvidcore.txt index 0a8812c08..8906405ef 100644 --- a/contrib/version_xvidcore.txt +++ b/contrib/version_xvidcore.txt @@ -1 +1 @@ -http://download.handbrake.dynalias.com/contrib/xvidcore-1.1.0.tar.gz +http://download.mediafork.dynalias.com/contrib/xvidcore-1.1.0.tar.gz diff --git a/jam b/jam index 7952f3865fb42d7e666b48c74c6ad03d835ba542..12884f5d20cac3ce47e8c6d33e48df1d12a5ed13 100755 GIT binary patch delta 67346 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 JD{pd`{{fIwRJ8yA delta 13 UcmeC#!E@z5Ym>k>0mdu!04tgW)c^nh diff --git a/jamintel b/jamintel deleted file mode 100755 index 7dc2e788c57a0548409b3461f5ec5fa54a080544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101388 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

xhtlT4u2^5OzyCq;?qDy|l774gw z8B>x^O_do!#uI%gL?z*a&cwO9On*8ig6`7X*zq**gmVP50ND5t6&}y zIi$RqsGu+&7=p;-)JPeB*))kB*8$}{f@h%@zXwk<;^zp_fd5TH%4tO992?`pYwZb= zAM6>}C3hib#>TjEI!oin#war^a|PJ$Vi_knHntn@mcyHljTJ;S1pO2q8#C`SHikbi z0Nj9fbQT_3WhK zOgA=Gvd=;uWlIz*BajRAOZkVD){5>`%DqA`)l`wC9vxJ)Z#VY^r#$gP7AcMF@?*JA zoGpF0Z#XZrJJy&L!}E8K6UR|64sMrL%5>#>20Ifh<2})SvXS;+aqqg~DC4P*AtpkJwIGR%tl^w|dffA~QHIjF zwwyK4*nl>7I9tlA8SftEa%iy$w2hDTz396n)2Aymi|94s+JTFFKQ1bg&_g#K&sX*GI4U7J-zDW$}raXsJ9lr2Rb5!cJg6~m1(UPv0$0R@8ieC7vBIcYCwnTy{Q z!Se)^>%e`USh130yNaRR;WE}nB2LpIwoXc#LMH3loOn%8`9(nxW@g`b-vu7$r#Ijs ze%6opl*3Bc?HcK;U%GtpatOx;Xf-87pT-Txs*e-HIq?zVBzbU. -It may be used under the terms of the GNU General Public License. */ - -#include - -#include "hb.h" - -int64_t ff_gcd(int64_t a, int64_t b); - -struct hb_mux_object_s -{ - HB_MUX_COMMON; - - hb_job_t * job; - - AVFormatContext * format; -}; - -struct hb_mux_data_s -{ - int track; -}; - -/********************************************************************** -* MP4Init -********************************************************************** -* Allocates hb_mux_data_t structures, create file and write headers -*********************************************************************/ -static int MP4Init( hb_mux_object_t * m ) -{ - hb_job_t * job = m->job; - hb_title_t * title = job->title; - - hb_audio_t * audio; - int i; - AVFormatContext * oc; - AVStream *st; - AVFormatParameters params; - - register_protocol(&file_protocol); - //movenc_init(); - av_register_all(); - - oc = av_alloc_format_context(); - - if( job->mux & HB_MUX_PSP ) - { - oc->oformat = guess_format( "psp", NULL, NULL ); - hb_log( "using format psp" ); - } - else if( job->mux & HB_MUX_IPOD ) - { - /* added this format to ffmpeg source */ - oc->oformat = guess_format( "ipod", NULL, NULL ); - hb_log( "using format ipod" ); - } - else - { - oc->oformat = guess_format( "mp4", NULL, NULL ); - hb_log( "using format mp4" ); - } - if( !oc->oformat ) - { - hb_log( "guess_format failed" ); - return 1; - } - - hb_log( "using oformat: %s", oc->oformat->name ); - - snprintf( oc->filename, sizeof( oc->filename ), - "%s", job->file ); - - st = av_new_stream( oc, oc->nb_streams ); - if( !st ) - { - hb_log( "av_new_stream failed" ); - return 1; - } - st->stream_copy = 1; - st->codec->flags |= CODEC_FLAG_GLOBAL_HEADER; - st->codec->codec_type = CODEC_TYPE_VIDEO; - st->codec->codec_id = ( job->vcodec == HB_VCODEC_X264 ) ? -CODEC_ID_H264 : CODEC_ID_MPEG4; - st->codec->extradata= job->config.mpeg4.bytes; - st->codec->extradata_size= job->config.mpeg4.length; - st->codec->bit_rate = 1000 * job->vbitrate; - i = ff_gcd( job->vrate_base, job->vrate ); - st->codec->time_base = (AVRational){ job->vrate_base / i, job->vrate / i }; - - st->codec->pix_fmt = PIX_FMT_YUV420P; - st->codec->width = job->width; - st->codec->height = job->height; - st->codec->has_b_frames = 0; - - job->mux_data = malloc( sizeof( hb_mux_data_t ) ); - job->mux_data->track = 0; - - for( i = 0; i < hb_list_count( title->list_audio ); i++ ) - { - audio = hb_list_item( title->list_audio, i ); - - audio->mux_data = malloc( sizeof( hb_mux_data_t ) ); - audio->mux_data->track = i + 1; - - st = av_new_stream( oc, oc->nb_streams ); - if( !st ) - { - hb_log( "av_new_stream failed" ); - return 1; - } - st->stream_copy = 1; - st->codec->flags |= CODEC_FLAG_GLOBAL_HEADER; - st->codec->codec_type = CODEC_TYPE_AUDIO; - st->codec->codec_id = CODEC_ID_AAC; - st->codec->bit_rate = 1000 * job->abitrate; - st->codec->extradata= audio->config.aac.bytes; - st->codec->extradata_size= audio->config.aac.length; - st->codec->time_base = (AVRational){ 1, job->arate }; - st->codec->channels = 2; - st->codec->sample_rate = job->arate; - st->codec->frame_size = 1024; - st->codec->block_align = 0; - } - - oc->timestamp = 0; - if( url_fopen( &oc->pb, job->file, URL_WRONLY ) < 0 ) - { - hb_log( "url_fopen failed (%s)", job->file ); - return 1; - } - - memset( ¶ms, 0, sizeof( params ) ); - if( av_set_parameters( oc, ¶ms ) < 0 ) - { - hb_log( "av_set_parameters failed" ); - return 1; - } - - oc->packet_size= 0; - oc->mux_rate= 0; - oc->preload= (int)(0.5*AV_TIME_BASE); - oc->max_delay= (int)(0.7*AV_TIME_BASE); - oc->loop_output = AVFMT_NOOUTPUTLOOP; - - if( av_write_header( oc ) < 0 ) - { - hb_log( "av_write_header failed" ); - return 1; - } - - m->format = oc; - - return 0; -} - -static int MP4Mux( hb_mux_object_t * m, hb_mux_data_t * mux_data, - hb_buffer_t * buf ) -{ - AVPacket pkt; - av_init_packet(&pkt); - - pkt.stream_index = mux_data->track; - pkt.data = buf->data; - pkt.size = buf->size; - pkt.pts = buf->start; - - if( buf->key ) - { - pkt.flags |= PKT_FLAG_KEY; - } - - av_interleaved_write_frame( m->format, &pkt ); - - return 0; -} - -static int MP4End( hb_mux_object_t * m ) -{ - av_write_trailer( m->format ); - url_fclose( &m->format->pb ); - av_free( m->format ); - - return 0; -} - -hb_mux_object_t * hb_mux_mp4_init( hb_job_t * job ) -{ - hb_mux_object_t * m = calloc( sizeof( hb_mux_object_t ), 1 ); - m->init = MP4Init; - m->mux = MP4Mux; - m->end = MP4End; - m->job = job; - return m; -} - diff --git a/libhb/Jamfile b/libmediafork/Jamfile similarity index 52% rename from libhb/Jamfile rename to libmediafork/Jamfile index 29f9c7774..10a30ed32 100644 --- a/libhb/Jamfile +++ b/libmediafork/Jamfile @@ -4,15 +4,16 @@ # Homepage: . # It may be used under the terms of the GNU General Public License. -SubDir TOP libhb ; +SubDir TOP libmediafork ; -LIBHB_SRC = -common.c hb.c ports.c scan.c work.c decmpeg2.c encavcodec.c update.c +LIBMEDIAFORK_SRC = +ipodutil.cpp common.c mediafork.c ports.c scan.c work.c decmpeg2.c encavcodec.c update.c demuxmpeg.c fifo.c render.c reader.c muxcommon.c muxmp4.c sync.c decsub.c deca52.c encfaac.c declpcm.c encx264.c decavcodec.c encxvid.c muxavi.c enclame.c muxogm.c encvorbis.c dvd.c ; -Library libhb : $(LIBHB_SRC) ; +Library libmediafork : $(LIBMEDIAFORK_SRC) ; -ObjectCcFlags $(LIBHB_SRC) : -I$(TOP)/contrib/include ; -ObjectDefines $(LIBHB_SRC) : __LIBHB__ ; +ObjectCcFlags $(LIBMEDIAFORK_SRC) : -I$(TOP)/contrib/include ; +ObjectDefines $(LIBMEDIAFORK_SRC) : __LIBMEDIAFORK__ ; +ObjectC++Flags $(LIBMEDIAFORK_SRC) : -I$(TOP)/contrib/include ; diff --git a/libmediafork/Makefile b/libmediafork/Makefile new file mode 100644 index 000000000..0ce595c44 --- /dev/null +++ b/libmediafork/Makefile @@ -0,0 +1,105 @@ +SYSTEM = $(shell uname -s) + +ifeq ($(SYSTEM),Linux) + SYSDEF=-DSYS_LINUX +endif + +ifeq ($(SYSTEM),CYGWIN_NT-5.1) + SYSDEF=-DSYS_CYGWIN +endif + +ifeq ($(SYSTEM),FreeBSD) + CFLAGS += -DSYS_FREEBSD + LDFLAGS += -pthread -lm +endif + +ifeq ($(SYSTEM),NetBSD) + CFLAGS += -DSYS_NETBSD + LDFLAGS += -lpthread -lm +endif + +ifeq ($(SYSTEM),Linux) + CFLAGS += -DSYS_LINUX + LDFLAGS += -lpthread -lm +endif + +SRCS = common.c mediafork.c ports.c scan.c work.c decmpeg2.c encavcodec.c \ + update.c demuxmpeg.c fifo.c render.c reader.c muxcommon.c \ + muxmp4.c sync.c decsub.c deca52.c encfaac.c declpcm.c encx264.c \ + decavcodec.c encxvid.c muxavi.c enclame.c muxogm.c encvorbis.c \ + dvd.c ipodutil.cpp +OTMP = $(SRCS:%.c=%.o) +OBJS = $(OTMP:%.cpp=%.o) + +ifeq ($(SYSTEM),CYGWIN_NT-5.1) +CONTRIBS = ../contrib/lib/liba52.a ../contrib/lib/libavformat.a \ + ../contrib/lib/libavcodec.a ../contrib/lib/libavutil.a \ + ../contrib/lib/libdvdread.a \ + ../contrib/lib/libfaac.a ../contrib/lib/libmp3lame.a \ + ../contrib/lib/libmpeg2.a ../contrib/lib/libmpeg2convert.a \ + ../contrib/lib/libvorbis.a ../contrib/lib/libvorbisenc.a \ + ../contrib/lib/libvorbisfile.a ../contrib/lib/libogg.a \ + ../contrib/lib/libsamplerate.a ../contrib/lib/libx264.a \ + ../contrib/lib/libxvidcore.a ../contrib/lib/libmp4v2.a +else +CONTRIBS = ../contrib/lib/liba52.a ../contrib/lib/libavformat.a \ + ../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 ../contrib/lib/libmpeg2convert.a \ + ../contrib/lib/libvorbis.a ../contrib/lib/libvorbisenc.a \ + ../contrib/lib/libvorbisfile.a ../contrib/lib/libogg.a \ + ../contrib/lib/libsamplerate.a ../contrib/lib/libx264.a \ + ../contrib/lib/libxvidcore.a ../contrib/lib/libmp4v2.a +endif +BUILD = $(shell date "+%Y%m%d") +CFLAGS += -I../contrib/include -D__LIBMEDIAFORK__ -DUSE_PTHREAD -DHB_VERSION=\"0.8.0b1\" -DHB_BUILD=$(BUILD) $(SYSDEF) + +CXXFLAGS += -I../contrib/include -D__LIBMEDIAFORK__ -DUSE_PTHREAD -DHB_VERSION=\"0.8.0b1\" -DHB_BUILD=$(BUILD) $(SYSDEF) + +ifeq ($(SYSTEM),CYGWIN_NT-5.1) +all: libmediafork.a libmediafork.dll +else +all: libmediafork.a libmediafork.so +endif + +libmediafork.a: $(OBJS) + @echo "Library $@" + @ar ru $@ $(OBJS) + @ranlib $@ + +libmediafork.so: $(OBJS) + @echo "Shared library $@" + @g++ -o $@ $(OBJS) $(CONTRIBS) -shared $(CFLAGS) || \ + ( echo "Compile line for $@ was:"; echo $$CMD; false ) + +libmediafork.dll: $(OBJS) + @echo "Shared library $@" + @g++ -o $@ $(OBJS) $(CONTRIBS) -shared $(CFLAGS) || \ + ( echo "Compile line for $@ was:"; echo $$CMD; false ) + +%.o: %.c + @echo "Cc $@" + @CMD="$(CC) $(CFLAGS) -o $@ -c $<"; $$CMD || \ + ( echo "Compile line for $@ was:"; echo $$CMD; false ) +%.o: %.cpp + @echo "Cc $@" + @CMD="$(CC) $(CFLAGS) -o $@ -c $<"; $$CMD || \ + ( echo "Compile line for $@ was:"; echo $$CMD; false ) + + +clean: + @echo "Clean libmediafork.a" + @$(RM) libmediafork.* + @echo "Clean libmediafork.so" + @$(RM) libmediafork.so + @echo "Clean $(OBJS)" + @$(RM) $(OBJS) + +.depend: $(SRCS) + @echo "Checking dependencies..." + @$(RM) .depend + @$(foreach SRC, $(SRCS), $(CC) -MM $(SRC) $(CFLAGS) >> .depend;) + +-include .depend + diff --git a/libhb/common.c b/libmediafork/common.c similarity index 95% rename from libhb/common.c rename to libmediafork/common.c index e9d366f75..7b41a93fb 100644 --- a/libhb/common.c +++ b/libmediafork/common.c @@ -36,6 +36,29 @@ int hb_audio_bitrates_count = sizeof( hb_audio_bitrates ) / sizeof( hb_rate_t ); int hb_audio_bitrates_default = 8; /* 128 kbps */ +/********************************************************************** + * hb_reduce + ********************************************************************** + * Given a numerator (num) and a denominator (den), reduce them to an + * equivalent fraction and store the result in x and y. + *********************************************************************/ +void hb_reduce( int *x, int *y, int num, int den ) +{ + int lower = MIN( num, den ); + int i; + *x = num; + *y = den; + for( i = lower - 1; i > 1; --i ) + { + if( ( num % i == 0 ) && ( den % i == 0 ) ) + { + *x = num / i; + *y = den / i; + break; + } + } +} + /********************************************************************** * hb_fix_aspect ********************************************************************** diff --git a/libhb/common.h b/libmediafork/common.h similarity index 92% rename from libhb/common.h rename to libmediafork/common.h index 859711f81..ed9d7c59a 100644 --- a/libhb/common.h +++ b/libmediafork/common.h @@ -7,6 +7,7 @@ #ifndef HB_COMMON_H #define HB_COMMON_H +#include #include #include #include @@ -44,7 +45,7 @@ typedef struct hb_fifo_s hb_fifo_t; typedef struct hb_lock_s hb_lock_t; #include "ports.h" -#ifdef __LIBHB__ +#ifdef __LIBMEDIAFORK__ #include "internal.h" #endif @@ -55,6 +56,8 @@ void hb_list_rem( hb_list_t *, void * ); void * hb_list_item( hb_list_t *, int ); void hb_list_close( hb_list_t ** ); +void hb_reduce( int *x, int *y, int num, int den ); + #define HB_KEEP_WIDTH 0 #define HB_KEEP_HEIGHT 1 void hb_fix_aspect( hb_job_t * job, int keep ); @@ -92,17 +95,24 @@ struct hb_job_s int chapter_end; /* Picture settings: - crop: must be multiples of 2 (top/bottom/left/right) - deinterlace: 0 or 1 - width: must be a multiple of 16 - height: must be a multiple of 16 - keep_ratio: used by UIs */ + crop: must be multiples of 2 (top/bottom/left/right) + deinterlace: 0 or 1 + width: must be a multiple of 16 + height: must be a multiple of 16 + keep_ratio: used by UIs + pixel_ratio: store pixel aspect ratio in the video + pixel_aspect_width: numerator for pixel aspect ratio + pixel_aspect_height: denominator for pixel aspect ratio */ + int crop[4]; int deinterlace; int width; int height; int keep_ratio; int grayscale; + int pixel_ratio; + int pixel_aspect_width; + int pixel_aspect_height; /* Video settings: vcodec: output codec @@ -166,7 +176,7 @@ struct hb_job_s int mux; char * file; -#ifdef __LIBHB__ +#ifdef __LIBMEDIAFORK__ /* Internal data */ hb_handle_t * h; hb_lock_t * pause; @@ -200,7 +210,7 @@ struct hb_audio_s int bitrate; int channels; -#ifdef __LIBHB__ +#ifdef __LIBMEDIAFORK__ /* Internal data */ hb_fifo_t * fifo_in; /* AC3/MPEG/LPCM ES */ hb_fifo_t * fifo_raw; /* Raw audio */ @@ -235,7 +245,7 @@ struct hb_subtitle_s int id; char lang[1024]; -#ifdef __LIBHB__ +#ifdef __LIBMEDIAFORK__ /* Internal data */ hb_fifo_t * fifo_in; /* SPU ES */ hb_fifo_t * fifo_raw; /* Decodec SPU */ @@ -336,7 +346,7 @@ struct hb_work_object_s int id; char * name; -#ifdef __LIBHB__ +#ifdef __LIBMEDIAFORK__ int (* init) ( hb_work_object_t *, hb_job_t * ); int (* work) ( hb_work_object_t *, hb_buffer_t **, hb_buffer_t ** ); diff --git a/libhb/deca52.c b/libmediafork/deca52.c similarity index 99% rename from libhb/deca52.c rename to libmediafork/deca52.c index b18acf641..c7688ed3b 100644 --- a/libhb/deca52.c +++ b/libmediafork/deca52.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "a52dec/a52.h" diff --git a/libhb/decavcodec.c b/libmediafork/decavcodec.c similarity index 99% rename from libhb/decavcodec.c rename to libmediafork/decavcodec.c index 4d74fc68f..dfc61dcd5 100644 --- a/libhb/decavcodec.c +++ b/libmediafork/decavcodec.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "ffmpeg/avcodec.h" diff --git a/libhb/declpcm.c b/libmediafork/declpcm.c similarity index 98% rename from libhb/declpcm.c rename to libmediafork/declpcm.c index f6a703d38..718cf559d 100644 --- a/libhb/declpcm.c +++ b/libmediafork/declpcm.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" int declpcmInit( hb_work_object_t *, hb_job_t * ); int declpcmWork( hb_work_object_t *, hb_buffer_t **, hb_buffer_t ** ); diff --git a/libhb/decmpeg2.c b/libmediafork/decmpeg2.c similarity index 99% rename from libhb/decmpeg2.c rename to libmediafork/decmpeg2.c index 214444a05..e3188dfe2 100644 --- a/libhb/decmpeg2.c +++ b/libmediafork/decmpeg2.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "mpeg2dec/mpeg2.h" diff --git a/libhb/decsub.c b/libmediafork/decsub.c similarity index 99% rename from libhb/decsub.c rename to libmediafork/decsub.c index 3666ea3fe..f68e763e1 100644 --- a/libhb/decsub.c +++ b/libmediafork/decsub.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" struct hb_work_private_s { diff --git a/libhb/demuxmpeg.c b/libmediafork/demuxmpeg.c similarity index 99% rename from libhb/demuxmpeg.c rename to libmediafork/demuxmpeg.c index 721478e80..54bef2b47 100644 --- a/libhb/demuxmpeg.c +++ b/libmediafork/demuxmpeg.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" /* Basic MPEG demuxer, only works with DVDs (2048 bytes packets) */ diff --git a/libhb/dvd.c b/libmediafork/dvd.c similarity index 99% rename from libhb/dvd.c rename to libmediafork/dvd.c index 4082a18d3..04695a3e2 100644 --- a/libhb/dvd.c +++ b/libmediafork/dvd.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "lang.h" #include "dvdread/ifo_read.h" diff --git a/libhb/encavcodec.c b/libmediafork/encavcodec.c similarity index 94% rename from libhb/encavcodec.c rename to libmediafork/encavcodec.c index f04606906..c1d7df9d2 100644 --- a/libhb/encavcodec.c +++ b/libmediafork/encavcodec.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "ffmpeg/avcodec.h" @@ -65,6 +65,15 @@ int encavcodecInit( hb_work_object_t * w, hb_job_t * job ) context->gop_size = 10 * job->vrate / job->vrate_base; context->pix_fmt = PIX_FMT_YUV420P; + if( job->pixel_ratio ) + { + context->sample_aspect_ratio.num = job->pixel_aspect_width; + context->sample_aspect_ratio.den = job->pixel_aspect_height; + + hb_log( "encavcodec: encoding with stored aspect %d/%d", + job->pixel_aspect_width, job->pixel_aspect_height ); + } + if( job->mux & ( HB_MUX_MP4 | HB_MUX_PSP ) ) { context->flags |= CODEC_FLAG_GLOBAL_HEADER; diff --git a/libhb/encfaac.c b/libmediafork/encfaac.c similarity index 99% rename from libhb/encfaac.c rename to libmediafork/encfaac.c index 8e2bd4355..19787a560 100644 --- a/libhb/encfaac.c +++ b/libmediafork/encfaac.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "faac.h" diff --git a/libhb/enclame.c b/libmediafork/enclame.c similarity index 99% rename from libhb/enclame.c rename to libmediafork/enclame.c index f663e62eb..82bca1132 100644 --- a/libhb/enclame.c +++ b/libmediafork/enclame.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "lame/lame.h" diff --git a/libhb/encvorbis.c b/libmediafork/encvorbis.c similarity index 99% rename from libhb/encvorbis.c rename to libmediafork/encvorbis.c index 4bdb6efeb..1e916a447 100644 --- a/libhb/encvorbis.c +++ b/libmediafork/encvorbis.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "vorbis/vorbisenc.h" diff --git a/libhb/encx264.c b/libmediafork/encx264.c similarity index 55% rename from libhb/encx264.c rename to libmediafork/encx264.c index 1bc24866c..cdd8e9b69 100644 --- a/libhb/encx264.c +++ b/libmediafork/encx264.c @@ -1,12 +1,12 @@ /* $Id: encx264.c,v 1.21 2005/11/04 13:09:41 titer Exp $ -This file is part of the HandBrake source code. -Homepage: . -It may be used under the terms of the GNU General Public License. */ + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #include -#include "hb.h" +#include "mediafork.h" #include "x264.h" @@ -29,32 +29,31 @@ struct hb_work_private_s x264_t * x264; x264_picture_t pic_in; x264_picture_t pic_out; - + char filename[1024]; }; /*********************************************************************** -* hb_work_encx264_init -*********************************************************************** -* -**********************************************************************/ + * hb_work_encx264_init + *********************************************************************** + * + **********************************************************************/ int encx264Init( hb_work_object_t * w, hb_job_t * job ) { x264_param_t param; x264_nal_t * nal; int nal_count; - int i, size; - + hb_work_private_t * pv = calloc( 1, sizeof( hb_work_private_t ) ); w->private_data = pv; - + pv->job = job; - + memset( pv->filename, 0, 1024 ); hb_get_tempory_filename( job->h, pv->filename, "x264.log" ); - + x264_param_default( ¶m ); - + param.i_threads = hb_get_cpu_count(); param.i_width = job->width; param.i_height = job->height; @@ -62,75 +61,85 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job ) param.i_fps_den = job->vrate_base; param.i_keyint_max = 20 * job->vrate / job->vrate_base; param.i_log_level = X264_LOG_NONE; - - if( job->h264_level ) - { + if( job->h264_level ) + { param.i_threads = 1; param.b_cabac = 0; param.i_level_idc = job->h264_level; hb_log( "encx264: encoding at level %i", param.i_level_idc ); - } - - /* Slightly faster with minimal quality lost */ - param.analyse.i_subpel_refine = 4; - - if( job->vquality >= 0.0 && job->vquality <= 1.0 ) - { - switch(job->crf) + } + + /* Slightly faster with minimal quality lost */ + param.analyse.i_subpel_refine = 4; + + if( job->pixel_ratio ) + { + param.vui.i_sar_width = job->pixel_aspect_width; + param.vui.i_sar_height = job->pixel_aspect_height; + + hb_log( "encx264: encoding with stored aspect %d/%d", + param.vui.i_sar_width, param.vui.i_sar_height ); + } + + + if( job->vquality >= 0.0 && job->vquality <= 1.0 ) + { + switch(job->crf) { case 1: /*Constant RF*/ param.rc.i_rc_method = X264_RC_CRF; param.rc.f_rf_constant = 51 - job->vquality * 51; - hb_log( "encx264: Encoding at constant RF %f", param.rc.f_rf_constant ); + hb_log( "encx264: Encoding at constant RF %f", + param.rc.f_rf_constant ); break; - + case 0: /*Constant QP*/ param.rc.i_rc_method = X264_RC_CQP; - param.rc.i_qp_constant = 51 - job->vquality * 51; - hb_log( "encx264: encoding at constant QP %d", - param.rc.i_qp_constant ); + param.rc.i_qp_constant = 51 - job->vquality * 51; + hb_log( "encx264: encoding at constant QP %d", + param.rc.i_qp_constant ); break; } - } - else - { + } + else + { /* Rate control */ - param.rc.i_rc_method = X264_RC_ABR; - param.rc.i_bitrate = job->vbitrate; - switch( job->pass ) - { - case 1: - param.rc.b_stat_write = 1; - param.rc.psz_stat_out = pv->filename; - break; - case 2: - param.rc.b_stat_read = 1; - param.rc.psz_stat_in = pv->filename; - break; - } - } - + param.rc.i_rc_method = X264_RC_ABR; + param.rc.i_bitrate = job->vbitrate; + switch( job->pass ) + { + case 1: + param.rc.b_stat_write = 1; + param.rc.psz_stat_out = pv->filename; + break; + case 2: + param.rc.b_stat_read = 1; + param.rc.psz_stat_in = pv->filename; + break; + } + } + hb_log( "encx264: opening libx264 (pass %d)", job->pass ); pv->x264 = x264_encoder_open( ¶m ); - - w->config->mpeg4.length = 0; - + x264_encoder_headers( pv->x264, &nal, &nal_count ); - - for( i = 0; i < nal_count; i++ ) - { - size = sizeof( w->config->mpeg4.bytes ) - w->config->mpeg4.length; - x264_nal_encode( &w->config->mpeg4.bytes[w->config->mpeg4.length], - &size, 1, &nal[i] ); - w->config->mpeg4.length += size; - } - + + /* Sequence Parameter Set */ + w->config->h264.sps_length = 1 + nal[1].i_payload; + w->config->h264.sps[0] = 0x67; + memcpy( &w->config->h264.sps[1], nal[1].p_payload, nal[1].i_payload ); + + /* Picture Parameter Set */ + w->config->h264.pps_length = 1 + nal[2].i_payload; + w->config->h264.pps[0] = 0x68; + memcpy( &w->config->h264.pps[1], nal[2].p_payload, nal[2].i_payload ); + x264_picture_alloc( &pv->pic_in, X264_CSP_I420, job->width, job->height ); - + return 0; } @@ -138,12 +147,12 @@ void encx264Close( hb_work_object_t * w ) { hb_work_private_t * pv = w->private_data; x264_encoder_close( pv->x264 ); - + /* TODO */ } int encx264Work( hb_work_object_t * w, hb_buffer_t ** buf_in, - hb_buffer_t ** buf_out ) + hb_buffer_t ** buf_out ) { hb_work_private_t * pv = w->private_data; hb_job_t * job = pv->job; @@ -151,7 +160,7 @@ int encx264Work( hb_work_object_t * w, hb_buffer_t ** buf_in, int i_nal; x264_nal_t * nal; int i; - + /* XXX avoid this memcpy ? */ memcpy( pv->pic_in.img.plane[0], in->data, job->width * job->height ); if( job->grayscale ) @@ -167,36 +176,65 @@ int encx264Work( hb_work_object_t * w, hb_buffer_t ** buf_in, memcpy( pv->pic_in.img.plane[2], in->data + 5 * job->width * job->height / 4, job->width * job->height / 4 ); } - + pv->pic_in.i_type = X264_TYPE_AUTO; pv->pic_in.i_qpplus1 = 0; - + x264_encoder_encode( pv->x264, &nal, &i_nal, &pv->pic_in, &pv->pic_out ); - - - + /* Should be way too large */ buf = hb_buffer_init( 3 * job->width * job->height / 2 ); + buf->size = 0; buf->start = in->start; buf->stop = in->stop; - buf->key = ( pv->pic_out.i_type == X264_TYPE_IDR ); - - - buf->size = 0; + buf->key = 0; + for( i = 0; i < i_nal; i++ ) { int size, data; + data = buf->alloc - buf->size; - if( ( size = x264_nal_encode( &buf->data[buf->size], &data, - 1, &nal[i] ) ) > 0 ) + if( ( size = x264_nal_encode( buf->data + buf->size, &data, + 1, &nal[i] ) ) < 1 ) + { + continue; + } + + if( job->mux & HB_MUX_AVI ) { + if( nal[i].i_ref_idc == NAL_PRIORITY_HIGHEST ) + { + buf->key = 1; + } buf->size += size; + continue; + } + + /* H.264 in .mp4 */ + switch( buf->data[buf->size+4] & 0x1f ) + { + case 0x7: + case 0x8: + /* SPS, PPS */ + break; + + default: + /* H.264 in mp4 (stolen from mp4creator) */ + buf->data[buf->size+0] = ( ( size - 4 ) >> 24 ) & 0xFF; + buf->data[buf->size+1] = ( ( size - 4 ) >> 16 ) & 0xFF; + buf->data[buf->size+2] = ( ( size - 4 ) >> 8 ) & 0xFF; + buf->data[buf->size+3] = ( ( size - 4 ) >> 0 ) & 0xFF; + if( nal[i].i_ref_idc == NAL_PRIORITY_HIGHEST ) + { + buf->key = 1; + } + buf->size += size; } } - + *buf_out = buf; - + return HB_WORK_OK; } diff --git a/libhb/encxvid.c b/libmediafork/encxvid.c similarity index 97% rename from libhb/encxvid.c rename to libmediafork/encxvid.c index 87c42b0a4..64b38a405 100644 --- a/libhb/encxvid.c +++ b/libmediafork/encxvid.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "xvid.h" @@ -162,6 +162,13 @@ int encxvidWork( hb_work_object_t * w, hb_buffer_t ** buf_in, frame.vol_flags = 0; frame.vop_flags = XVID_VOP_HALFPEL | XVID_VOP_INTER4V | XVID_VOP_TRELLISQUANT | XVID_VOP_HQACPRED; + if( job->pixel_ratio ) + { + frame.par = XVID_PAR_EXT; + frame.par_width = job->pixel_aspect_width; + frame.par_height = job->pixel_aspect_height; + } + if( job->grayscale ) { frame.vop_flags |= XVID_VOP_GREYSCALE; diff --git a/libhb/fifo.c b/libmediafork/fifo.c similarity index 99% rename from libhb/fifo.c rename to libmediafork/fifo.c index 93e3e162e..9e5ea15f8 100644 --- a/libhb/fifo.c +++ b/libmediafork/fifo.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #ifndef SYS_DARWIN #include diff --git a/libhb/internal.h b/libmediafork/internal.h similarity index 97% rename from libhb/internal.h rename to libmediafork/internal.h index 36ead1bf0..3948d5dfd 100644 --- a/libhb/internal.h +++ b/libmediafork/internal.h @@ -122,6 +122,14 @@ union hb_esconfig_u int length; } mpeg4; + struct + { + uint8_t sps[HB_CONFIG_MAX_SIZE]; + int sps_length; + uint8_t pps[HB_CONFIG_MAX_SIZE]; + int pps_length; + } h264; + struct { uint8_t bytes[HB_CONFIG_MAX_SIZE]; diff --git a/libmediafork/ipodutil.cpp b/libmediafork/ipodutil.cpp new file mode 100644 index 000000000..ba37e4768 --- /dev/null +++ b/libmediafork/ipodutil.cpp @@ -0,0 +1,34 @@ +/* + * MP4 library API functions + * + * These are wrapper functions that provide C linkage conventions + * to the library, and catch any internal errors, ensuring that + * a proper return value is given. + */ + +#include "mp4common.h" + +static u_int8_t ipod_magic[] = { + 0x6b, 0x68, 0x40, 0xf2, 0x5f, 0x24, 0x4f, 0xc5, + 0xba, 0x39, 0xa5, 0x1b, 0xcf, 0x03, 0x23, 0xf3 +}; + +class IPodUUIDAtom : public MP4Atom { +public: + IPodUUIDAtom() : MP4Atom("uuid") + { + SetExtendedType(ipod_magic); + + MP4Integer32Property* value = new MP4Integer32Property("value"); + value->SetValue(1); + AddProperty(value); + } +}; + +extern "C" void AddIPodUUID(MP4FileHandle hFile, MP4TrackId trackId) +{ + MP4Track* track = ((MP4File*)hFile)->GetTrack(trackId); + MP4Atom* avc1 = track->GetTrakAtom()->FindChildAtom("mdia.minf.stbl.stsd.avc1"); + avc1->AddChildAtom(new IPodUUIDAtom()); +} + diff --git a/libhb/lang.h b/libmediafork/lang.h similarity index 100% rename from libhb/lang.h rename to libmediafork/lang.h diff --git a/libhb/hb.c b/libmediafork/mediafork.c similarity index 87% rename from libhb/hb.c rename to libmediafork/mediafork.c index 98e014f0d..6eb115fd8 100644 --- a/libhb/hb.c +++ b/libmediafork/mediafork.c @@ -1,10 +1,4 @@ -/* $Id: hb.c,v 1.43 2005/04/27 21:05:24 titer Exp $ - - This file is part of the HandBrake source code. - Homepage: . - It may be used under the terms of the GNU General Public License. */ - -#include "hb.h" +#include "mediafork.h" #include "ffmpeg/avcodec.h" @@ -130,6 +124,96 @@ hb_handle_t * hb_init_real( int verbose, int update_check ) return h; } +/** + * libhb initialization routine. + * This version is to use when calling the dylib, the macro hb_init isn't available from a dylib call! + * @param verbose HB_DEBUG_NONE or HB_DEBUG_ALL. + * @param update_check signals libhb to check for updated version from HandBrake website. + * @return Handle to hb_handle_t for use on all subsequent calls to libhb. + */ +hb_handle_t * hb_init_dl( int verbose, int update_check ) +{ + hb_handle_t * h = calloc( sizeof( hb_handle_t ), 1 ); + uint64_t date; + + /* See hb_log() in common.c */ + if( verbose > HB_DEBUG_NONE ) + { + putenv( "HB_DEBUG=1" ); + av_log_set_level(AV_LOG_DEBUG); + } + + /* Check for an update on the website if asked to */ + h->build = -1; + + if( update_check ) + { + hb_log( "hb_init: checking for updates" ); + date = hb_get_date(); + h->update_thread = hb_update_init( &h->build, h->version ); + + for( ;; ) + { + if( hb_thread_has_exited( h->update_thread ) ) + { + /* Immediate success or failure */ + hb_thread_close( &h->update_thread ); + break; + } + if( hb_get_date() > date + 1000 ) + { + /* Still nothing after one second. Connection problem, + let the thread die */ + hb_log( "hb_init: connection problem, not waiting for " + "update_thread" ); + break; + } + hb_snooze( 500 ); + } + } + + /* CPU count detection */ + hb_log( "hb_init: checking cpu count" ); + h->cpu_count = hb_get_cpu_count(); + + h->list_title = hb_list_init(); + h->jobs = hb_list_init(); + + h->state_lock = hb_lock_init(); + h->state.state = HB_STATE_IDLE; + + h->pause_lock = hb_lock_init(); + + /* libavcodec */ + avcodec_init(); + register_avcodec( &mpeg4_encoder ); + register_avcodec( &mp2_decoder ); + register_avcodec( &ac3_encoder ); + + /* Start library thread */ + hb_log( "hb_init: starting libhb thread" ); + h->die = 0; + h->main_thread = hb_thread_init( "libhb", thread_func, h, + HB_NORMAL_PRIORITY ); + + hb_register( &hb_sync ); + hb_register( &hb_decmpeg2 ); + hb_register( &hb_decsub ); + hb_register( &hb_render ); + hb_register( &hb_encavcodec ); + hb_register( &hb_encxvid ); + hb_register( &hb_encx264 ); + hb_register( &hb_deca52 ); + hb_register( &hb_decavcodec ); + hb_register( &hb_declpcm ); + hb_register( &hb_encfaac ); + hb_register( &hb_enclame ); + hb_register( &hb_encvorbis ); + + return h; +} + + /** * Returns current version of libhb. * @param h Handle to hb_handle_t. diff --git a/libhb/hb.h b/libmediafork/mediafork.h similarity index 93% rename from libhb/hb.h rename to libmediafork/mediafork.h index e989a6bc0..8b5d4696a 100644 --- a/libhb/hb.h +++ b/libmediafork/mediafork.h @@ -1,9 +1,3 @@ -/* $Id: hb.h,v 1.12 2005/03/29 09:40:28 titer Exp $ - - This file is part of the HandBrake source code. - Homepage: . - It may be used under the terms of the GNU General Public License. */ - #ifndef HB_HB_H #define HB_HB_H @@ -20,6 +14,7 @@ extern "C" { #define HB_DEBUG_ALL 1 void hb_register( hb_work_object_t * ); hb_handle_t * hb_init_real( int verbose, int update_check ); +hb_handle_t * hb_init_dl ( int verbose, int update_check ); // hb_init for use with dylib #define hb_init(v,u) \ hb_init_real( v, u ); \ diff --git a/libhb/muxavi.c b/libmediafork/muxavi.c similarity index 99% rename from libhb/muxavi.c rename to libmediafork/muxavi.c index 8746a3cdd..4231d32df 100644 --- a/libhb/muxavi.c +++ b/libmediafork/muxavi.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #define AVIF_HASINDEX 0x10 #define AVIIF_KEYFRAME 0x10 diff --git a/libhb/muxcommon.c b/libmediafork/muxcommon.c similarity index 99% rename from libhb/muxcommon.c rename to libmediafork/muxcommon.c index 70e384e8a..3f6613716 100644 --- a/libhb/muxcommon.c +++ b/libmediafork/muxcommon.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" struct hb_mux_object_s { diff --git a/libmediafork/muxmp4.c b/libmediafork/muxmp4.c new file mode 100644 index 000000000..1fc201f4d --- /dev/null +++ b/libmediafork/muxmp4.c @@ -0,0 +1,167 @@ +/* $Id: muxmp4.c,v 1.24 2005/11/04 13:09:41 titer Exp $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + +/* libmp4v2 header */ +#include "mp4.h" + +#include "mediafork.h" + +void AddIPodUUID(MP4FileHandle, MP4TrackId); + + +struct hb_mux_object_s +{ + HB_MUX_COMMON; + + hb_job_t * job; + + /* libmp4v2 handle */ + MP4FileHandle file; + + /* Cumulated durations so far, in timescale units (see MP4Mux) */ + uint64_t sum_dur; +}; + +struct hb_mux_data_s +{ + MP4TrackId track; +}; + +/********************************************************************** + * MP4Init + ********************************************************************** + * Allocates hb_mux_data_t structures, create file and write headers + *********************************************************************/ +static int MP4Init( hb_mux_object_t * m ) +{ + hb_job_t * job = m->job; + hb_title_t * title = job->title; + + hb_audio_t * audio; + hb_mux_data_t * mux_data; + int i; + + /* Create an empty mp4 file */ + m->file = MP4Create( job->file, MP4_DETAILS_ERROR, 0 ); + + /* Video track */ + mux_data = malloc( sizeof( hb_mux_data_t ) ); + job->mux_data = mux_data; + + /* When using the standard 90000 timescale, QuickTime tends to have + synchronization issues (audio not playing at the correct speed). + To workaround this, we use the audio samplerate as the + timescale */ + MP4SetTimeScale( m->file, job->arate ); + + if( job->vcodec == HB_VCODEC_X264 ) + { + /* Stolen from mp4creator */ + MP4SetVideoProfileLevel( m->file, 0x7F ); + + mux_data->track = MP4AddH264VideoTrack( m->file, job->arate, + MP4_INVALID_DURATION, job->width, job->height, + job->config.h264.sps[1], /* AVCProfileIndication */ + job->config.h264.sps[2], /* profile_compat */ + job->config.h264.sps[3], /* AVCLevelIndication */ + 3 ); /* 4 bytes length before each NAL unit */ + + MP4AddH264SequenceParameterSet( m->file, mux_data->track, + job->config.h264.sps, job->config.h264.sps_length ); + MP4AddH264PictureParameterSet( m->file, mux_data->track, + job->config.h264.pps, job->config.h264.pps_length ); + + if( job->h264_level == 30) + { + hb_log("About to add iPod atom"); + AddIPodUUID(m->file, mux_data->track); + } + } + else /* FFmpeg or XviD */ + { + MP4SetVideoProfileLevel( m->file, MPEG4_SP_L3 ); + mux_data->track = MP4AddVideoTrack( m->file, job->arate, + MP4_INVALID_DURATION, job->width, job->height, + MP4_MPEG4_VIDEO_TYPE ); + + /* VOL from FFmpeg or XviD */ + MP4SetTrackESConfiguration( m->file, mux_data->track, + job->config.mpeg4.bytes, job->config.mpeg4.length ); + } + + for( i = 0; i < hb_list_count( title->list_audio ); i++ ) + { + audio = hb_list_item( title->list_audio, i ); + mux_data = malloc( sizeof( hb_mux_data_t ) ); + audio->mux_data = mux_data; + + mux_data->track = MP4AddAudioTrack( m->file, + job->arate, 1024, MP4_MPEG4_AUDIO_TYPE ); + MP4SetAudioProfileLevel( m->file, 0x0F ); + MP4SetTrackESConfiguration( m->file, mux_data->track, + audio->config.aac.bytes, audio->config.aac.length ); + } + + return 0; +} + +static int MP4Mux( hb_mux_object_t * m, hb_mux_data_t * mux_data, + hb_buffer_t * buf ) +{ + hb_job_t * job = m->job; + + uint64_t duration; + + if( mux_data == job->mux_data ) + { + /* Video */ + /* Because we use the audio samplerate as the timescale, + we have to use potentially variable durations so the video + doesn't go out of sync */ + duration = ( buf->stop * job->arate / 90000 ) - m->sum_dur; + m->sum_dur += duration; + } + else + { + /* Audio */ + duration = MP4_INVALID_DURATION; + } + + MP4WriteSample( m->file, mux_data->track, buf->data, buf->size, + duration, 0, buf->key ); + return 0; +} + +static int MP4End( hb_mux_object_t * m ) +{ +#if 0 + hb_job_t * job = m->job; +#endif + char filename[1024]; memset( filename, 0, 1024 ); + + MP4Close( m->file ); + +#if 0 + hb_log( "muxmp4: optimizing file" ); + snprintf( filename, 1024, "%s.tmp", job->file ); + MP4Optimize( job->file, filename, MP4_DETAILS_ERROR ); + remove( job->file ); + rename( filename, job->file ); +#endif + + return 0; +} + +hb_mux_object_t * hb_mux_mp4_init( hb_job_t * job ) +{ + hb_mux_object_t * m = calloc( sizeof( hb_mux_object_t ), 1 ); + m->init = MP4Init; + m->mux = MP4Mux; + m->end = MP4End; + m->job = job; + return m; +} + diff --git a/libhb/muxogm.c b/libmediafork/muxogm.c similarity index 99% rename from libhb/muxogm.c rename to libmediafork/muxogm.c index 6a3b1ec5d..62ff4e7b8 100644 --- a/libhb/muxogm.c +++ b/libmediafork/muxogm.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include diff --git a/libhb/ports.c b/libmediafork/ports.c similarity index 99% rename from libhb/ports.c rename to libmediafork/ports.c index bdeadc1f8..1e0b622b1 100644 --- a/libhb/ports.c +++ b/libmediafork/ports.c @@ -28,7 +28,7 @@ #include //#endif -#include "hb.h" +#include "mediafork.h" /************************************************************************ * hb_get_date() diff --git a/libhb/ports.h b/libmediafork/ports.h similarity index 98% rename from libhb/ports.h rename to libmediafork/ports.h index 47df1ce5e..740252e6b 100644 --- a/libhb/ports.h +++ b/libmediafork/ports.h @@ -14,7 +14,7 @@ uint64_t hb_get_date(); void hb_snooze( int delay ); int hb_get_cpu_count(); -#ifdef __LIBHB__ +#ifdef __LIBMEDIAFORK__ /* Everything from now is only used internally and hidden to the UI */ @@ -79,7 +79,7 @@ int hb_net_send( hb_net_t *, char * ); int hb_net_recv( hb_net_t *, char *, int ); void hb_net_close( hb_net_t ** ); -#endif /* __LIBHB__ */ +#endif /* __LIBMEDIAFORK__ */ #endif diff --git a/libhb/reader.c b/libmediafork/reader.c similarity index 99% rename from libhb/reader.c rename to libmediafork/reader.c index 47ec9d546..7be28237d 100644 --- a/libhb/reader.c +++ b/libmediafork/reader.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" typedef struct { diff --git a/libhb/render.c b/libmediafork/render.c similarity index 99% rename from libhb/render.c rename to libmediafork/render.c index cf6d7b31c..97117089a 100644 --- a/libhb/render.c +++ b/libmediafork/render.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "ffmpeg/avcodec.h" diff --git a/libhb/scan.c b/libmediafork/scan.c similarity index 96% rename from libhb/scan.c rename to libmediafork/scan.c index 097f11638..1f74f629d 100644 --- a/libhb/scan.c +++ b/libmediafork/scan.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "a52dec/a52.h" typedef struct @@ -177,13 +177,29 @@ static void ScanFunc( void * _data ) /* Autocrop by default. Gnark gnark */ memcpy( job->crop, title->crop, 4 * sizeof( int ) ); + if( title->aspect == 16 ) + { + hb_reduce( &job->pixel_aspect_width, &job->pixel_aspect_height, + 16 * title->height, 9 * title->width ); + } + else + { + hb_reduce( &job->pixel_aspect_width, &job->pixel_aspect_height, + 4 * title->height, 3 * title->width ); + } + job->width = title->width - job->crop[2] - job->crop[3]; +// job->height = title->height - job->crop[0] - job->crop[1]; hb_fix_aspect( job, HB_KEEP_WIDTH ); if( job->height > title->height - job->crop[0] - job->crop[1] ) { job->height = title->height - job->crop[0] - job->crop[1]; hb_fix_aspect( job, HB_KEEP_HEIGHT ); } + + hb_log( "scan: title (%d) job->width:%d, job->height:%d", + i,job->width, job->height ); + job->keep_ratio = 1; job->vcodec = HB_VCODEC_FFMPEG; diff --git a/libhb/sync.c b/libmediafork/sync.c similarity index 99% rename from libhb/sync.c rename to libmediafork/sync.c index cd526c11a..7053016e0 100644 --- a/libhb/sync.c +++ b/libmediafork/sync.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #include "samplerate.h" #include "ffmpeg/avcodec.h" diff --git a/libhb/update.c b/libmediafork/update.c similarity index 99% rename from libhb/update.c rename to libmediafork/update.c index 767807038..c12204fcc 100644 --- a/libhb/update.c +++ b/libmediafork/update.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" #define HB_URL "handbrake.m0k.org" #define HB_QUERY "GET /LATEST HTTP/1.0\r\nHost: " HB_URL "\r\n\r\n" diff --git a/libhb/work.c b/libmediafork/work.c similarity index 96% rename from libhb/work.c rename to libmediafork/work.c index 6529e2fbb..b69275418 100644 --- a/libhb/work.c +++ b/libmediafork/work.c @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#include "hb.h" +#include "mediafork.h" typedef struct { @@ -103,6 +103,16 @@ static void do_job( hb_job_t * job, int cpu_count ) hb_log( " + device %s", title->dvd ); hb_log( " + title %d, chapter(s) %d to %d", title->index, job->chapter_start, job->chapter_end ); + if ( job->pixel_ratio == 1 ) + { + /* Correct the geometry of the output movie when using PixelRatio */ + job->height=title->height-job->crop[0]-job->crop[1]; + job->width=title->width-job->crop[2]-job->crop[3]; + } + else + { + hb_fix_aspect( job, HB_KEEP_WIDTH ); + } hb_log( " + %dx%d -> %dx%d, crop %d/%d/%d/%d", title->width, title->height, job->width, job->height, job->crop[0], job->crop[1], job->crop[2], job->crop[3] ); @@ -119,7 +129,7 @@ static void do_job( hb_job_t * job, int cpu_count ) (float) job->vrate / (float) job->vrate_base, job->vbitrate, job->pass ); } - + hb_log (" + PixelRatio: %d, width:%d, height: %d",job->pixel_ratio,job->width, job->height); job->fifo_mpeg2 = hb_fifo_init( 2048 ); job->fifo_raw = hb_fifo_init( 8 ); job->fifo_sync = hb_fifo_init( 8 ); diff --git a/macosx/Controller.h b/macosx/Controller.h index c32dacc04..6dc4c02db 100644 --- a/macosx/Controller.h +++ b/macosx/Controller.h @@ -6,7 +6,7 @@ #include -#include "hb.h" +#include "mediafork.h" #include "ScanController.h" #include "PictureController.h" @@ -69,6 +69,33 @@ IBOutlet NSButton * fVidGrayscaleCheck; IBOutlet NSButton * fVidTwoPassCheck; + + /* Picture Settings box */ + IBOutlet NSTextField * fPicLabelSettings; + IBOutlet NSTextField * fPicLabelSrc; + IBOutlet NSTextField * fPicLabelOutp; + IBOutlet NSTextField * fPicLabelAr; + IBOutlet NSTextField * fPicLabelDeinter; + IBOutlet NSTextField * fPicLabelSrcX; + IBOutlet NSTextField * fPicLabelOutputX; + + IBOutlet NSTextField * fPicSrcWidth; + IBOutlet NSTextField * fPicSrcHeight; + IBOutlet NSTextField * fPicSettingWidth; + IBOutlet NSTextField * fPicSettingHeight; + IBOutlet NSTextField * fPicSettingARkeep; + IBOutlet NSTextField * fPicSettingPAR; + IBOutlet NSTextField * fPicSettingDeinterlace; + IBOutlet NSTextField * fPicSettingARkeepDsply; + IBOutlet NSTextField * fPicSettingPARDsply; + IBOutlet NSTextField * fPicSettingDeinterlaceDsply; + IBOutlet NSTextField * fPicLabelAnamorphic; + IBOutlet NSTextField * fPicLabelPAROutp; + IBOutlet NSTextField * fPicLabelPAROutputX; + IBOutlet NSTextField * fPicSettingPARWidth; + IBOutlet NSTextField * fPicSettingPARHeight; + + /* Subtitles box */ IBOutlet NSTextField * fSubField; IBOutlet NSPopUpButton * fSubPopUp; @@ -93,6 +120,7 @@ IBOutlet NSButton * fRipButton; hb_handle_t * fHandle; + hb_title_t * fTitle; } - (void) TranslateStrings; @@ -107,6 +135,7 @@ - (IBAction) FormatPopUpChanged: (id) sender; - (IBAction) CodecsPopUpChanged: (id) sender; +- (IBAction) EncoderPopUpChanged: (id) sender; - (IBAction) BrowseFile: (id) sender; - (void) BrowseFileDone: (NSSavePanel *) sheet returnCode: (int) returnCode contextInfo: (void *) contextInfo; @@ -115,6 +144,7 @@ - (IBAction) QualitySliderChanged: (id) sender; - (IBAction) ShowPicturePanel: (id) sender; +- (IBAction) CalculatePictureSizing: (id) sender; - (IBAction) EnableQueue: (id) sender; - (IBAction) AddToQueue: (id) sender; diff --git a/macosx/Controller.mm b/macosx/Controller.mm index 281c3372b..3bf5f4f4a 100644 --- a/macosx/Controller.mm +++ b/macosx/Controller.mm @@ -42,13 +42,14 @@ static int FormatSettings[3][4] = /* Init libhb */ fHandle = hb_init( HB_DEBUG_NONE, [[NSUserDefaults standardUserDefaults] boolForKey:@"CheckForUpdates"] ); - + /* Init others controllers */ [fScanController SetHandle: fHandle]; [fPictureController SetHandle: fHandle]; [fQueueController SetHandle: fHandle]; + - /* Call UpdateUI every 2/10 sec */ + /* Call UpdateUI every 2/10 sec */ [[NSRunLoop currentRunLoop] addTimer: [NSTimer scheduledTimerWithTimeInterval: 0.2 target: self selector: @selector( UpdateUI: ) userInfo: NULL repeats: FALSE] @@ -113,7 +114,18 @@ static int FormatSettings[3][4] = /* Video quality */ [fVidTargetSizeField setIntValue: 700]; - [fVidBitrateField setIntValue: 1000]; + [fVidBitrateField setIntValue: 1000]; + /* Do we want to force the quality settings if PAR is on ? + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"PixelRatio"]) + { + [fVidBitrateField setIntValue: 1500]; + [fVidTwoPassCheck setState: NSOnState]; + } + else + { + [fVidBitrateField setIntValue: 1000]; + } + */ [fVidQualityMatrix selectCell: fVidBitrateCell]; [self VideoMatrixChanged: NULL]; @@ -126,7 +138,13 @@ static int FormatSettings[3][4] = [NSString stringWithCString: hb_video_rates[i].string]]; } [fVidRatePopUp selectItemAtIndex: 0]; - + + /* Picture Settings */ + [fPicLabelPAROutp setStringValue: @""]; + [fPicLabelPAROutputX setStringValue: @""]; + [fPicSettingPARWidth setStringValue: @""]; + [fPicSettingPARHeight setStringValue: @""]; + /* Audio bitrate */ [fAudBitratePopUp removeAllItems]; for( int i = 0; i < hb_audio_bitrates_count; i++ ) @@ -275,6 +293,8 @@ static int FormatSettings[3][4] = { hb_list_t * list; hb_title_t * title; + int indxpri=0; // Used to search the longuest title (default in combobox) + int longuestpri=0; // Used to search the longuest title (default in combobox) [fScanController UpdateUI: &s]; @@ -285,6 +305,7 @@ static int FormatSettings[3][4] = break; } + [fSrcTitlePopUp removeAllItems]; for( int i = 0; i < hb_list_count( list ); i++ ) { @@ -295,9 +316,57 @@ static int FormatSettings[3][4] = /* Use the dvd name in the default output field here May want to add code to remove blank spaces for some dvd names*/ + [fDstFile2Field setStringValue: [NSString stringWithFormat: @"%@/Desktop/%@.mp4", NSHomeDirectory(),[NSString stringWithUTF8String: title->name]]]; + /* Temporarily comment out to fix title selection*/ + if (longuestpri < title->hours*60*60 + title->minutes *60 + title->seconds) + { + longuestpri=title->hours*60*60 + title->minutes *60 + title->seconds; + indxpri=i; + } + + + int format = [fDstFormatPopUp indexOfSelectedItem]; + char * ext = NULL; + switch( format ) + { + case 0: + + /*Get Default MP4 File Extension for mpeg4 (.mp4 or .m4v) from prefs*/ + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultMpegName"] > 0) + { + ext = "m4v"; + } + else + { + ext = "mp4"; + } + break; + case 1: + ext = "avi"; + case 2: + break; + ext = "ogm"; + break; + } + + + NSString * string = [fDstFile2Field stringValue]; + /* Add/replace File Output name to the correct extension*/ + if( [string characterAtIndex: [string length] - 4] == '.' ) + { + [fDstFile2Field setStringValue: [NSString stringWithFormat: + @"%@.%s", [string substringToIndex: [string length] - 4], + ext]]; + } + else + { + [fDstFile2Field setStringValue: [NSString stringWithFormat: + @"%@.%s", string, ext]]; + } + [fSrcTitlePopUp addItemWithTitle: [NSString stringWithFormat: @"%d - %02dh%02dm%02ds", @@ -305,7 +374,9 @@ static int FormatSettings[3][4] = title->seconds]]; } - + // Select the longuest title + [fSrcTitlePopUp selectItemAtIndex: indxpri]; + [self TitlePopUpChanged: NULL]; [self EnableUI: YES]; [fPauseButton setEnabled: NO]; @@ -442,7 +513,13 @@ static int FormatSettings[3][4] = fVidQualityMatrix, fVidGrayscaleCheck, fSubField, fSubPopUp, fAudLang1Field, fAudLang1PopUp, fAudLang2Field, fAudLang2PopUp, fAudRateField, fAudRatePopUp, fAudBitrateField, - fAudBitratePopUp, fPictureButton, fQueueCheck }; + fAudBitratePopUp, fPictureButton, fQueueCheck, + fPicSrcWidth,fPicSrcHeight,fPicSettingWidth,fPicSettingHeight, + fPicSettingARkeep,fPicSettingDeinterlace,fPicSettingARkeepDsply, + fPicSettingDeinterlaceDsply,fPicLabelSettings,fPicLabelSrc,fPicLabelOutp, + fPicLabelAr,fPicLabelDeinter,fPicLabelSrcX,fPicLabelOutputX, + fPicLabelPAROutp,fPicLabelPAROutputX,fPicSettingPARWidth,fPicSettingPARHeight, + fPicSettingPARDsply,fPicLabelAnamorphic}; for( unsigned i = 0; i < sizeof( controls ) / sizeof( NSControl * ); i++ ) @@ -458,6 +535,10 @@ static int FormatSettings[3][4] = } } [controls[i] setEnabled: b]; + /* Temporarily disable Lang2 until crash is fixed */ + [fAudLang2PopUp setEnabled: NO]; + [fAudLang2Field setEnabled: NO]; + } [self VideoMatrixChanged: NULL]; @@ -556,6 +637,7 @@ static int FormatSettings[3][4] = [NSApp runModalForWindow: fPicturePanel]; [NSApp endSheet: fPicturePanel]; [fPicturePanel orderOut: self]; + [self CalculatePictureSizing: sender]; } - (IBAction) ShowQueuePanel: (id) sender @@ -581,6 +663,8 @@ static int FormatSettings[3][4] = /* Chapter selection */ job->chapter_start = [fSrcChapterStartPopUp indexOfSelectedItem] + 1; job->chapter_end = [fSrcChapterEndPopUp indexOfSelectedItem] + 1; + + /* Format and codecs */ int format = [fDstFormatPopUp indexOfSelectedItem]; @@ -602,10 +686,18 @@ static int FormatSettings[3][4] = Lets Deprecate Baseline Level 1.3*/ job->h264_level = 30; job->mux = HB_MUX_IPOD; + /* move sanity check for iPod Encoding here */ + job->pixel_ratio = 0 ; + } - /* Set this flag to switch from Constant Quantizer(default) to Constant Rate Factor */ - // job->crf = 1; + /* Set this flag to switch from Constant Quantizer(default) to Constant Rate Factor Thanks jbrjake + Currently only used with Constant Quality setting*/ + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultCrf"] > 0 && [fVidQualityMatrix selectedRow] == 2) + { + /* Can only be used with svn rev >= 89 */ + job->crf = 1; + } job->h264_13 = [fVidEncoderPopUp indexOfSelectedItem]; } @@ -640,6 +732,8 @@ static int FormatSettings[3][4] = } job->grayscale = ( [fVidGrayscaleCheck state] == NSOnState ); + + /* Subtitle settings */ job->subtitle = [fSubPopUp indexOfSelectedItem] - 1; @@ -795,6 +889,7 @@ static int FormatSettings[3][4] = hb_title_t * title = (hb_title_t*) hb_list_item( list, [fSrcTitlePopUp indexOfSelectedItem] ); + /* Update chapter popups */ [fSrcChapterStartPopUp removeAllItems]; [fSrcChapterEndPopUp removeAllItems]; @@ -810,6 +905,40 @@ static int FormatSettings[3][4] = hb_list_count( title->list_chapter ) - 1]; [self ChapterPopUpChanged: NULL]; +/* Start Get and set the initial pic size for display */ + hb_job_t * job = title->job; + fTitle = title; + /*Set Source Size Fields Here */ + [fPicSrcWidth setStringValue: [NSString stringWithFormat: + @"%d", fTitle->width]]; + [fPicSrcHeight setStringValue: [NSString stringWithFormat: + @"%d", fTitle->height]]; + /* Turn Deinterlace on/off depending on the preference */ + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultDeinterlaceOn"] > 0) + { + job->deinterlace = 1; + } + else + { + job->deinterlace = 0; + } + + /* Pixel Ratio Setting */ + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"PixelRatio"]) + { + + job->pixel_ratio = 1 ; + } + else + { + job->pixel_ratio = 0 ; + } + /* Run Through EncoderPopUpChanged to see if there + needs to be any pic value modifications based on encoder settings */ + [self EncoderPopUpChanged: NULL]; + /* END Get and set the initial pic size for display */ + + /* Update subtitle popups */ hb_subtitle_t * subtitle; [fSubPopUp removeAllItems]; @@ -825,41 +954,54 @@ static int FormatSettings[3][4] = } [fSubPopUp selectItemAtIndex: 0]; - /* Update lang popups */ - hb_audio_t * audio; + /* START pri */ + hb_audio_t * audio; + // PRI CHANGES 02/12/06 NSString * audiotmppri; NSString * audiosearchpri=[[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultLanguage"]; int indxpri=0; // End of pri changes 02/12/06 [fAudLang1PopUp removeAllItems]; + /* Disable second audio language until crashing is resolved*/ + [fAudLang2Field setEnabled: NO]; + [fAudLang2PopUp setEnabled: NO]; [fAudLang2PopUp removeAllItems]; [fAudLang1PopUp addItemWithTitle: _( @"None" )]; - [fAudLang2PopUp addItemWithTitle: _( @"None" )]; + /* Display Currently Unavailable until crash is fixed */ + [fAudLang2PopUp addItemWithTitle: _( @"Currently Unavailable" )]; + //[fAudLang2PopUp addItemWithTitle: _( @"None" )]; for( int i = 0; i < hb_list_count( title->list_audio ); i++ ) { audio = (hb_audio_t *) hb_list_item( title->list_audio, i ); // PRI CHANGES 02/12/06 - audiotmppri=(NSString *) [NSString stringWithCString: audio->lang]; - // Try to find the desired default language - if ([audiotmppri hasPrefix:audiosearchpri] && indxpri==0) + if (audiosearchpri!= NULL) { - indxpri=i+1; + audiotmppri=(NSString *) [NSString stringWithCString: audio->lang]; + // Try to find the desired default language + if ([audiotmppri hasPrefix:audiosearchpri] && indxpri==0) + { + indxpri=i+1; + } } // End of pri changes 02/12/06 [[fAudLang1PopUp menu] addItemWithTitle: [NSString stringWithCString: audio->lang] action: NULL keyEquivalent: @""]; - [[fAudLang2PopUp menu] addItemWithTitle: + /* + [[fAudLang2PopUp menu] addItemWithTitle: [NSString stringWithCString: audio->lang] action: NULL keyEquivalent: @""]; + */ } // PRI CHANGES 02/12/06 if (indxpri==0) { indxpri=1; } - [fAudLang1PopUp selectItemAtIndex: indxpri]; + [fAudLang1PopUp selectItemAtIndex: indxpri]; // End of pri changes 02/12/06 [fAudLang2PopUp selectItemAtIndex: 0]; + + /* END pri */ } - (IBAction) ChapterPopUpChanged: (id) sender @@ -896,7 +1038,15 @@ static int FormatSettings[3][4] = switch( format ) { case 0: - ext = "mp4"; + /*Get Default MP4 File Extension*/ + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultMpegName"] > 0) + { + ext = "m4v"; + } + else + { + ext = "mp4"; + } [fDstCodecsPopUp addItemWithTitle: _( @"MPEG-4 Video / AAC Audio" )]; [fDstCodecsPopUp addItemWithTitle: @@ -976,6 +1126,103 @@ static int FormatSettings[3][4] = [self CalculateBitrate: sender]; } +- (IBAction) EncoderPopUpChanged: (id) sender +{ + + /* Check to see if we need to modify the job pic values based on x264 (iPod) encoder selection */ + if ([fDstFormatPopUp indexOfSelectedItem] == 0 && [fVidEncoderPopUp indexOfSelectedItem] == 1) + { + hb_job_t * job = fTitle->job; + job->pixel_ratio = 0 ; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultPicSizeAutoiPod"] > 0) + { + + if (fTitle->job->width > 640) + { + fTitle->job->width = 640; + } + fTitle->job->keep_ratio = 1; + hb_fix_aspect( job, HB_KEEP_WIDTH ); + + } + } + +[self CalculatePictureSizing: sender]; + +} + +/* Get and Display Current Pic Settings in main window */ +- (IBAction) CalculatePictureSizing: (id) sender +{ + + hb_job_t * job = fTitle->job; + + [fPicSettingWidth setStringValue: [NSString stringWithFormat: + @"%d", fTitle->job->width]]; + [fPicSettingHeight setStringValue: [NSString stringWithFormat: + @"%d", fTitle->job->height]]; + [fPicSettingARkeep setStringValue: [NSString stringWithFormat: + @"%d", fTitle->job->keep_ratio]]; + [fPicSettingDeinterlace setStringValue: [NSString stringWithFormat: + @"%d", fTitle->job->deinterlace]]; + [fPicSettingPAR setStringValue: [NSString stringWithFormat: + @"%d", fTitle->job->pixel_ratio]]; + + if (fTitle->job->pixel_ratio == 1) + { + int titlewidth = fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3]; + int arpwidth = fTitle->job->pixel_aspect_width; + int arpheight = fTitle->job->pixel_aspect_height; + int displayparwidth = titlewidth * arpwidth / arpheight; + int displayparheight = fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]; + [fPicLabelPAROutp setStringValue: @"Anamorphic Output:"]; + [fPicLabelPAROutputX setStringValue: @"x"]; + [fPicSettingPARWidth setStringValue: [NSString stringWithFormat: + @"%d", displayparwidth]]; + [fPicSettingPARHeight setStringValue: [NSString stringWithFormat: + @"%d", displayparheight]]; + [fPicSettingHeight setStringValue: [NSString stringWithFormat: + @"%d", displayparheight]]; + fTitle->job->keep_ratio = 0; + } + else + { + [fPicLabelPAROutp setStringValue: @""]; + [fPicLabelPAROutputX setStringValue: @""]; + [fPicSettingPARWidth setStringValue: @""]; + [fPicSettingPARHeight setStringValue: @""]; + } + + /* Set ON/Off values for the deinterlace/keep aspect ratio according to boolean */ + if (fTitle->job->keep_ratio > 0) + { + [fPicSettingARkeepDsply setStringValue: @"On"]; + } + else + { + [fPicSettingARkeepDsply setStringValue: @"Off"]; + } + if (fTitle->job->deinterlace > 0) + { + [fPicSettingDeinterlaceDsply setStringValue: @"On"]; + } + else + { + [fPicSettingDeinterlaceDsply setStringValue: @"Off"]; + } + if (fTitle->job->pixel_ratio > 0) + { + [fPicSettingPARDsply setStringValue: @"On"]; + } + else + { + [fPicSettingPARDsply setStringValue: @"Off"]; + } + + +} + - (IBAction) CalculateBitrate: (id) sender { if( !fHandle || [fVidQualityMatrix selectedRow] != 0 ) @@ -1012,13 +1259,13 @@ static int FormatSettings[3][4] = - (IBAction) OpenHomepage: (id) sender { [[NSWorkspace sharedWorkspace] openURL: [NSURL - URLWithString:@"http://handbrake.m0k.org/"]]; + URLWithString:@"http://mediafork.dynalias.com/"]]; } - (IBAction) OpenForums: (id) sender { [[NSWorkspace sharedWorkspace] openURL: [NSURL - URLWithString:@"http://handbrake.m0k.org/forum/"]]; + URLWithString:@"http://mediafork.dynalias.com/forum/"]]; } @end diff --git a/macosx/DriveDetector.h b/macosx/DriveDetector.h index 2018309b1..468f779db 100644 --- a/macosx/DriveDetector.h +++ b/macosx/DriveDetector.h @@ -1,4 +1,4 @@ -/* DriveDetector.h $ +/* DriveDetector.h $ This file is part of the HandBrake source code. Homepage: . diff --git a/macosx/DriveDetector.m b/macosx/DriveDetector.m index 61f722960..e9e941569 100644 --- a/macosx/DriveDetector.m +++ b/macosx/DriveDetector.m @@ -11,7 +11,7 @@ #include #include "DriveDetector.h" -#include "hb.h" +#include "mediafork.h" @interface DriveDetector (Private) diff --git a/macosx/English.lproj/MainMenu.nib/classes.nib b/macosx/English.lproj/MainMenu.nib/classes.nib index 59629f07f..ec791480a 100644 --- a/macosx/English.lproj/MainMenu.nib/classes.nib +++ b/macosx/English.lproj/MainMenu.nib/classes.nib @@ -1,6 +1,5 @@ { IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { ACTIONS = { AddToQueue = id; @@ -10,6 +9,7 @@ ChapterPopUpChanged = id; CodecsPopUpChanged = id; EnableQueue = id; + EncoderPopUpChanged = id; FormatPopUpChanged = id; OpenForums = id; OpenHomepage = id; @@ -42,6 +42,28 @@ fDstFormatField = NSTextField; fDstFormatPopUp = NSPopUpButton; fPauseButton = NSButton; + fPicLabelAnamorphic = NSTextField; + fPicLabelAr = NSTextField; + fPicLabelDeinter = NSTextField; + fPicLabelOutp = NSTextField; + fPicLabelOutputX = NSTextField; + fPicLabelPAROutp = NSTextField; + fPicLabelPAROutputX = NSTextField; + fPicLabelSettings = NSTextField; + fPicLabelSrc = NSTextField; + fPicLabelSrcX = NSTextField; + fPicSettingARkeep = NSTextField; + fPicSettingARkeepDsply = NSTextField; + fPicSettingDeinterlace = NSTextField; + fPicSettingDeinterlaceDsply = NSTextField; + fPicSettingHeight = NSTextField; + fPicSettingPAR = NSTextField; + fPicSettingPARDsply = NSTextField; + fPicSettingPARHeight = NSTextField; + fPicSettingPARWidth = NSTextField; + fPicSettingWidth = NSTextField; + fPicSrcHeight = NSTextField; + fPicSrcWidth = NSTextField; fPictureButton = NSButton; fPictureController = PictureController; fPicturePanel = NSPanel; @@ -123,6 +145,14 @@ fHeightStepper = NSStepper; fInfoField = NSTextField; fNextButton = NSButton; + fPARCheck = NSButton; + fPicSettingARkeep = NSTextField; + fPicSettingDeinterlace = NSTextField; + fPicSettingHeight = NSTextField; + fPicSettingWidth = NSTextField; + fPicSettingsDisplay = NSTextField; + fPicSrcHeight = NSTextField; + fPicSrcWidth = NSTextField; fPictureGLView = HBPictureGLView; fPrevButton = NSButton; fRatioCheck = NSButton; @@ -136,7 +166,16 @@ ACTIONS = {CheckChanged = id; ClosePanel = id; OpenPanel = id; }; CLASS = PrefsController; LANGUAGE = ObjC; - OUTLETS = {fPanel = NSPanel; fUpdateCheck = NSButton; }; + OUTLETS = { + fDefCrf = NSButton; + fDefDeinterlace = NSButton; + fDefPicSizeAutoSetipod = NSButton; + fDefPixelRatio = NSButton; + fFileExtItunes = NSButton; + fPanel = NSPanel; + fUpdateCheck = NSButton; + fdefaultlanguage = NSComboBox; + }; SUPERCLASS = NSObject; }, { diff --git a/macosx/English.lproj/MainMenu.nib/info.nib b/macosx/English.lproj/MainMenu.nib/info.nib index 36f69f000..9a988cc6b 100644 --- a/macosx/English.lproj/MainMenu.nib/info.nib +++ b/macosx/English.lproj/MainMenu.nib/info.nib @@ -3,15 +3,35 @@ IBDocumentLocation - 73 30 382 380 0 0 1440 878 + 281 448 555 411 0 0 1440 878 IBEditorPositions 29 - 157 764 261 44 0 0 1280 832 + 69 330 258 44 0 0 1440 878 IBFramework Version - 443.0 + 446.1 + IBLockedTabItems + + 1477 + + IBOpenObjects + + 21 + IBSystem Version - 8I127 + 8L127 + IBUserGuides + + 21 + + guideLocations + + Horizontal:567.000000 + + guidesLocked + + + diff --git a/macosx/English.lproj/MainMenu.nib/keyedobjects.nib b/macosx/English.lproj/MainMenu.nib/keyedobjects.nib index 5bbb71eab07d92f10ad51f0e825a7f91c2545656..814a09dab5af1778ca2630c98af4d3fd260620be 100644 GIT binary patch literal 70063 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 K*Z-eqKK>s~gzN+W literal 58385 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 diff --git a/macosx/Express.plist b/macosx/Express.plist index 81703d1d6..002ee8f88 100644 --- a/macosx/Express.plist +++ b/macosx/Express.plist @@ -6,6 +6,8 @@ English CFBundleExecutable ${EXECUTABLE_NAME} + CFBundleIconFile + MediaFork CFBundleIdentifier org.m0k.handbrake.instant CFBundleInfoDictionaryVersion @@ -16,8 +18,6 @@ ???? CFBundleVersion 1.0a2 - CFBundleIconFile - HandBrake.icns NSMainNibFile Express NSPrincipalClass diff --git a/macosx/ExpressController.h b/macosx/ExpressController.h index 5841f4e1f..f1e0d1904 100644 --- a/macosx/ExpressController.h +++ b/macosx/ExpressController.h @@ -1,7 +1,7 @@ /* ExpressController */ #import -#import "hb.h" +#import "mediafork.h" @class DriveDetector; diff --git a/macosx/HandBrake.icns b/macosx/HandBrake.icns deleted file mode 100644 index f81352be3bc4352ec36fd58a16d27aa14af91a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47214 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 F|33rPS@{3} literal 0 HcmV?d00001 diff --git a/macosx/HandBrake.plist b/macosx/MediaFork.plist similarity index 76% rename from macosx/HandBrake.plist rename to macosx/MediaFork.plist index 482e5a9bf..c9fa39748 100644 --- a/macosx/HandBrake.plist +++ b/macosx/MediaFork.plist @@ -5,29 +5,29 @@ CFBundleDevelopmentRegion English CFBundleDisplayName - HandBrake + MediaFork CFBundleExecutable - HandBrake + MediaFork CFBundleGetInfoString - 0.7.1a5 + 0.8.0b1 CFBundleIconFile - HandBrake.icns + MediaFork CFBundleIdentifier - org.m0k.handbrake + org.mediafork.dynalias CFBundleInfoDictionaryVersion 6.0 CFBundleName - HandBrake + MediaFork CFBundlePackageType APPL CFBundleShortVersionString - 0.7.1a5 + 0.8.0b1 CFBundleSignature HB## CFBundleVersion 2006022400 NSHumanReadableCopyright - By Eric Petit <titer@m0k.org> + MediaFork Devs NSMainNibFile MainMenu NSPrincipalClass diff --git a/macosx/MediaFork.xcodeproj/project.pbxproj b/macosx/MediaFork.xcodeproj/project.pbxproj new file mode 100644 index 000000000..5fdc2bba4 --- /dev/null +++ b/macosx/MediaFork.xcodeproj/project.pbxproj @@ -0,0 +1,1654 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 0D096E010B707D3400A845D4 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9B0B4CAB100064E04C /* common.c */; }; + 0D096E020B707D3400A845D4 /* deca52.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9D0B4CAB100064E04C /* deca52.c */; }; + 0D096E030B707D3400A845D4 /* decavcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9E0B4CAB100064E04C /* decavcodec.c */; }; + 0D096E040B707D3400A845D4 /* declpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9F0B4CAB100064E04C /* declpcm.c */; }; + 0D096E050B707D3400A845D4 /* decmpeg2.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA00B4CAB100064E04C /* decmpeg2.c */; }; + 0D096E060B707D3400A845D4 /* decsub.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA10B4CAB100064E04C /* decsub.c */; }; + 0D096E070B707D3400A845D4 /* demuxmpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA20B4CAB100064E04C /* demuxmpeg.c */; }; + 0D096E080B707D3400A845D4 /* dvd.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA30B4CAB100064E04C /* dvd.c */; }; + 0D096E090B707D3400A845D4 /* encavcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA40B4CAB100064E04C /* encavcodec.c */; }; + 0D096E0A0B707D3400A845D4 /* encfaac.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA50B4CAB100064E04C /* encfaac.c */; }; + 0D096E0B0B707D3400A845D4 /* enclame.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA60B4CAB100064E04C /* enclame.c */; }; + 0D096E0C0B707D3400A845D4 /* encvorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA70B4CAB100064E04C /* encvorbis.c */; }; + 0D096E0D0B707D3400A845D4 /* encx264.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA80B4CAB100064E04C /* encx264.c */; }; + 0D096E0E0B707D3400A845D4 /* encxvid.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA90B4CAB100064E04C /* encxvid.c */; }; + 0D096E0F0B707D3400A845D4 /* fifo.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCAA0B4CAB100064E04C /* fifo.c */; }; + 0D096E100B707D3400A845D4 /* muxavi.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCAE0B4CAB100064E04C /* muxavi.c */; }; + 0D096E110B707D3400A845D4 /* muxcommon.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCAF0B4CAB100064E04C /* muxcommon.c */; }; + 0D096E120B707D3400A845D4 /* muxmp4.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB00B4CAB100064E04C /* muxmp4.c */; }; + 0D096E130B707D3400A845D4 /* muxogm.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB10B4CAB100064E04C /* muxogm.c */; }; + 0D096E140B707D3400A845D4 /* ports.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB20B4CAB100064E04C /* ports.c */; }; + 0D096E150B707D3400A845D4 /* reader.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB40B4CAB100064E04C /* reader.c */; }; + 0D096E160B707D3400A845D4 /* render.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB50B4CAB100064E04C /* render.c */; }; + 0D096E170B707D3400A845D4 /* scan.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB60B4CAB100064E04C /* scan.c */; }; + 0D096E180B707D3400A845D4 /* sync.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB70B4CAB100064E04C /* sync.c */; }; + 0D096E190B707D3400A845D4 /* update.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB80B4CAB100064E04C /* update.c */; }; + 0D096E1A0B707D3400A845D4 /* work.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB90B4CAB100064E04C /* work.c */; }; + 0D096EA30B70884A00A845D4 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1125D709D72FD200E0657B /* libz.dylib */; }; + 0D75EDC00B6FF9DA0090EA86 /* MediaFork.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4D118405053054CD00C39CA9 /* MediaFork.icns */; }; + 0D9C5CE50B77E85B00828855 /* mediafork.c in Sources */ = {isa = PBXBuildFile; fileRef = 0D9C5CE40B77E85B00828855 /* mediafork.c */; }; + 0D9C5CE60B77E85B00828855 /* mediafork.c in Sources */ = {isa = PBXBuildFile; fileRef = 0D9C5CE40B77E85B00828855 /* mediafork.c */; }; + 0DF377430B7BEACA00115CB0 /* ipodutil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DF377420B7BEACA00115CB0 /* ipodutil.cpp */; }; + 0DF377440B7BEACA00115CB0 /* ipodutil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DF377420B7BEACA00115CB0 /* ipodutil.cpp */; }; + 0DF377980B7BF99A00115CB0 /* fakexcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DF377970B7BF99A00115CB0 /* fakexcode.cpp */; }; + 0DFF0B770B6BC72A00549488 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9B0B4CAB100064E04C /* common.c */; }; + 0DFF0B790B6BC72A00549488 /* deca52.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9D0B4CAB100064E04C /* deca52.c */; }; + 0DFF0B7A0B6BC72A00549488 /* decavcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9E0B4CAB100064E04C /* decavcodec.c */; }; + 0DFF0B7B0B6BC72A00549488 /* declpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9F0B4CAB100064E04C /* declpcm.c */; }; + 0DFF0B7C0B6BC72A00549488 /* decmpeg2.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA00B4CAB100064E04C /* decmpeg2.c */; }; + 0DFF0B7D0B6BC72A00549488 /* decsub.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA10B4CAB100064E04C /* decsub.c */; }; + 0DFF0B7E0B6BC72A00549488 /* demuxmpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA20B4CAB100064E04C /* demuxmpeg.c */; }; + 0DFF0B7F0B6BC72A00549488 /* dvd.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA30B4CAB100064E04C /* dvd.c */; }; + 0DFF0B800B6BC72A00549488 /* encavcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA40B4CAB100064E04C /* encavcodec.c */; }; + 0DFF0B810B6BC72A00549488 /* encfaac.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA50B4CAB100064E04C /* encfaac.c */; }; + 0DFF0B820B6BC72A00549488 /* enclame.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA60B4CAB100064E04C /* enclame.c */; }; + 0DFF0B830B6BC72A00549488 /* encvorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA70B4CAB100064E04C /* encvorbis.c */; }; + 0DFF0B840B6BC72A00549488 /* encx264.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA80B4CAB100064E04C /* encx264.c */; }; + 0DFF0B850B6BC72A00549488 /* encxvid.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCA90B4CAB100064E04C /* encxvid.c */; }; + 0DFF0B860B6BC72A00549488 /* fifo.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCAA0B4CAB100064E04C /* fifo.c */; }; + 0DFF0B8B0B6BC72A00549488 /* muxavi.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCAE0B4CAB100064E04C /* muxavi.c */; }; + 0DFF0B8C0B6BC72A00549488 /* muxcommon.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCAF0B4CAB100064E04C /* muxcommon.c */; }; + 0DFF0B8D0B6BC72A00549488 /* muxmp4.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB00B4CAB100064E04C /* muxmp4.c */; }; + 0DFF0B8E0B6BC72A00549488 /* muxogm.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB10B4CAB100064E04C /* muxogm.c */; }; + 0DFF0B8F0B6BC72A00549488 /* ports.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB20B4CAB100064E04C /* ports.c */; }; + 0DFF0B910B6BC72A00549488 /* reader.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB40B4CAB100064E04C /* reader.c */; }; + 0DFF0B920B6BC72A00549488 /* render.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB50B4CAB100064E04C /* render.c */; }; + 0DFF0B930B6BC72A00549488 /* scan.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB60B4CAB100064E04C /* scan.c */; }; + 0DFF0B940B6BC72A00549488 /* sync.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB70B4CAB100064E04C /* sync.c */; }; + 0DFF0B950B6BC72A00549488 /* update.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB80B4CAB100064E04C /* update.c */; }; + 0DFF0B960B6BC72A00549488 /* work.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBCB90B4CAB100064E04C /* work.c */; }; + 0DFF0C100B6BCEE800549488 /* test.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC760B4CA8F40064E04C /* test.c */; }; + 4D1125D809D72FD200E0657B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1125D709D72FD200E0657B /* libz.dylib */; }; + 4D1125D909D72FD200E0657B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1125D709D72FD200E0657B /* libz.dylib */; }; + 4D1EA2EA0993B09A00FDC1A2 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.mm */; }; + 4D1EA2F60993B0CA00FDC1A2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + 4D1EA3010993B13700FDC1A2 /* Express.nib in Resources */ = {isa = PBXBuildFile; fileRef = 4D1EA3000993B13700FDC1A2 /* Express.nib */; }; + 4D1EA31C0993B24700FDC1A2 /* ExpressController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1EA31B0993B24700FDC1A2 /* ExpressController.m */; }; + 4D2AE78B09CCB24C007E18F6 /* DriveDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D2AE78909CCB24C007E18F6 /* DriveDetector.m */; }; + 4D2AEA1A09CCB332007E18F6 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DEB2024052B055F00C39CA9 /* IOKit.framework */; }; + 4D2AEA2909CCB8F9007E18F6 /* DriveDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D2AE78909CCB24C007E18F6 /* DriveDetector.m */; }; + 4D2AEA2A09CCB8FC007E18F6 /* DriveDetector.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D2AE78A09CCB24C007E18F6 /* DriveDetector.h */; }; + 4D3ECC2709A4917000B2E45F /* WhiteBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D3ECC2609A4917000B2E45F /* WhiteBox.m */; }; + 4DD93F8F082036E8008E1322 /* Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DF3C8CB052889CD00A80101 /* Controller.h */; }; + 4DD93F90082036E8008E1322 /* PictureGLView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D85758F052B78E300C39CA9 /* PictureGLView.h */; }; + 4DD93F91082036E8008E1322 /* ScanController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D86C74F07281F4E007BA979 /* ScanController.h */; }; + 4DD93F92082036E8008E1322 /* PictureController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1FD381073D19CE00E46515 /* PictureController.h */; }; + 4DD93F93082036E8008E1322 /* QueueController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD27BA507C0065C0023D231 /* QueueController.h */; }; + 4DD93F94082036E8008E1322 /* PrefsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DE93A3507F5A2C900F3C78F /* PrefsController.h */; }; + 4DD93F96082036E8008E1322 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; }; + 4DD93F97082036E8008E1322 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; + 4DD93F98082036E8008E1322 /* MediaFork.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4D118405053054CD00C39CA9 /* MediaFork.icns */; }; + 4DD93F9A082036E8008E1322 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.mm */; settings = {ATTRIBUTES = (); }; }; + 4DD93F9B082036E8008E1322 /* Controller.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4DF3C8CC052889CD00A80101 /* Controller.mm */; }; + 4DD93F9C082036E8008E1322 /* PictureGLView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4D85758E052B78E300C39CA9 /* PictureGLView.mm */; }; + 4DD93F9D082036E8008E1322 /* ScanController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4D86C74E07281F4E007BA979 /* ScanController.mm */; }; + 4DD93F9E082036E8008E1322 /* PictureController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4D1FD382073D19CE00E46515 /* PictureController.mm */; }; + 4DD93F9F082036E8008E1322 /* QueueController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4DD27BA607C0065C0023D231 /* QueueController.mm */; }; + 4DD93FA0082036E8008E1322 /* PrefsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DE93A3607F5A2C900F3C78F /* PrefsController.m */; }; + 4DD93FA2082036E8008E1322 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + 4DD93FA3082036E8008E1322 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DEB2024052B055F00C39CA9 /* IOKit.framework */; }; + 4DD93FA4082036E8008E1322 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DDE9724052B7B2B00C39CA9 /* OpenGL.framework */; }; + 4DE09E63082038A400FB751F /* MediaFork.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4DE09E62082038A400FB751F /* MediaFork.plist */; }; + 52AFF86A0B59BD07000DA7C4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; + 52AFF86B0B59BD14000DA7C4 /* Express.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4D1EA2DC0993B01000FDC1A2 /* Express.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 0D6E35900B6BD5FA005AABB3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0DFF0B710B6BC6E600549488; + remoteInfo = libmediafork; + }; + 0DFF0BF10B6BCCB400549488 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0DFF0B710B6BC6E600549488; + remoteInfo = libmediafork; + }; + 0DFF0BF30B6BCCB900549488 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0DFF0B710B6BC6E600549488; + remoteInfo = libmediafork; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 0D096DFF0B707D1200A845D4 /* libmediafork.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libmediafork.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D6E35760B6BD4F0005AABB3 /* MediaFork.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = MediaFork.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D9C5CE40B77E85B00828855 /* mediafork.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = mediafork.c; path = ../libmediafork/mediafork.c; sourceTree = SOURCE_ROOT; }; + 0DF377420B7BEACA00115CB0 /* ipodutil.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ipodutil.cpp; path = ../libmediafork/ipodutil.cpp; sourceTree = SOURCE_ROOT; }; + 0DF377970B7BF99A00115CB0 /* fakexcode.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fakexcode.cpp; path = ../test/fakexcode.cpp; sourceTree = SOURCE_ROOT; }; + 0DFF0B720B6BC6E600549488 /* libmediafork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libmediafork.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 0DFF0C0A0B6BCEC200549488 /* MediaForkCLI */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = MediaForkCLI; sourceTree = BUILT_PRODUCTS_DIR; }; + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; + 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 4D1125D709D72FD200E0657B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = ""; }; + 4D118405053054CD00C39CA9 /* MediaFork.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = MediaFork.icns; sourceTree = ""; }; + 4D1EA2DA0993B01000FDC1A2 /* Instant MediaFork.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Instant MediaFork.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4D1EA2DC0993B01000FDC1A2 /* Express.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Express.plist; sourceTree = ""; }; + 4D1EA3000993B13700FDC1A2 /* Express.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Express.nib; path = English.lproj/Express.nib; sourceTree = ""; }; + 4D1EA31A0993B24700FDC1A2 /* ExpressController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ExpressController.h; sourceTree = ""; }; + 4D1EA31B0993B24700FDC1A2 /* ExpressController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ExpressController.m; sourceTree = ""; }; + 4D1FD381073D19CE00E46515 /* PictureController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PictureController.h; sourceTree = ""; }; + 4D1FD382073D19CE00E46515 /* PictureController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = PictureController.mm; sourceTree = ""; }; + 4D2AE78909CCB24C007E18F6 /* DriveDetector.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DriveDetector.m; sourceTree = ""; }; + 4D2AE78A09CCB24C007E18F6 /* DriveDetector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DriveDetector.h; sourceTree = ""; }; + 4D3ECC2509A4917000B2E45F /* WhiteBox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WhiteBox.h; sourceTree = ""; }; + 4D3ECC2609A4917000B2E45F /* WhiteBox.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WhiteBox.m; sourceTree = ""; }; + 4D85758E052B78E300C39CA9 /* PictureGLView.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = PictureGLView.mm; sourceTree = ""; }; + 4D85758F052B78E300C39CA9 /* PictureGLView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PictureGLView.h; sourceTree = ""; }; + 4D86C74E07281F4E007BA979 /* ScanController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ScanController.mm; sourceTree = ""; }; + 4D86C74F07281F4E007BA979 /* ScanController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ScanController.h; sourceTree = ""; }; + 4DD27BA507C0065C0023D231 /* QueueController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = QueueController.h; sourceTree = ""; }; + 4DD27BA607C0065C0023D231 /* QueueController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = QueueController.mm; sourceTree = ""; }; + 4DDE9724052B7B2B00C39CA9 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + 4DE09E62082038A400FB751F /* MediaFork.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = MediaFork.plist; sourceTree = ""; }; + 4DE93A3507F5A2C900F3C78F /* PrefsController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PrefsController.h; sourceTree = ""; }; + 4DE93A3607F5A2C900F3C78F /* PrefsController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PrefsController.m; sourceTree = ""; }; + 4DEB2024052B055F00C39CA9 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 4DF3C8CB052889CD00A80101 /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = ""; }; + 4DF3C8CC052889CD00A80101 /* Controller.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = Controller.mm; sourceTree = ""; }; + 526FBC760B4CA8F40064E04C /* test.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 30; name = test.c; path = ../test/test.c; sourceTree = SOURCE_ROOT; }; + 526FBC9B0B4CAB100064E04C /* common.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = common.c; path = ../libmediafork/common.c; sourceTree = SOURCE_ROOT; }; + 526FBC9D0B4CAB100064E04C /* deca52.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = deca52.c; path = ../libmediafork/deca52.c; sourceTree = SOURCE_ROOT; }; + 526FBC9E0B4CAB100064E04C /* decavcodec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = decavcodec.c; path = ../libmediafork/decavcodec.c; sourceTree = SOURCE_ROOT; }; + 526FBC9F0B4CAB100064E04C /* declpcm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = declpcm.c; path = ../libmediafork/declpcm.c; sourceTree = SOURCE_ROOT; }; + 526FBCA00B4CAB100064E04C /* decmpeg2.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = decmpeg2.c; path = ../libmediafork/decmpeg2.c; sourceTree = SOURCE_ROOT; }; + 526FBCA10B4CAB100064E04C /* decsub.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = decsub.c; path = ../libmediafork/decsub.c; sourceTree = SOURCE_ROOT; }; + 526FBCA20B4CAB100064E04C /* demuxmpeg.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = demuxmpeg.c; path = ../libmediafork/demuxmpeg.c; sourceTree = SOURCE_ROOT; }; + 526FBCA30B4CAB100064E04C /* dvd.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dvd.c; path = ../libmediafork/dvd.c; sourceTree = SOURCE_ROOT; }; + 526FBCA40B4CAB100064E04C /* encavcodec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = encavcodec.c; path = ../libmediafork/encavcodec.c; sourceTree = SOURCE_ROOT; }; + 526FBCA50B4CAB100064E04C /* encfaac.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = encfaac.c; path = ../libmediafork/encfaac.c; sourceTree = SOURCE_ROOT; }; + 526FBCA60B4CAB100064E04C /* enclame.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = enclame.c; path = ../libmediafork/enclame.c; sourceTree = SOURCE_ROOT; }; + 526FBCA70B4CAB100064E04C /* encvorbis.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = encvorbis.c; path = ../libmediafork/encvorbis.c; sourceTree = SOURCE_ROOT; }; + 526FBCA80B4CAB100064E04C /* encx264.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = encx264.c; path = ../libmediafork/encx264.c; sourceTree = SOURCE_ROOT; }; + 526FBCA90B4CAB100064E04C /* encxvid.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = encxvid.c; path = ../libmediafork/encxvid.c; sourceTree = SOURCE_ROOT; }; + 526FBCAA0B4CAB100064E04C /* fifo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fifo.c; path = ../libmediafork/fifo.c; sourceTree = SOURCE_ROOT; }; + 526FBCAE0B4CAB100064E04C /* muxavi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = muxavi.c; path = ../libmediafork/muxavi.c; sourceTree = SOURCE_ROOT; }; + 526FBCAF0B4CAB100064E04C /* muxcommon.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = muxcommon.c; path = ../libmediafork/muxcommon.c; sourceTree = SOURCE_ROOT; }; + 526FBCB00B4CAB100064E04C /* muxmp4.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = muxmp4.c; path = ../libmediafork/muxmp4.c; sourceTree = SOURCE_ROOT; }; + 526FBCB10B4CAB100064E04C /* muxogm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = muxogm.c; path = ../libmediafork/muxogm.c; sourceTree = SOURCE_ROOT; }; + 526FBCB20B4CAB100064E04C /* ports.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ports.c; path = ../libmediafork/ports.c; sourceTree = SOURCE_ROOT; }; + 526FBCB40B4CAB100064E04C /* reader.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = reader.c; path = ../libmediafork/reader.c; sourceTree = SOURCE_ROOT; }; + 526FBCB50B4CAB100064E04C /* render.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = render.c; path = ../libmediafork/render.c; sourceTree = SOURCE_ROOT; }; + 526FBCB60B4CAB100064E04C /* scan.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = scan.c; path = ../libmediafork/scan.c; sourceTree = SOURCE_ROOT; }; + 526FBCB70B4CAB100064E04C /* sync.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sync.c; path = ../libmediafork/sync.c; sourceTree = SOURCE_ROOT; }; + 526FBCB80B4CAB100064E04C /* update.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = update.c; path = ../libmediafork/update.c; sourceTree = SOURCE_ROOT; }; + 526FBCB90B4CAB100064E04C /* work.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = work.c; path = ../libmediafork/work.c; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0D096DFD0B707D1200A845D4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0D096EA30B70884A00A845D4 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0DFF0B700B6BC6E600549488 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0DFF0C080B6BCEC200549488 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4D1EA2D80993B01000FDC1A2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4D1EA2F60993B0CA00FDC1A2 /* Cocoa.framework in Frameworks */, + 4D2AEA1A09CCB332007E18F6 /* IOKit.framework in Frameworks */, + 4D1125D909D72FD200E0657B /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4DD93FA1082036E8008E1322 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4DD93FA2082036E8008E1322 /* Cocoa.framework in Frameworks */, + 4DD93FA3082036E8008E1322 /* IOKit.framework in Frameworks */, + 4DD93FA4082036E8008E1322 /* OpenGL.framework in Frameworks */, + 4D1125D809D72FD200E0657B /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 4D1EA2DA0993B01000FDC1A2 /* Instant MediaFork.app */, + 0DFF0B720B6BC6E600549488 /* libmediafork.a */, + 0DFF0C0A0B6BCEC200549488 /* MediaForkCLI */, + 0D6E35760B6BD4F0005AABB3 /* MediaFork.app */, + 0D096DFF0B707D1200A845D4 /* libmediafork.dylib */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* HandBrake */ = { + isa = PBXGroup; + children = ( + 526FBC940B4CAA310064E04C /* Instant MediaFork Sources */, + 526FBC930B4CAA260064E04C /* MediaFork Sources */, + 526FBC920B4CAA120064E04C /* MediaForkCLI Sources */, + 526FBC8D0B4CA9F90064E04C /* libmediafork Sources */, + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = HandBrake; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 29B97316FDCFA39411CA2CEA /* main.mm */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 29B97318FDCFA39411CA2CEA /* MainMenu.nib */, + 4D118405053054CD00C39CA9 /* MediaFork.icns */, + 4D1EA3000993B13700FDC1A2 /* Express.nib */, + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4D1125D709D72FD200E0657B /* libz.dylib */, + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + 4DEB2024052B055F00C39CA9 /* IOKit.framework */, + 4DDE9724052B7B2B00C39CA9 /* OpenGL.framework */, + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 526FBC8D0B4CA9F90064E04C /* libmediafork Sources */ = { + isa = PBXGroup; + children = ( + 526FBC9B0B4CAB100064E04C /* common.c */, + 526FBC9D0B4CAB100064E04C /* deca52.c */, + 526FBC9E0B4CAB100064E04C /* decavcodec.c */, + 526FBC9F0B4CAB100064E04C /* declpcm.c */, + 526FBCA00B4CAB100064E04C /* decmpeg2.c */, + 526FBCA10B4CAB100064E04C /* decsub.c */, + 0DF377420B7BEACA00115CB0 /* ipodutil.cpp */, + 526FBCA20B4CAB100064E04C /* demuxmpeg.c */, + 526FBCA30B4CAB100064E04C /* dvd.c */, + 526FBCA40B4CAB100064E04C /* encavcodec.c */, + 526FBCA50B4CAB100064E04C /* encfaac.c */, + 526FBCA60B4CAB100064E04C /* enclame.c */, + 526FBCA70B4CAB100064E04C /* encvorbis.c */, + 526FBCA80B4CAB100064E04C /* encx264.c */, + 526FBCA90B4CAB100064E04C /* encxvid.c */, + 526FBCAA0B4CAB100064E04C /* fifo.c */, + 526FBCAE0B4CAB100064E04C /* muxavi.c */, + 526FBCAF0B4CAB100064E04C /* muxcommon.c */, + 526FBCB00B4CAB100064E04C /* muxmp4.c */, + 0D9C5CE40B77E85B00828855 /* mediafork.c */, + 526FBCB10B4CAB100064E04C /* muxogm.c */, + 526FBCB20B4CAB100064E04C /* ports.c */, + 526FBCB40B4CAB100064E04C /* reader.c */, + 526FBCB50B4CAB100064E04C /* render.c */, + 526FBCB60B4CAB100064E04C /* scan.c */, + 526FBCB70B4CAB100064E04C /* sync.c */, + 526FBCB80B4CAB100064E04C /* update.c */, + 526FBCB90B4CAB100064E04C /* work.c */, + ); + name = "libmediafork Sources"; + sourceTree = ""; + }; + 526FBC920B4CAA120064E04C /* MediaForkCLI Sources */ = { + isa = PBXGroup; + children = ( + 0DF377970B7BF99A00115CB0 /* fakexcode.cpp */, + 526FBC760B4CA8F40064E04C /* test.c */, + ); + name = "MediaForkCLI Sources"; + sourceTree = ""; + }; + 526FBC930B4CAA260064E04C /* MediaFork Sources */ = { + isa = PBXGroup; + children = ( + 4DE09E62082038A400FB751F /* MediaFork.plist */, + 4D1FD381073D19CE00E46515 /* PictureController.h */, + 4D1FD382073D19CE00E46515 /* PictureController.mm */, + 4DF3C8CB052889CD00A80101 /* Controller.h */, + 4DF3C8CC052889CD00A80101 /* Controller.mm */, + 4D86C74E07281F4E007BA979 /* ScanController.mm */, + 4D86C74F07281F4E007BA979 /* ScanController.h */, + 4D85758E052B78E300C39CA9 /* PictureGLView.mm */, + 4D85758F052B78E300C39CA9 /* PictureGLView.h */, + 4DD27BA507C0065C0023D231 /* QueueController.h */, + 4DD27BA607C0065C0023D231 /* QueueController.mm */, + 4DE93A3507F5A2C900F3C78F /* PrefsController.h */, + 4DE93A3607F5A2C900F3C78F /* PrefsController.m */, + 4D3ECC2509A4917000B2E45F /* WhiteBox.h */, + 4D3ECC2609A4917000B2E45F /* WhiteBox.m */, + 4D2AE78909CCB24C007E18F6 /* DriveDetector.m */, + 4D2AE78A09CCB24C007E18F6 /* DriveDetector.h */, + ); + name = "MediaFork Sources"; + sourceTree = ""; + }; + 526FBC940B4CAA310064E04C /* Instant MediaFork Sources */ = { + isa = PBXGroup; + children = ( + 4D1EA31A0993B24700FDC1A2 /* ExpressController.h */, + 4D1EA31B0993B24700FDC1A2 /* ExpressController.m */, + 4D1EA2DC0993B01000FDC1A2 /* Express.plist */, + ); + name = "Instant MediaFork Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 0D096DFB0B707D1200A845D4 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0DFF0B6E0B6BC6E600549488 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4DD93F8E082036E8008E1322 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4DD93F8F082036E8008E1322 /* Controller.h in Headers */, + 4DD93F90082036E8008E1322 /* PictureGLView.h in Headers */, + 4DD93F91082036E8008E1322 /* ScanController.h in Headers */, + 4DD93F92082036E8008E1322 /* PictureController.h in Headers */, + 4DD93F93082036E8008E1322 /* QueueController.h in Headers */, + 4DD93F94082036E8008E1322 /* PrefsController.h in Headers */, + 4D2AEA2A09CCB8FC007E18F6 /* DriveDetector.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0D096DFE0B707D1200A845D4 /* libmediafork dlib */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0D096E650B707D5800A845D4 /* Build configuration list for PBXNativeTarget "libmediafork dlib" */; + buildPhases = ( + 0D096DFB0B707D1200A845D4 /* Headers */, + 0D096DFC0B707D1200A845D4 /* Sources */, + 0D096DFD0B707D1200A845D4 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "libmediafork dlib"; + productName = "libmediafork dlib"; + productReference = 0D096DFF0B707D1200A845D4 /* libmediafork.dylib */; + productType = "com.apple.product-type.library.dynamic"; + }; + 0DFF0B710B6BC6E600549488 /* libmediafork */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0DFF0B730B6BC70400549488 /* Build configuration list for PBXNativeTarget "libmediafork" */; + buildPhases = ( + 0DFF0B6E0B6BC6E600549488 /* Headers */, + 0DFF0B6F0B6BC6E600549488 /* Sources */, + 0DFF0B700B6BC6E600549488 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = libmediafork; + productName = libmediafork; + productReference = 0DFF0B720B6BC6E600549488 /* libmediafork.a */; + productType = "com.apple.product-type.library.static"; + }; + 0DFF0C090B6BCEC200549488 /* MediaForkCLI */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0DFF0C0C0B6BCEE000549488 /* Build configuration list for PBXNativeTarget "MediaForkCLI" */; + buildPhases = ( + 0DFF0C070B6BCEC200549488 /* Sources */, + 0DFF0C080B6BCEC200549488 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 0D6E35910B6BD5FA005AABB3 /* PBXTargetDependency */, + ); + name = MediaForkCLI; + productName = MediaForkCLI; + productReference = 0DFF0C0A0B6BCEC200549488 /* MediaForkCLI */; + productType = "com.apple.product-type.tool"; + }; + 4D1EA2D90993B01000FDC1A2 /* Instant MediaFork */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4D1EA2DD0993B01100FDC1A2 /* Build configuration list for PBXNativeTarget "Instant MediaFork" */; + buildPhases = ( + 4D1EA2D60993B01000FDC1A2 /* Resources */, + 4D1EA2D70993B01000FDC1A2 /* Sources */, + 4D1EA2D80993B01000FDC1A2 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 0DFF0BF20B6BCCB400549488 /* PBXTargetDependency */, + ); + name = "Instant MediaFork"; + productName = "Instant HandBrake"; + productReference = 4D1EA2DA0993B01000FDC1A2 /* Instant MediaFork.app */; + productType = "com.apple.product-type.application"; + }; + 4DD93F8D082036E8008E1322 /* MediaFork */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4D4E7BC0087804870051572B /* Build configuration list for PBXNativeTarget "MediaFork" */; + buildPhases = ( + 4DD93F8E082036E8008E1322 /* Headers */, + 4DD93F95082036E8008E1322 /* Resources */, + 4DD93F99082036E8008E1322 /* Sources */, + 4DD93FA1082036E8008E1322 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 0DFF0BF40B6BCCB900549488 /* PBXTargetDependency */, + ); + name = MediaFork; + productName = HandBrake; + productReference = 0D6E35760B6BD4F0005AABB3 /* MediaFork.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 4D4E7BC4087804870051572B /* Build configuration list for PBXProject "MediaFork" */; + hasScannedForEncodings = 1; + mainGroup = 29B97314FDCFA39411CA2CEA /* HandBrake */; + projectDirPath = ""; + targets = ( + 4DD93F8D082036E8008E1322 /* MediaFork */, + 4D1EA2D90993B01000FDC1A2 /* Instant MediaFork */, + 0DFF0B710B6BC6E600549488 /* libmediafork */, + 0DFF0C090B6BCEC200549488 /* MediaForkCLI */, + 0D096DFE0B707D1200A845D4 /* libmediafork dlib */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4D1EA2D60993B01000FDC1A2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0D75EDC00B6FF9DA0090EA86 /* MediaFork.icns in Resources */, + 52AFF86B0B59BD14000DA7C4 /* Express.plist in Resources */, + 52AFF86A0B59BD07000DA7C4 /* InfoPlist.strings in Resources */, + 4D1EA3010993B13700FDC1A2 /* Express.nib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4DD93F95082036E8008E1322 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4DD93F96082036E8008E1322 /* MainMenu.nib in Resources */, + 4DD93F97082036E8008E1322 /* InfoPlist.strings in Resources */, + 4DD93F98082036E8008E1322 /* MediaFork.icns in Resources */, + 4DE09E63082038A400FB751F /* MediaFork.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0D096DFC0B707D1200A845D4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0D096E010B707D3400A845D4 /* common.c in Sources */, + 0D096E020B707D3400A845D4 /* deca52.c in Sources */, + 0D096E030B707D3400A845D4 /* decavcodec.c in Sources */, + 0D096E040B707D3400A845D4 /* declpcm.c in Sources */, + 0D096E050B707D3400A845D4 /* decmpeg2.c in Sources */, + 0D096E060B707D3400A845D4 /* decsub.c in Sources */, + 0D096E070B707D3400A845D4 /* demuxmpeg.c in Sources */, + 0D096E080B707D3400A845D4 /* dvd.c in Sources */, + 0D096E090B707D3400A845D4 /* encavcodec.c in Sources */, + 0D096E0A0B707D3400A845D4 /* encfaac.c in Sources */, + 0D096E0B0B707D3400A845D4 /* enclame.c in Sources */, + 0D096E0C0B707D3400A845D4 /* encvorbis.c in Sources */, + 0D096E0D0B707D3400A845D4 /* encx264.c in Sources */, + 0D096E0E0B707D3400A845D4 /* encxvid.c in Sources */, + 0D096E0F0B707D3400A845D4 /* fifo.c in Sources */, + 0D096E100B707D3400A845D4 /* muxavi.c in Sources */, + 0D096E110B707D3400A845D4 /* muxcommon.c in Sources */, + 0D096E120B707D3400A845D4 /* muxmp4.c in Sources */, + 0D096E130B707D3400A845D4 /* muxogm.c in Sources */, + 0D096E140B707D3400A845D4 /* ports.c in Sources */, + 0D096E150B707D3400A845D4 /* reader.c in Sources */, + 0D096E160B707D3400A845D4 /* render.c in Sources */, + 0D096E170B707D3400A845D4 /* scan.c in Sources */, + 0D096E180B707D3400A845D4 /* sync.c in Sources */, + 0D096E190B707D3400A845D4 /* update.c in Sources */, + 0D096E1A0B707D3400A845D4 /* work.c in Sources */, + 0D9C5CE60B77E85B00828855 /* mediafork.c in Sources */, + 0DF377430B7BEACA00115CB0 /* ipodutil.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0DFF0B6F0B6BC6E600549488 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0DFF0B770B6BC72A00549488 /* common.c in Sources */, + 0DFF0B790B6BC72A00549488 /* deca52.c in Sources */, + 0DFF0B7A0B6BC72A00549488 /* decavcodec.c in Sources */, + 0DFF0B7B0B6BC72A00549488 /* declpcm.c in Sources */, + 0DFF0B7C0B6BC72A00549488 /* decmpeg2.c in Sources */, + 0DFF0B7D0B6BC72A00549488 /* decsub.c in Sources */, + 0DFF0B7E0B6BC72A00549488 /* demuxmpeg.c in Sources */, + 0DFF0B7F0B6BC72A00549488 /* dvd.c in Sources */, + 0DFF0B800B6BC72A00549488 /* encavcodec.c in Sources */, + 0DFF0B810B6BC72A00549488 /* encfaac.c in Sources */, + 0DFF0B820B6BC72A00549488 /* enclame.c in Sources */, + 0DFF0B830B6BC72A00549488 /* encvorbis.c in Sources */, + 0DFF0B840B6BC72A00549488 /* encx264.c in Sources */, + 0DFF0B850B6BC72A00549488 /* encxvid.c in Sources */, + 0DFF0B860B6BC72A00549488 /* fifo.c in Sources */, + 0DFF0B8B0B6BC72A00549488 /* muxavi.c in Sources */, + 0DFF0B8C0B6BC72A00549488 /* muxcommon.c in Sources */, + 0DFF0B8D0B6BC72A00549488 /* muxmp4.c in Sources */, + 0DFF0B8E0B6BC72A00549488 /* muxogm.c in Sources */, + 0DFF0B8F0B6BC72A00549488 /* ports.c in Sources */, + 0DFF0B910B6BC72A00549488 /* reader.c in Sources */, + 0DFF0B920B6BC72A00549488 /* render.c in Sources */, + 0DFF0B930B6BC72A00549488 /* scan.c in Sources */, + 0DFF0B940B6BC72A00549488 /* sync.c in Sources */, + 0DFF0B950B6BC72A00549488 /* update.c in Sources */, + 0DFF0B960B6BC72A00549488 /* work.c in Sources */, + 0D9C5CE50B77E85B00828855 /* mediafork.c in Sources */, + 0DF377440B7BEACA00115CB0 /* ipodutil.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0DFF0C070B6BCEC200549488 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0DFF0C100B6BCEE800549488 /* test.c in Sources */, + 0DF377980B7BF99A00115CB0 /* fakexcode.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4D1EA2D70993B01000FDC1A2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4D1EA2EA0993B09A00FDC1A2 /* main.mm in Sources */, + 4D1EA31C0993B24700FDC1A2 /* ExpressController.m in Sources */, + 4D3ECC2709A4917000B2E45F /* WhiteBox.m in Sources */, + 4D2AE78B09CCB24C007E18F6 /* DriveDetector.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4DD93F99082036E8008E1322 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4DD93F9A082036E8008E1322 /* main.mm in Sources */, + 4DD93F9B082036E8008E1322 /* Controller.mm in Sources */, + 4DD93F9C082036E8008E1322 /* PictureGLView.mm in Sources */, + 4DD93F9D082036E8008E1322 /* ScanController.mm in Sources */, + 4DD93F9E082036E8008E1322 /* PictureController.mm in Sources */, + 4DD93F9F082036E8008E1322 /* QueueController.mm in Sources */, + 4DD93FA0082036E8008E1322 /* PrefsController.m in Sources */, + 4D2AEA2909CCB8F9007E18F6 /* DriveDetector.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0D6E35910B6BD5FA005AABB3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0DFF0B710B6BC6E600549488 /* libmediafork */; + targetProxy = 0D6E35900B6BD5FA005AABB3 /* PBXContainerItemProxy */; + }; + 0DFF0BF20B6BCCB400549488 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0DFF0B710B6BC6E600549488 /* libmediafork */; + targetProxy = 0DFF0BF10B6BCCB400549488 /* PBXContainerItemProxy */; + }; + 0DFF0BF40B6BCCB900549488 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0DFF0B710B6BC6E600549488 /* libmediafork */; + targetProxy = 0DFF0BF30B6BCCB900549488 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C165DFE840E0CC02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = { + isa = PBXVariantGroup; + children = ( + 29B97319FDCFA39411CA2CEA /* English */, + ); + name = MainMenu.nib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0D096E660B707D5800A845D4 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + COPY_PHASE_STRIP = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_PREFIX = lib; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + LIBRARY_SEARCH_PATHS = ""; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ( + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-ldl", + "-flat_namespace", + "-read_only_relocs", + suppress, + ); + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SEPARATE_STRIP = YES; + ZERO_LINK = NO; + }; + name = Development; + }; + 0D096E670B707D5800A845D4 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_PREFIX = lib; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + LIBRARY_SEARCH_PATHS = ""; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ( + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-ldl", + "-flat_namespace", + "-read_only_relocs", + suppress, + ); + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SEPARATE_STRIP = YES; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 0D096E680B707D5800A845D4 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_PREFIX = lib; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + LIBRARY_SEARCH_PATHS = ""; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ( + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-ldl", + "-flat_namespace", + "-read_only_relocs", + suppress, + ); + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SEPARATE_STRIP = YES; + ZERO_LINK = NO; + }; + name = Default; + }; + 0D096E690B707D5800A845D4 /* UB */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_PREFIX = lib; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + LIBRARY_SEARCH_PATHS = ""; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ( + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-ldl", + "-flat_namespace", + "-read_only_relocs", + suppress, + ); + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SEPARATE_STRIP = YES; + ZERO_LINK = NO; + }; + name = UB; + }; + 0D88F56B0B6CDCD400F81F26 /* UB */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ""; + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = UB; + }; + 0D88F56C0B6CDCD400F81F26 /* UB */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = ..; + CURRENT_PROJECT_VERSION = 0.7.1a2; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_OPTIMIZATION_LEVEL = s; + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = MediaFork.plist; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PRODUCT_NAME = MediaFork; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = app; + }; + name = UB; + }; + 0D88F56D0B6CDCD400F81F26 /* UB */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = ..; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = Express.plist; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)\""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PREBINDING = NO; + PRODUCT_NAME = "Instant MediaFork"; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + WRAPPER_EXTENSION = app; + ZERO_LINK = NO; + }; + name = UB; + }; + 0D88F56E0B6CDCD400F81F26 /* UB */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = ..; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + HEADER_SEARCH_PATHS = ../libmediafork; + INSTALL_PATH = /usr/local/bin; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-lz", + ); + PREBINDING = NO; + PRODUCT_NAME = MediaForkCLI; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = UB; + }; + 0D88F56F0B6CDCD400F81F26 /* UB */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = UB; + }; + 0DFF0B740B6BC70400549488 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ""; + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = Development; + }; + 0DFF0B750B6BC70400549488 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ""; + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 0DFF0B760B6BC70400549488 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../libmediafork"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../contrib/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_CFLAGS = ( + "-D__LIBMEDIAFORK__", + "-DSYS_DARWIN", + "$(OTHER_CFLAGS_QUOTED_1)", + "-DHB_BUILD=2006022400", + "-DUSE_PTHREAD", + ); + OTHER_CFLAGS_QUOTED_1 = "-DHB_VERSION=\\\"0.7.1\\\""; + OTHER_LDFLAGS = ""; + PER_ARCH_CFLAGS_ppc = "-DWORDS_BIGENDIAN"; + PREBINDING = NO; + PRODUCT_NAME = mediafork; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = Default; + }; + 0DFF0C0D0B6BCEE000549488 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = ..; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + HEADER_SEARCH_PATHS = ../libmediafork; + INSTALL_PATH = /usr/local/bin; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-lz", + ); + PREBINDING = NO; + PRODUCT_NAME = MediaForkCLI; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = Development; + }; + 0DFF0C0E0B6BCEE000549488 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = ..; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + HEADER_SEARCH_PATHS = ../libmediafork; + INSTALL_PATH = /usr/local/bin; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-lz", + ); + PREBINDING = NO; + PRODUCT_NAME = MediaForkCLI; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 0DFF0C0F0B6BCEE000549488 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = ..; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + HEADER_SEARCH_PATHS = ../libmediafork; + INSTALL_PATH = /usr/local/bin; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + "-lz", + ); + PREBINDING = NO; + PRODUCT_NAME = MediaForkCLI; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + ZERO_LINK = NO; + }; + name = Default; + }; + 4D1EA2DE0993B01100FDC1A2 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = Express.plist; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)\""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PREBINDING = NO; + PRODUCT_NAME = "Instant MediaFork"; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + WRAPPER_EXTENSION = app; + ZERO_LINK = NO; + }; + name = Development; + }; + 4D1EA2DF0993B01100FDC1A2 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = Express.plist; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)\""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PREBINDING = NO; + PRODUCT_NAME = "Instant MediaFork"; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + WRAPPER_EXTENSION = app; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4D1EA2E00993B01100FDC1A2 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = Express.plist; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)\""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PREBINDING = NO; + PRODUCT_NAME = "Instant MediaFork"; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + WRAPPER_EXTENSION = app; + ZERO_LINK = NO; + }; + name = Default; + }; + 4D4E7BC1087804870051572B /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0.7.1a2; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = s; + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = MediaFork.plist; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PRODUCT_NAME = MediaFork; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = app; + ZERO_LINK = NO; + }; + name = Development; + }; + 4D4E7BC2087804870051572B /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 0.7.1a2; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_OPTIMIZATION_LEVEL = s; + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = MediaFork.plist; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PRODUCT_NAME = MediaFork; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = app; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4D4E7BC3087804870051572B /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + CURRENT_PROJECT_VERSION = 0.7.1a2; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_OPTIMIZATION_LEVEL = s; + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + HEADER_SEARCH_PATHS = ../libmediafork; + INFOPLIST_FILE = MediaFork.plist; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + ../libmediafork/libmediafork.a, + ../contrib/lib/libmp4v2.a, + ../contrib/lib/liba52.a, + ../contrib/lib/libavformat.a, + ../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, + ../contrib/lib/libvorbis.a, + ../contrib/lib/libvorbisenc.a, + ../contrib/lib/libogg.a, + ../contrib/lib/libsamplerate.a, + ../contrib/lib/libx264.a, + ../contrib/lib/libxvidcore.a, + ); + PRODUCT_NAME = MediaFork; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = app; + }; + name = Default; + }; + 4D4E7BC5087804870051572B /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Development; + }; + 4D4E7BC6087804870051572B /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Deployment; + }; + 4D4E7BC7087804870051572B /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Default; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0D096E650B707D5800A845D4 /* Build configuration list for PBXNativeTarget "libmediafork dlib" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0D096E660B707D5800A845D4 /* Development */, + 0D096E670B707D5800A845D4 /* Deployment */, + 0D096E680B707D5800A845D4 /* Default */, + 0D096E690B707D5800A845D4 /* UB */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 0DFF0B730B6BC70400549488 /* Build configuration list for PBXNativeTarget "libmediafork" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0DFF0B740B6BC70400549488 /* Development */, + 0DFF0B750B6BC70400549488 /* Deployment */, + 0DFF0B760B6BC70400549488 /* Default */, + 0D88F56B0B6CDCD400F81F26 /* UB */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 0DFF0C0C0B6BCEE000549488 /* Build configuration list for PBXNativeTarget "MediaForkCLI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0DFF0C0D0B6BCEE000549488 /* Development */, + 0DFF0C0E0B6BCEE000549488 /* Deployment */, + 0DFF0C0F0B6BCEE000549488 /* Default */, + 0D88F56E0B6CDCD400F81F26 /* UB */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4D1EA2DD0993B01100FDC1A2 /* Build configuration list for PBXNativeTarget "Instant MediaFork" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4D1EA2DE0993B01100FDC1A2 /* Development */, + 4D1EA2DF0993B01100FDC1A2 /* Deployment */, + 4D1EA2E00993B01100FDC1A2 /* Default */, + 0D88F56D0B6CDCD400F81F26 /* UB */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4D4E7BC0087804870051572B /* Build configuration list for PBXNativeTarget "MediaFork" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4D4E7BC1087804870051572B /* Development */, + 4D4E7BC2087804870051572B /* Deployment */, + 4D4E7BC3087804870051572B /* Default */, + 0D88F56C0B6CDCD400F81F26 /* UB */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4D4E7BC4087804870051572B /* Build configuration list for PBXProject "MediaFork" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4D4E7BC5087804870051572B /* Development */, + 4D4E7BC6087804870051572B /* Deployment */, + 4D4E7BC7087804870051572B /* Default */, + 0D88F56F0B6CDCD400F81F26 /* UB */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/macosx/PictureController.h b/macosx/PictureController.h index 3a279e133..7f750f031 100644 --- a/macosx/PictureController.h +++ b/macosx/PictureController.h @@ -6,7 +6,7 @@ #include -#include "hb.h" +#include "mediafork.h" #include "PictureGLView.h" @interface PictureController : NSObject @@ -37,10 +37,15 @@ IBOutlet NSTextField * fCropRightField; IBOutlet NSStepper * fCropRightStepper; IBOutlet NSButton * fDeinterlaceCheck; + IBOutlet NSButton * fPARCheck; IBOutlet NSButton * fEffectsCheck; IBOutlet NSButton * fPrevButton; IBOutlet NSButton * fNextButton; IBOutlet NSTextField * fInfoField; + + int MaxOutputWidth; + int MaxOutputHeight; + } - (void) SetHandle: (hb_handle_t *) handle; diff --git a/macosx/PictureController.mm b/macosx/PictureController.mm index f4e9d51d9..2ed27ab54 100644 --- a/macosx/PictureController.mm +++ b/macosx/PictureController.mm @@ -73,6 +73,7 @@ static int GetAlignedSize( int size ) fTexBuf[1] = (uint8_t *) realloc( fTexBuf[1], fTexBufSize ); } + [fWidthStepper setMaxValue: title->width]; [fWidthStepper setIntValue: job->width]; [fWidthField setIntValue: job->width]; @@ -85,7 +86,10 @@ static int GetAlignedSize( int size ) [fCropLeftStepper setMaxValue: title->width/2-2]; [fCropRightStepper setMaxValue: title->width/2-2]; [fDeinterlaceCheck setState: job->deinterlace ? NSOnState : NSOffState]; + [fPARCheck setState: job->pixel_ratio ? NSOnState : NSOffState]; + MaxOutputWidth = title->width; + MaxOutputHeight = title->height; fPicture = 0; [self SettingsChanged: nil]; } @@ -127,10 +131,28 @@ static int GetAlignedSize( int size ) [fPictureGLView Display: anim buffer1: fTexBuf[0] buffer2: fTexBuf[1] width: ( fTitle->width + 2 ) height: ( fTitle->height + 2 )]; - - [fInfoField setStringValue: [NSString stringWithFormat: - @"Source %dx%d, output %dx%d", fTitle->width, fTitle->height, - fTitle->job->width, fTitle->job->height]]; + + /* Set the Output Display below the Preview Picture*/ + if (fTitle->job->pixel_ratio == 1) + { + int titlewidth = fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3]; + int arpwidth = fTitle->job->pixel_aspect_width; + int arpheight = fTitle->job->pixel_aspect_height; + int displayparwidth = titlewidth * arpwidth / arpheight; + int displayparheight = fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]; + [fInfoField setStringValue: [NSString stringWithFormat: + @"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d", fTitle->width, fTitle->height, + titlewidth, fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1], displayparwidth, + fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]]]; + + + } + else + { + [fInfoField setStringValue: [NSString stringWithFormat: + @"Source: %dx%d, Output: %dx%d", fTitle->width, fTitle->height, + fTitle->job->width, fTitle->job->height]]; + } [fPrevButton setEnabled: ( fPicture > 0 )]; [fNextButton setEnabled: ( fPicture < 9 )]; @@ -139,11 +161,42 @@ static int GetAlignedSize( int size ) - (IBAction) SettingsChanged: (id) sender { hb_job_t * job = fTitle->job; + + if ([fPARCheck state] == 1 ) + { + [fWidthStepper setIntValue: MaxOutputWidth]; + [fWidthField setIntValue: MaxOutputWidth]; + + [fHeightStepper setIntValue: fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]]; + [fHeightField setIntValue: fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]]; + [fRatioCheck setState: 0]; + [fWidthStepper setEnabled: NO]; + [fWidthField setEnabled: NO]; + [fHeightStepper setEnabled: NO]; + [fHeightField setEnabled: NO]; + [fRatioCheck setEnabled: NO]; + + + } + else + { + [fWidthStepper setEnabled: YES]; + [fWidthField setEnabled: YES]; + [fHeightStepper setEnabled: YES]; + [fHeightField setEnabled: YES]; + [fRatioCheck setEnabled: YES]; + } + + + job->width = [fWidthStepper intValue]; job->height = [fHeightStepper intValue]; job->keep_ratio = ( [fRatioCheck state] == NSOnState ); job->deinterlace = ( [fDeinterlaceCheck state] == NSOnState ); + job->pixel_ratio = ( [fPARCheck state] == NSOnState ); + + bool autocrop = ( [fCropMatrix selectedRow] == 0 ); [fCropTopStepper setEnabled: !autocrop]; @@ -222,7 +275,8 @@ static int GetAlignedSize( int size ) - (IBAction) ClosePanel: (id) sender { - [NSApp stopModal]; + + [NSApp stopModal]; } @end diff --git a/macosx/PictureGLView.h b/macosx/PictureGLView.h index 229d822ac..518ba1268 100644 --- a/macosx/PictureGLView.h +++ b/macosx/PictureGLView.h @@ -6,7 +6,7 @@ #include -#include "hb.h" +#include "mediafork.h" #define HB_ANIMATE_NONE 1 #define HB_ANIMATE_BACKWARD 2 diff --git a/macosx/PrefsController.h b/macosx/PrefsController.h index 46ff48b3b..a9c198c55 100644 --- a/macosx/PrefsController.h +++ b/macosx/PrefsController.h @@ -7,6 +7,13 @@ IBOutlet NSPanel * fPanel; IBOutlet NSButton * fUpdateCheck; IBOutlet NSComboBox * fdefaultlanguage; + IBOutlet NSButton * fFileExtItunes; + IBOutlet NSButton * fDefCrf; + IBOutlet NSButton * fDefDeinterlace; + IBOutlet NSButton * fDefPicSizeAutoSetipod; + IBOutlet NSButton * fDefPixelRatio; + + } - (IBAction) OpenPanel: (id) sender; diff --git a/macosx/PrefsController.m b/macosx/PrefsController.m index a4622ae51..6f98400e5 100644 --- a/macosx/PrefsController.m +++ b/macosx/PrefsController.m @@ -8,17 +8,32 @@ NSDictionary * appDefaults; /* Unless the user specified otherwise, default is to check - for update */ + for update fDefPicSizeAutoSetipod*/ defaults = [NSUserDefaults standardUserDefaults]; appDefaults = [NSDictionary dictionaryWithObject:@"YES" forKey:@"CheckForUpdates"]; appDefaults = [NSDictionary dictionaryWithObject:@"English" forKey:@"DefaultLanguage"]; + appDefaults = [NSDictionary dictionaryWithObject:@"NO" + forKey:@"DefaultMpegName"]; + appDefaults = [NSDictionary dictionaryWithObject:@"NO" + forKey:@"DefaultCrf"]; + appDefaults = [NSDictionary dictionaryWithObject:@"NO" + forKey:@"DefaultDeinterlaceOn"]; + appDefaults = [NSDictionary dictionaryWithObject:@"YES" + forKey:@"DefaultPicSizeAutoiPod"]; + appDefaults = [NSDictionary dictionaryWithObject:@"NO" + forKey:@"PixelRatio"]; + + [defaults registerDefaults: appDefaults]; - /* Check or uncheck according to the preferences */ + /* fUpdateCheck Check or uncheck according to the preferences */ [fUpdateCheck setState: [defaults boolForKey:@"CheckForUpdates"] ? NSOnState : NSOffState]; + + + // Fill the languages combobox [fdefaultlanguage removeAllItems]; [fdefaultlanguage addItemWithObjectValue: @"Afar"]; @@ -185,10 +200,37 @@ [fdefaultlanguage addItemWithObjectValue: @"Yoruba"]; [fdefaultlanguage addItemWithObjectValue: @"Zhuang"]; [fdefaultlanguage addItemWithObjectValue: @"Zulu"]; + [fdefaultlanguage setStringValue:@"English"]; + + /* If a Default Language is selected then write it otherwise let English as default */ - [fdefaultlanguage setStringValue:[defaults stringForKey:@"DefaultLanguage"]]; - [fdefaultlanguage selectItemWithObjectValue:[defaults stringForKey:@"DefaultLanguage"]]; + if ([defaults stringForKey:@"DefaultLanguage"]!=NULL) + { + [fdefaultlanguage setStringValue:[defaults stringForKey:@"DefaultLanguage"]]; + } + [fdefaultlanguage selectItemWithObjectValue:[defaults stringForKey:@"DefaultLanguage"]]; + + + + + /* fFileExtItunes Check or uncheck according to the preferences */ + [fFileExtItunes setState: [defaults boolForKey:@"DefaultMpegName"] ? + NSOnState : NSOffState]; + + /* fDefCrf Check or uncheck according to the preferences*/ + [fDefCrf setState: [defaults boolForKey:@"DefaultCrf"] ? + NSOnState : NSOffState]; + + /* fDefDeinterlace Check or uncheck according to the preferences*/ + [fDefDeinterlace setState: [defaults boolForKey:@"DefaultDeinterlaceOn"] ? + NSOnState : NSOffState]; +/* fDefPicSizeAutoSetipod Check or uncheck according to the preferences*/ + [fDefPicSizeAutoSetipod setState: [defaults boolForKey:@"DefaultPicSizeAutoiPod"] ? + NSOnState : NSOffState]; + /* fDefPixelRatio */ + [fDefPixelRatio setState: [defaults boolForKey:@"PixelRatio"] ? + NSOnState : NSOffState]; } @@ -207,7 +249,8 @@ { NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; - if( [fUpdateCheck state] == NSOnState ) + /* Check Update CheckForUpdates Set */ + if( [fUpdateCheck state] == NSOnState ) { [defaults setObject:@"YES" forKey:@"CheckForUpdates"]; } @@ -216,8 +259,68 @@ [defaults setObject:@"NO" forKey:@"CheckForUpdates"]; } + /* Preferred Language Combobox Set */ + [defaults setObject:[fdefaultlanguage objectValueOfSelectedItem] forKey:@"DefaultLanguage"]; + + /* File Extension Itunes Set */ + + if( [fFileExtItunes state] == NSOnState ) + { + [defaults setObject:@"YES" forKey:@"DefaultMpegName"]; + } + else + { + [defaults setObject:@"NO" forKey:@"DefaultMpegName"]; + } + + /* Use CRF for constant mode */ + + if( [fDefCrf state] == NSOnState ) + { + [defaults setObject:@"YES" forKey:@"DefaultCrf"]; + } + else + { + [defaults setObject:@"NO" forKey:@"DefaultCrf"]; + } + + /* Use Deinterlace on as a default*/ + + if( [fDefDeinterlace state] == NSOnState ) + { + [defaults setObject:@"YES" forKey:@"DefaultDeinterlaceOn"]; + } + else + { + [defaults setObject:@"NO" forKey:@"DefaultDeinterlaceOn"]; + } + + /* Use Picture size set to 640 upon x264 (iPod) Selection as a default*/ + + if( [fDefPicSizeAutoSetipod state] == NSOnState ) + { + [defaults setObject:@"YES" forKey:@"DefaultPicSizeAutoiPod"]; + } + else + { + [defaults setObject:@"NO" forKey:@"DefaultPicSizeAutoiPod"]; + } + + /* Use Pixel Ratio*/ + + if( [fDefPixelRatio state] == NSOnState ) + { + [defaults setObject:@"YES" forKey:@"PixelRatio"]; + } + else + { + [defaults setObject:@"NO" forKey:@"PixelRatio"]; + } + + + } @end diff --git a/macosx/QueueController.h b/macosx/QueueController.h index 635adc7b8..94feab4fb 100644 --- a/macosx/QueueController.h +++ b/macosx/QueueController.h @@ -2,7 +2,7 @@ #include -#include "hb.h" +#include "mediafork.h" @interface QueueController : NSObject { diff --git a/macosx/ScanController.h b/macosx/ScanController.h index 47a7f6132..63c50b65c 100644 --- a/macosx/ScanController.h +++ b/macosx/ScanController.h @@ -1,4 +1,4 @@ -/* $Id: ScanController.h,v 1.4 2005/03/21 12:37:32 titer Exp $ +/* $Id: ScanController.h,v 1.4 2005/03/21 12:37:32 titer Exp $ This file is part of the HandBrake source code. Homepage: . @@ -6,7 +6,7 @@ #include -#include "hb.h" +#include "mediafork.h" @class DriveDetector; @interface ScanController : NSObject { diff --git a/macosx/ScanController.mm b/macosx/ScanController.mm index b38d2b999..9ce44f8fe 100644 --- a/macosx/ScanController.mm +++ b/macosx/ScanController.mm @@ -1,4 +1,4 @@ -/* $Id: ScanController.mm,v 1.10 2005/04/27 21:05:24 titer Exp $ +/* $Id: ScanController.mm,v 1.10 2005/04/27 21:05:24 titer Exp $ This file is part of the HandBrake source code. Homepage: . @@ -80,8 +80,8 @@ [fFolderField setEnabled: 1]; [fBrowseButton setEnabled: 1]; [fOpenButton setEnabled: 0]; - [fBrowseButton setEnabled: 0]; - //fOpenButton + [fBrowseButton setEnabled: 1]; + [fMatrix selectCell: fFolderCell]; } @@ -163,8 +163,9 @@ } else { - [fMatrix selectCell: fFolderCell]; + [fMatrix selectCell: fFolderCell]; [fDetectedCell setEnabled: NO]; + [fMatrix selectCellAtRow:1 column:0]; } /* Enable controls related to the current choice */ diff --git a/macosx/i18n/Localizable.strings b/macosx/i18n/Localizable.strings index d2415f3023cbb47bf6f68a7dfa3926780b817456..ed2dec69b6d56d7816b39d2dbb0820006f03691f 100644 GIT binary patch delta 52 scmaFm_{woZr=XxOLn=cGLncEagBwFWLlHyvSLkfcvLlKab&5$~ImS8HT=w<<-TYLbIK@H;o diff --git a/macosx/i18n/de.strings b/macosx/i18n/de.strings index c00468936c596bcc6ad28a75c669c8c074db2fff..2066572a0ca920037ab5f11233aab93c5e4d19b9 100644 GIT binary patch delta 51 rcmbQ`Kg)l^c2z-NhE#?WhD?S;1~-O$h9ZXS$tP6RF-142&0+)qce4$D delta 54 vcmbQ`Kg)l^c2z+ShD3%uh7<-Th9V#SLkfcvLlKab&5$}-M@iwb{Gw$ delta 52 qcmdnyu+3pZx}cy3Ln1>SLkfcvLlKab&5$~|LNFCmbn`nw4?X~L#0`J| diff --git a/macosx/i18n/it.strings b/macosx/i18n/it.strings index 115eab928c177c1ceb93f082fd793d880f44bd8e..de3dbf736e8f0d33b76234a90119e9a0cb0346b4 100644 GIT binary patch delta 56 ucmZn&Xb9LKttRNpkjjw4kjaq9;Kq>8P{fcuSw~G3i>LuxwFng9R* diff --git a/macosx/i18n/ja.strings b/macosx/i18n/ja.strings index fc457a7a6dc655add0cf77168826b9a010f45ef6..e5162f58d1f4b0c7709a00d610a406fd3eb0ab25 100644 GIT binary patch delta 71 zcmZ4DvBYD;bR~0NhE#?WhD?S;1~-O$h9ZV+1|3_1+l41x_}CqLkf JoUE?=7XVfH5sv@> diff --git a/macosx/i18n/nl.strings b/macosx/i18n/nl.strings index 71ad84e66bd27ea7120d39e417e77aab3a9b1763..7d5575526b56efb6f224b1122371c9e3dccc6d83 100644 GIT binary patch delta 56 vcmez6_seg?QdL1;hE#?WhD?S;1~-O$h9ZXS$=g&Fv4|${Ms9Xgvt$GS;r #include -#include "hb.h" +#include "mediafork.h" /* Options */ static int debug = HB_DEBUG_NONE; @@ -39,6 +39,7 @@ static int size = 0; static int abitrate = 0; static int mux = 0; static int acodec = 0; +static int pixelratio = 0; static int chapter_start = 0; static int chapter_end = 0; static int crf = 0; @@ -71,7 +72,7 @@ int main( int argc, char ** argv ) h = hb_init( debug, update ); /* Show version */ - fprintf( stderr, "HandBrake %s (%d) - http://handbrake.m0k.org/\n", + fprintf( stderr, "MediaFork %s (%d) - http://mediafork.dynalias.com/\n", hb_get_version( h ), hb_get_build( h ) ); /* Check for update */ @@ -80,12 +81,12 @@ int main( int argc, char ** argv ) if( ( build = hb_check_update( h, &version ) ) > -1 ) { fprintf( stderr, "You are using an old version of " - "HandBrake.\nLatest is %s (build %d).\n", version, + "MediaFork.\nLatest is %s (build %d).\n", version, build ); } else { - fprintf( stderr, "Your version of HandBrake is up to " + fprintf( stderr, "Your version of MediaFork is up to " "date.\n" ); } hb_close( &h ); @@ -173,7 +174,7 @@ int main( int argc, char ** argv ) if( format ) free( format ); if( audios ) free( audios ); - fprintf( stderr, "HandBrake has exited.\n" ); + fprintf( stderr, "MediaFork has exited.\n" ); return 0; } @@ -182,7 +183,7 @@ static void ShowCommands() { fprintf( stderr, "Commands:\n" ); fprintf( stderr, " [h]elp Show this message\n" ); - fprintf( stderr, " [q]uit Exit HBTest\n" ); + fprintf( stderr, " [q]uit Exit MediaForkCLI\n" ); fprintf( stderr, " [p]ause Pause encoding\n" ); fprintf( stderr, " [r]esume Resume encoding\n" ); } @@ -310,6 +311,7 @@ static int HandleEvents( hb_handle_t * h ) job->deinterlace = deinterlace; job->grayscale = grayscale; + job->pixel_ratio = pixelratio; if( width && height ) { @@ -326,7 +328,7 @@ static int HandleEvents( hb_handle_t * h ) job->height = height; hb_fix_aspect( job, HB_KEEP_HEIGHT ); } - else + else if( !pixelratio ) { hb_fix_aspect( job, HB_KEEP_WIDTH ); } @@ -402,7 +404,7 @@ static int HandleEvents( hb_handle_t * h ) fprintf( stderr, "Calculated bitrate: %d kbps\n", job->vbitrate ); } - + if( sub ) { job->subtitle = sub - 1; @@ -506,7 +508,7 @@ static void ShowHelp() int i; fprintf( stderr, - "Syntax: HBTest [options] -i -o \n" + "Syntax: MediaForkCLI [options] -i -o \n" "\n" " -h, --help Print help\n" " -u, --update Check for updates and exit\n" @@ -534,6 +536,7 @@ static void ShowHelp() " -2, --two-pass Use two-pass mode\n" " -d, --deinterlace Deinterlace video\n" " -g, --grayscale Grayscale encoding\n" + " -p, --pixelratio Store pixel aspect ratio in video stream\n" "\n" " -r, --rate Set video framerate (" ); for( i = 0; i < hb_video_rates_count; i++ ) @@ -589,6 +592,7 @@ static int ParseOptions( int argc, char ** argv ) { "two-pass", no_argument, NULL, '2' }, { "deinterlace", no_argument, NULL, 'd' }, { "grayscale", no_argument, NULL, 'g' }, + { "pixelratio", no_argument, NULL, 'p' }, { "width", required_argument, NULL, 'w' }, { "height", required_argument, NULL, 'l' }, { "crop", required_argument, NULL, 'n' }, @@ -608,7 +612,7 @@ static int ParseOptions( int argc, char ** argv ) int c; c = getopt_long( argc, argv, - "hvuC:f:i:o:t:c:a:s:e:E:2dgw:l:n:b:q:S:B:r:R:Q", + "hvuC:f:i:o:t:c:a:s:e:E:2dgpw:l:n:b:q:S:B:r:R:Q", long_options, &option_index ); if( c < 0 ) { @@ -680,6 +684,9 @@ static int ParseOptions( int argc, char ** argv ) case 'g': grayscale = 1; break; + case 'p': + pixelratio = 1; + break; case 'e': if( !strcasecmp( optarg, "ffmpeg" ) ) { -- 2.40.0