Merge master.
authorCarl Hetherington <cth@carlh.net>
Sat, 15 Jun 2013 16:05:58 +0000 (17:05 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 15 Jun 2013 16:05:58 +0000 (17:05 +0100)
32 files changed:
ChangeLog
cscript
icons/make_icns.sh
platform/linux/dvdomatic.desktop.in [deleted file]
platform/linux/dvdomatic_batch.desktop.in [deleted file]
platform/linux/servomatic.desktop.in [deleted file]
platform/linux/wscript
platform/osx/Info.plist.in
platform/osx/make_dmg.sh
platform/windows/installer.nsi.32.in
platform/windows/installer.nsi.64.in
run/dvdomatic-osx [deleted file]
run/dvdomatic_batch [deleted file]
src/lib/ab_transcode_job.cc
src/lib/cross.cc
src/lib/cross.h
src/lib/film.cc
src/lib/image.cc
src/lib/imagemagick_content.h
src/lib/player.cc
src/lib/util.cc
src/lib/util.h
src/tools/dcpomatic.cc
src/tools/dcpomatic_batch.cc
src/tools/po/es_ES.po
src/wx/about_dialog.cc [new file with mode: 0644]
src/wx/about_dialog.h [new file with mode: 0644]
src/wx/po/es_ES.po
src/wx/wscript
test/make_black_test.cc
test/test.cc
wscript

index 0806da9631515d29ab6cc771f2407cebc933c53d..f412c2e90028fce8b43ed84847500c42e741bb47 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2013-06-13  Carl Hetherington  <cth@carlh.net>
+
+       * Fix ffmpeg's pixel format 13.
+
+2013-06-13  Carl Hetherington  <cth@carlh.net>
+
+       * Version 0.99 released.
+
+2013-06-09  Carl Hetherington  <cth@carlh.net>
+
+       * Version 0.98 released.
+
+2013-06-07  Carl Hetherington  <cth@carlh.net>
+
+       * Version 0.97 released.
+
+2013-06-07  Carl Hetherington  <cth@carlh.net>
+
+       * Version 0.96 released.
+
 2013-06-05  Carl Hetherington  <cth@carlh.net>
 
        * Version 0.95 released.
diff --git a/cscript b/cscript
index 97e8dbd9239583517ead27d8e1806dbaf10e50c7..c51f3a033fb3aa22e54cc998e52e85da62858291 100644 (file)
--- a/cscript
+++ b/cscript
@@ -15,7 +15,7 @@ def build(env, target):
     cmd = './waf configure --prefix=%s' % env.work_dir_cscript()
     if target.platform == 'windows':
         cmd += ' --target-windows'
-    else:
+    elif target.platform == 'linux':
         cmd += ' --static'
     env.command(cmd)
 
index 983379ea40f54916a232cd5bb7e14fc296da065f..522e907a6731c50eea691115cbf3a42b5092220d 100755 (executable)
@@ -1,4 +1,4 @@
 #!/bin/bash
 
-iconutil --convert icns --output dvdomatic.icns dvdomatic.iconset/
+iconutil --convert icns --output dcpomatic.icns dcpomatic.iconset/
 
diff --git a/platform/linux/dvdomatic.desktop.in b/platform/linux/dvdomatic.desktop.in
deleted file mode 100644 (file)
index 65067eb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Version=1.0
-Type=Application
-Terminal=false
-Exec=@PREFIX@/bin/dvdomatic
-Name=DVD-o-matic
-Icon=dvdomatic
-Comment=DCP generator
-Categories=AudioVideo;Video
diff --git a/platform/linux/dvdomatic_batch.desktop.in b/platform/linux/dvdomatic_batch.desktop.in
deleted file mode 100644 (file)
index 8150fe8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Version=1.0
-Type=Application
-Terminal=false
-Exec=@PREFIX@/bin/dvdomatic_batch
-Name=DVD-o-matic Batch Converter
-Icon=dvdomatic
-Comment=Batch DCP generator
-Categories=AudioVideo;Video
diff --git a/platform/linux/servomatic.desktop.in b/platform/linux/servomatic.desktop.in
deleted file mode 100644 (file)
index 572b4c6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Version=1.0
-Type=Application
-Terminal=false
-Exec=@PREFIX@/bin/servomatic_gui
-Name=DVD-o-matic Encode Server
-Icon=dvdomatic
-Comment=DCP generator
-Categories=AudioVideo;Video
index 1d9054b326c3d7e4b120f889030a5b5ee0b954dd..53a6efeac7ca687765c9504e57c8069449b50eac 100644 (file)
@@ -2,18 +2,18 @@ def build(bld):
     d = { 'PREFIX' : '${PREFIX' }
 
     obj = bld(features = 'subst')
-    obj.source = 'dvdomatic.desktop.in'
-    obj.target = 'dvdomatic.desktop'
+    obj.source = 'dcpomatic.desktop.in'
+    obj.target = 'dcpomatic.desktop'
     obj.dict = d
 
     obj = bld(features = 'subst')
-    obj.source = 'dvdomatic_batch.desktop.in'
-    obj.target = 'dvdomatic_batch.desktop'
+    obj.source = 'dcpomatic_batch.desktop.in'
+    obj.target = 'dcpomatic_batch.desktop'
     obj.dict = d
 
     obj = bld(features = 'subst')
-    obj.source = 'servomatic.desktop.in'
-    obj.target = 'servomatic.desktop'
+    obj.source = 'dcpomatic_server.desktop.in'
+    obj.target = 'dcpomatic_server.desktop'
     obj.dict = d
 
-    bld.install_files('${PREFIX}/share/applications', ['dvdomatic.desktop', 'dvdomatic_batch.desktop', 'servomatic.desktop'])
+    bld.install_files('${PREFIX}/share/applications', ['dcpomatic.desktop', 'dcpomatic_batch.desktop', 'dcpomatic_server.desktop'])
index c904d91ddafa05675fd58b37e5574a90044f24d9..0f67741386f5cf18aa587f7f65ff53ea31da3c16 100644 (file)
@@ -5,17 +5,17 @@
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleExecutable</key>
-       <string>dvdomatic</string>
+       <string>dcpomatic</string>
        <key>CFBundleGetInfoString</key>
        <string>DCP generator</string>
        <key>CFBundleIconFile</key>
-       <string>DVD-o-matic.icns</string>
+       <string>DCP-o-matic.icns</string>
        <key>CFBundleIdentifier</key>
-       <string>net.carlh.dvdomatic</string>
+       <string>net.carlh.dcpomatic</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
-       <string>DVD-o-matic</string>
+       <string>DCP-o-matic</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersions</key>
index d9e36c390d34e7e553521210f4b441fe0794cee7..1fcdc6d0629782eccce9aa8c7176d95ca7b30fb5 100644 (file)
@@ -19,9 +19,9 @@ mkdir -p $WORK/$macos
 mkdir -p $WORK/$libs
 mkdir -p $WORK/$resources
 
-cp build/src/tools/dvdomatic $WORK/$macos/
-cp build/src/lib/libdvdomatic.dylib $WORK/$libs/
-cp build/src/wx/libdvdomatic-wx.dylib $WORK/$libs/
+cp build/src/tools/dcpomatic $WORK/$macos/
+cp build/src/lib/libdcpomatic.dylib $WORK/$libs/
+cp build/src/wx/libdcpomatic-wx.dylib $WORK/$libs/
 cp $DEPS/lib/libdcp.dylib $WORK/$libs/
 cp $DEPS/lib/libasdcp-libdcp.dylib $WORK/$libs/
 cp $DEPS/lib/libkumu-libdcp.dylib $WORK/$libs/
@@ -58,7 +58,7 @@ cp $ENV/lib/libfontconfig*.dylib $WORK/$libs/
 cp $ENV/lib/libfreetype*.dylib $WORK/$libs/
 cp $ENV/lib/libexpat*.dylib $WORK/$libs/
 
-for obj in $WORK/$macos/dvdomatic $WORK/$libs/*.dylib; do
+for obj in $WORK/$macos/dcpomatic $WORK/$libs/*.dylib; do
   deps=`otool -L $obj | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh)"`
   changes=""
   for dep in $deps; do
@@ -70,13 +70,13 @@ for obj in $WORK/$macos/dvdomatic $WORK/$libs/*.dylib; do
   fi  
 done
 
-
+pwd
 cp build/platform/osx/Info.plist $WORK/$approot
-cp icons/dvdomatic.icns $WORK/$resources/DVD-o-matic.icns
+cp icons/dcpomatic.icns $WORK/$resources/DVD-o-matic.icns
 
-tmp_dmg=$WORK/dvdomatic_tmp.dmg
-dmg="$WORK/DVD-o-matic $version.dmg"
-vol_name=DVD-o-matic-$version
+tmp_dmg=$WORK/dcpomatic_tmp.dmg
+dmg="$WORK/DCP-o-matic $version.dmg"
+vol_name=DCP-o-matic-$version
 
 mkdir -p $WORK/$vol_name
 
@@ -95,13 +95,13 @@ echo '
            set current view of container window to icon view
            set toolbar visible of container window to false
            set statusbar visible of container window to false
-           set the bounds of container window to {400, 200, 800, 440}
+           set the bounds of container window to {400, 200, 790, 410}
            set theViewOptions to the icon view options of container window
            set arrangement of theViewOptions to not arranged
            set icon size of theViewOptions to 64
            make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
-           set position of item "DVD-o-matic.app" of container window to {90, 100}
-           set position of item "Applications" of container window to {310, 100}
+           set position of item "DCP-o-matic.app" of container window to {90, 80}
+           set position of item "Applications" of container window to {310, 80}
            close
            open
            update without registering applications
@@ -117,8 +117,8 @@ sync
 umount $device
 hdiutil eject $device
 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
-sips -i $WORK/$resources/DVD-o-matic.icns
-DeRez -only icns $WORK/$resources/DVD-o-matic.icns > $WORK/$resources/DVD-o-matic.rsrc
-Rez -append $WORK/$resources/DVD-o-matic.rsrc -o "$dmg"
+sips -i $WORK/$resources/DCP-o-matic.icns
+DeRez -only icns $WORK/$resources/DCP-o-matic.icns > $WORK/$resources/DCP-o-matic.rsrc
+Rez -append $WORK/$resources/DCP-o-matic.rsrc -o "$dmg"
 SetFile -a C "$dmg"
 
index 6649047672fafe3198f94d8dbf71c8f8a313fa8f..3a2cdb9e824800600683fe441db37085a7cdbe40 100644 (file)
@@ -85,6 +85,7 @@ File "%binaries%/src/wx/dcpomatic-wx.dll"
 File "%binaries%/src/lib/dcpomatic.dll"
 File "%binaries%/src/tools/dcpomatic.exe"
 File "%binaries%/src/tools/dcpomatic_batch.exe"
+File "%binaries%/src/tools/dcpomatic_cli.exe"
 File "%binaries%/src/tools/dcpomatic_server_cli.exe"
 File "%binaries%/src/tools/dcpomatic_server.exe"
 
@@ -134,6 +135,7 @@ Section "Uninstall"
  
 RMDir /r "$INSTDIR\*.*"    
 RMDir "$INSTDIR"
+<<<<<<< HEAD
 Delete "$DESKTOP\DCP-o-matic.lnk"
 Delete "$DESKTOP\DCP-o-matic batch converter.lnk"
 Delete "$DESKTOP\DCP-o-matic encode server.lnk"
@@ -141,5 +143,14 @@ Delete "$SMPROGRAMS\DCP-o-matic\*.*"
 RmDir  "$SMPROGRAMS\DCP-o-matic"
 DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\DCP-o-matic"
 DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DCP-o-matic"
+=======
+Delete "$DESKTOP\DVD-o-matic.lnk"
+Delete "$DESKTOP\DVD-o-matic batch converter.lnk"
+Delete "$DESKTOP\DVD-o-matic encode server.lnk"
+Delete "$SMPROGRAMS\DVD-o-matic\*.*"
+RmDir  "$SMPROGRAMS\DVD-o-matic"
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\DVD-o-matic"
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DVD-o-matic"
+>>>>>>> master
  
 SectionEnd
index fd1237727ae2bc7fff9628649c605a918b849e2d..f4f1e90684b546e121285b489137f019b02fd5a4 100644 (file)
@@ -95,6 +95,7 @@ File "%binaries%/src/wx/dcpomatic-wx.dll"
 File "%binaries%/src/lib/dcpomatic.dll"
 File "%binaries%/src/tools/dcpomatic.exe"
 File "%binaries%/src/tools/dcpomatic_batch.exe"
+File "%binaries%/src/tools/dcpomatic_cli.exe"
 File "%binaries%/src/tools/dcpomatic_server_cli.exe"
 File "%binaries%/src/tools/dcpomatic_server.exe"
 
diff --git a/run/dvdomatic-osx b/run/dvdomatic-osx
deleted file mode 100755 (executable)
index ac42c31..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:build/src/lib:build/src:/Users/carl/Environments/osx/10.8/lib
-if [ "$1" == "--debug" ]; then
-    shift
-    gdb --args build/src/tools/dvdomatic "$*"
-elif [ "$1" == "--valgrind" ]; then
-    shift
-    valgrind --tool="memcheck" build/src/tools/dvdomatic $*
-elif [ "$1" == "--i18n" ]; then
-    shift
-    LANGUAGE=fr_FR.UTF8 LANG=fr_FR.UTF8 build/src/tools/dvdomatic "$*"
-else
-    build/src/tools/dvdomatic "$*"
-fi
diff --git a/run/dvdomatic_batch b/run/dvdomatic_batch
deleted file mode 100755 (executable)
index 7b6ef93..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-export LD_LIBRARY_PATH=build/src/lib:build/src/wx:build/src/asdcplib/src:$LD_LIBRARY_PATH
-if [ "$1" == "--debug" ]; then
-    shift
-    gdb --args build/src/tools/dvdomatic_batch "$*"
-elif [ "$1" == "--valgrind" ]; then
-    shift
-    valgrind --tool="memcheck" build/src/tools/dvdomatic_batch $*
-elif [ "$1" == "--i18n" ]; then
-    shift
-    LANGUAGE=fr_FR.UTF8 LANG=fr_FR.UTF8 build/src/tools/dvdomatic_batch "$*"
-else
-    build/src/tools/dvdomatic_batch
-fi
index bdde8a40576459d06328a8c5ca0a0563b787e3dc..a29e7877666fc3c18ac82812f9f7247120dda0c0 100644 (file)
@@ -22,6 +22,7 @@
 #include "film.h"
 #include "ab_transcoder.h"
 #include "config.h"
+#include "log.h"
 
 #include "i18n.h"
 
index f232f1779dabc432445c5f1a6d44240f43c611bd..ffd44eb02810cd0107145e8a3e5eaeedb917509f 100644 (file)
@@ -17,6 +17,8 @@
 
 */
 
+#include <fstream>
+#include <boost/algorithm/string.hpp>
 #include "cross.h"
 #ifdef DCPOMATIC_POSIX
 #include <unistd.h>
 #ifdef DCPOMATIC_WINDOWS
 #include "windows.h"
 #endif
+#ifdef DCPOMATIC_OSX
+#include <sys/sysctl.h>
+#endif
+
+using std::pair;
+using std::ifstream;
+using std::string;
 
 void
 dcpomatic_sleep (int s)
@@ -35,3 +44,40 @@ dcpomatic_sleep (int s)
        Sleep (s * 1000);
 #endif
 }
+
+/** @return A pair containing CPU model name and the number of processors */
+pair<string, int>
+cpu_info ()
+{
+       pair<string, int> info;
+       info.second = 0;
+       
+#ifdef DCPOMATIC_LINUX
+       ifstream f ("/proc/cpuinfo");
+       while (f.good ()) {
+               string l;
+               getline (f, l);
+               if (boost::algorithm::starts_with (l, "model name")) {
+                       string::size_type const c = l.find (':');
+                       if (c != string::npos) {
+                               info.first = l.substr (c + 2);
+                       }
+               } else if (boost::algorithm::starts_with (l, "processor")) {
+                       ++info.second;
+               }
+       }
+#endif
+
+#ifdef DCPOMATIC_OSX
+       size_t N = sizeof (info.second);
+       sysctlbyname ("hw.ncpu", &info.second, &N, 0, 0);
+       char buffer[64];
+       N = sizeof (buffer);
+       if (sysctlbyname ("machdep.cpu.brand_string", buffer, &N, 0, 0) == 0) {
+               info.first = buffer;
+        }
+#endif         
+
+       return info;
+}
+
index 00457c9681800a6950596b6cf7044418018eb587..d185286b1f381d02395ba36261313eaac3c10432 100644 (file)
@@ -22,3 +22,4 @@
 #endif
 
 void dcpomatic_sleep (int);
+extern std::pair<std::string, int> cpu_info ();
index ef29d35fdde57806a2d0ef8f0a5f9a3def734789..75ec700e0092e5bb35487f43556e4c93b1600b4e 100644 (file)
@@ -54,6 +54,7 @@
 #include "sndfile_content.h"
 #include "dcp_content_type.h"
 #include "ratio.h"
+#include "cross.h"
 
 #include "i18n.h"
 
index bba7d6be5d0762efba32338ba8e158209e4ed17b..17c969cf2d280fe04e067526066063adb8e59e86 100644 (file)
@@ -248,11 +248,11 @@ void
 Image::make_black ()
 {
        /* U/V black value for 8-bit colour */
-       static uint8_t const eight_bit_uv = (1 << 7) - 1;
+       static uint8_t const eight_bit_uv =     (1 << 7) - 1;
        /* U/V black value for 9-bit colour */
-       static uint16_t const nine_bit_uv = (1 << 8) - 1;
+       static uint16_t const nine_bit_uv =     (1 << 8) - 1;
        /* U/V black value for 10-bit colour */
-       static uint16_t const ten_bit_uv =  (1 << 9) - 1;
+       static uint16_t const ten_bit_uv =      (1 << 9) - 1;
        /* U/V black value for 16-bit colour */
        static uint16_t const sixteen_bit_uv =  (1 << 15) - 1;
        
@@ -265,6 +265,14 @@ Image::make_black ()
                memset (data()[2], eight_bit_uv, lines(2) * stride()[2]);
                break;
 
+       case PIX_FMT_YUVJ420P:
+       case PIX_FMT_YUVJ422P:
+       case PIX_FMT_YUVJ444P:
+               memset (data()[0], 0, lines(0) * stride()[0]);
+               memset (data()[1], eight_bit_uv + 1, lines(1) * stride()[1]);
+               memset (data()[2], eight_bit_uv + 1, lines(2) * stride()[2]);
+               break;
+
        case PIX_FMT_YUV422P9LE:
        case PIX_FMT_YUV444P9LE:
                yuv_16_black (nine_bit_uv);
index 8ed6b08734ad31d34e4c8b75e368510b20d77c07..d7673d870730ec3dd411e3b875a386f454652c6f 100644 (file)
@@ -17,8 +17,8 @@
 
 */
 
-#ifndef DVDOMATIC_IMAGEMAGICK_CONTENT_H
-#define DVDOMATIC_IMAGEMAGICK_CONTENT_H
+#ifndef DCPOMATIC_IMAGEMAGICK_CONTENT_H
+#define DCPOMATIC_IMAGEMAGICK_CONTENT_H
 
 #include <boost/enable_shared_from_this.hpp>
 #include "video_content.h"
index 757f9bbcecfe8f6df35fdc421783f2af0bdabacd..85b4cbd4f77a1c016605bee7274545c7a9d520af 100644 (file)
@@ -17,6 +17,7 @@
 
 */
 
+#include <stdint.h>
 #include "player.h"
 #include "film.h"
 #include "ffmpeg_decoder.h"
index 71a21105b6ec2f6e9eb38096fbbf0ce36bb2dcba..eda0d0236767300f349c146660d29a1f24a24595 100644 (file)
@@ -61,7 +61,7 @@ extern "C" {
 #include "sound_processor.h"
 #include "config.h"
 #include "ratio.h"
-#ifdef DVDOMATIC_WINDOWS
+#ifdef DCPOMATIC_WINDOWS
 #include "stack.hpp"
 #endif
 
@@ -260,7 +260,7 @@ seconds (struct timeval t)
        return t.tv_sec + (double (t.tv_usec) / 1e6);
 }
 
-#ifdef DVDOMATIC_WINDOWS
+#ifdef DCPOMATIC_WINDOWS
 LONG WINAPI exception_handler(struct _EXCEPTION_POINTERS *)
 {
        dbg::stack s;
@@ -276,7 +276,7 @@ LONG WINAPI exception_handler(struct _EXCEPTION_POINTERS *)
 void
 dcpomatic_setup ()
 {
-#ifdef DVDOMATIC_WINDOWS
+#ifdef DCPOMATIC_WINDOWS
        backtrace_file /= g_get_user_config_dir ();
        backtrace_file /= "backtrace.txt";
        SetUnhandledExceptionFilter(exception_handler);
@@ -715,32 +715,6 @@ video_frames_to_audio_frames (ContentVideoFrame v, float audio_sample_rate, floa
        return ((int64_t) v * audio_sample_rate / frames_per_second);
 }
 
-/** @return A pair containing CPU model name and the number of processors */
-pair<string, int>
-cpu_info ()
-{
-       pair<string, int> info;
-       info.second = 0;
-       
-#ifdef DCPOMATIC_POSIX
-       ifstream f (N_("/proc/cpuinfo"));
-       while (f.good ()) {
-               string l;
-               getline (f, l);
-               if (boost::algorithm::starts_with (l, N_("model name"))) {
-                       string::size_type const c = l.find (':');
-                       if (c != string::npos) {
-                               info.first = l.substr (c + 2);
-                       }
-               } else if (boost::algorithm::starts_with (l, N_("processor"))) {
-                       ++info.second;
-               }
-       }
-#endif 
-
-       return info;
-}
-
 string
 audio_channel_name (int c)
 {
index be70eb25997ca23b6473483bdc1e9df2c37a9e8f..42514a12c92f9f863944ab0018d16b5b8e573533 100644 (file)
@@ -153,7 +153,6 @@ private:
 };
 
 extern int64_t video_frames_to_audio_frames (ContentVideoFrame v, float audio_sample_rate, float frames_per_second);
-extern std::pair<std::string, int> cpu_info ();
 
 class LocaleGuard
 {
index ebd647861817ea98cacdf3289ae189e378796aaf..77800b5fdfcfe9d8101c252fa007f012b059cb56 100644 (file)
@@ -26,7 +26,7 @@
 #ifdef __WXOSX__
 #include <ApplicationServices/ApplicationServices.h>
 #endif
-#include <wx/aboutdlg.h>
+#include <wx/generic/aboutdlgg.h>
 #include <wx/stdpaths.h>
 #include <wx/cmdline.h>
 #include "wx/film_viewer.h"
@@ -38,6 +38,7 @@
 #include "wx/new_film_dialog.h"
 #include "wx/properties_dialog.h"
 #include "wx/wx_ui_signaller.h"
+#include "wx/about_dialog.h"
 #include "lib/film.h"
 #include "lib/config.h"
 #include "lib/util.h"
@@ -182,7 +183,7 @@ setup_menu (wxMenuBar* m)
 
        wxMenu* help = new wxMenu;
 #ifdef __WXOSX__       
-       add_item (help, _("About DVD-o-matic"), wxID_ABOUT, ALWAYS);
+       add_item (help, _("About DCP-o-matic"), wxID_ABOUT, ALWAYS);
 #else  
        add_item (help, _("About"), wxID_ABOUT, ALWAYS);
 #endif 
@@ -405,34 +406,9 @@ private:
        
        void help_about (wxCommandEvent &)
        {
-               wxAboutDialogInfo info;
-               info.SetName (_("DCP-o-matic"));
-               if (strcmp (dcpomatic_git_commit, "release") == 0) {
-                       info.SetVersion (std_to_wx (String::compose ("version %1", dcpomatic_version)));
-               } else {
-                       info.SetVersion (std_to_wx (String::compose ("version %1 git %2", dcpomatic_version, dcpomatic_git_commit)));
-               }
-               info.SetDescription (_("Free, open-source DCP generation from almost anything."));
-               info.SetCopyright (_("(C) 2012-2013 Carl Hetherington, Terrence Meiczinger, Paul Davis, Ole Laursen"));
-
-               wxArrayString authors;
-               authors.Add (wxT ("Carl Hetherington"));
-               authors.Add (wxT ("Terrence Meiczinger"));
-               authors.Add (wxT ("Paul Davis"));
-               authors.Add (wxT ("Ole Laursen"));
-               info.SetDevelopers (authors);
-
-               wxArrayString translators;
-               translators.Add (wxT ("Olivier Perriere"));
-               translators.Add (wxT ("Lilian Lefranc"));
-               translators.Add (wxT ("Thierry Journet"));
-               translators.Add (wxT ("Massimiliano Broggi"));
-               translators.Add (wxT ("Manuel AC"));
-               translators.Add (wxT ("Adam Klotblixt"));
-               info.SetTranslators (translators);
-               
-               info.SetWebSite (wxT ("http://carlh.net/software/dcpomatic"));
-               wxAboutBox (info);
+               AboutDialog* d = new AboutDialog (this);
+               d->ShowModal ();
+               d->Destroy ();
        }
 };
 
@@ -460,7 +436,7 @@ class App : public wxApp
                        return false;
                }
                
-#ifdef DCPOMATIC_POSIX         
+#ifdef DCPOMATIC_LINUX 
                unsetenv ("UBUNTU_MENUPROXY");
 #endif
 
index 403c1c21b7273556a805c6eb4950249fd0fec1f9..b4ab054fda92c9c01b287cac72ad115bdebed65a 100644 (file)
@@ -198,7 +198,7 @@ class App : public wxApp
                        return false;
                }
                
-#ifdef DCPOMATIC_POSIX         
+#ifdef DCPOMATIC_LINUX         
                unsetenv ("UBUNTU_MENUPROXY");
 #endif         
 
index 01d7c1ad29a574931252c2b71a299a5c208fda77..43c9b12f116d9aff5b968a58fefb32c09a4dc7fc 100644 (file)
@@ -99,12 +99,6 @@ msgstr "DCP-o-matic"
 msgid "Film changed"
 msgstr "PelĂ­cula cambiada"
 
-#: src/tools/dcpomatic.cc:416
-#: src/tools/dvdomatic.cc:288 src/tools/dvdomatic.cc:419
-#: src/tools/dvdomatic.cc:506
-msgid "DCP-o-matic"
-msgstr "DCP-o-matic"
-
 #: src/tools/dvdomatic.cc:425
 msgid "Free, open-source DCP generation from almost anything."
 msgstr ""
diff --git a/src/wx/about_dialog.cc b/src/wx/about_dialog.cc
new file mode 100644 (file)
index 0000000..7844180
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <wx/notebook.h>
+#include <wx/hyperlink.h>
+#include "lib/version.h"
+#include "lib/compose.hpp"
+#include "about_dialog.h"
+#include "wx_util.h"
+
+using std::vector;
+
+AboutDialog::AboutDialog (wxWindow* parent)
+       : wxDialog (parent, wxID_ANY, _("About DCP-o-matic"))
+{
+       wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL);
+       
+       wxFont title_font (*wxNORMAL_FONT);
+       title_font.SetPointSize (title_font.GetPointSize() + 4);
+       title_font.SetWeight (wxFONTWEIGHT_BOLD);
+
+       wxFont version_font (*wxNORMAL_FONT);
+       version_font.SetWeight (wxFONTWEIGHT_BOLD);
+       
+       wxStaticText* t = new wxStaticText (this, wxID_ANY, _("DCP-o-matic"));
+       t->SetFont (title_font);
+       sizer->Add (t, wxSizerFlags().Centre().Border());
+
+       wxString s;
+       if (strcmp (dcpomatic_git_commit, "release") == 0) {
+               t = new wxStaticText (this, wxID_ANY, std_to_wx (String::compose ("Version %1", dcpomatic_version)));
+       } else {
+               t = new wxStaticText (this, wxID_ANY, std_to_wx (String::compose ("Version %1 git %2", dcpomatic_version, dcpomatic_git_commit)));
+       }
+       t->SetFont (version_font);
+       sizer->Add (t, wxSizerFlags().Centre().Border());
+       sizer->AddSpacer (12);
+
+       t = new wxStaticText (
+               this, wxID_ANY,
+               _("Free, open-source DCP generation from almost anything."),
+               wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER
+               );
+       
+       sizer->Add (t, wxSizerFlags().Centre().Border());
+
+       wxHyperlinkCtrl* h = new wxHyperlinkCtrl (
+               this, wxID_ANY,
+               wxT ("www.carlh.net/software/dcpomatic"),
+               wxT ("http://www.carlh.net/software/dcpomatic")
+               );
+
+       sizer->Add (h, wxSizerFlags().Centre().Border());
+
+       t = new wxStaticText (
+               this, wxID_ANY,
+               _("(C) 2012-2013 Carl Hetherington, Terrence Meiczinger, Paul Davis, Ole Laursen"),
+               wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER
+               );
+       
+       sizer->Add (t, wxSizerFlags().Centre().Border());
+
+       _notebook = new wxNotebook (this, wxID_ANY);
+
+       wxArrayString written_by;
+       written_by.Add (wxT ("Carl Hetherington"));
+       written_by.Add (wxT ("Terrence Meiczinger"));
+       written_by.Add (wxT ("Paul Davis"));
+       written_by.Add (wxT ("Ole Laursen"));
+       add_section (_("Written by"), written_by);
+
+       wxArrayString translated_by;
+       translated_by.Add (wxT ("Olivier Perriere"));
+       translated_by.Add (wxT ("Lilian Lefranc"));
+       translated_by.Add (wxT ("Thierry Journet"));
+       translated_by.Add (wxT ("Massimiliano Broggi"));
+       translated_by.Add (wxT ("Manuel AC"));
+       translated_by.Add (wxT ("Adam Klotblixt"));
+       add_section (_("Translated by"), translated_by);
+
+       wxArrayString supported_by;
+       supported_by.Add (wxT ("Carsten Kurz"));
+       supported_by.Add (wxT ("Wolfgang Woehl"));
+       supported_by.Add (wxT ("Manual AC"));
+       supported_by.Add (wxT ("Theo Lipfert"));
+       supported_by.Add (wxT ("Olivier Lemaire"));
+       supported_by.Add (wxT ("Andrä Steiner"));
+       supported_by.Add (wxT ("Jonathan Jensen"));
+       supported_by.Add (wxT ("Kjarten Michaelsen"));
+       supported_by.Add (wxT ("Jussi Siponen"));
+       supported_by.Add (wxT ("Cinema Clarici"));
+       supported_by.Add (wxT ("Evan Freeze"));
+       supported_by.Add (wxT ("Flor Guillaume"));
+       supported_by.Add (wxT ("Adam Klotblixt "));
+       supported_by.Add (wxT ("Lilian Lefranc"));
+       supported_by.Add (wxT ("Gavin Lewarne"));
+       supported_by.Add (wxT ("Lasse Salling"));
+       supported_by.Add (wxT ("Andres Fink"));
+       supported_by.Add (wxT ("Kieran Carroll"));
+       add_section (_("Supported by"), supported_by);
+
+       sizer->Add (_notebook, wxSizerFlags().Centre().Border().Expand());
+       
+       SetSizerAndFit (sizer);
+}
+
+void
+AboutDialog::add_section (wxString name, wxArrayString credits)
+{
+       static bool first = true;
+       int const N = 3;
+
+       wxPanel* panel = new wxPanel (_notebook, wxID_ANY);
+       wxSizer* overall_sizer = new wxBoxSizer (wxHORIZONTAL);
+
+       vector<wxSizer*> sizers;
+       
+       for (int i = 0; i < N; ++i) {
+               sizers.push_back (new wxBoxSizer (wxVERTICAL));
+               overall_sizer->Add (sizers.back (), 1, wxEXPAND | wxALL, 6);
+       }
+
+       int c = 0;
+       for (size_t i = 0; i < credits.Count(); ++i) {
+               add_label_to_sizer (sizers[c], panel, credits[i]);
+               ++c;
+               if (c == N) {
+                       c = 0;
+               }
+       }
+
+       panel->SetSizerAndFit (overall_sizer);
+       _notebook->AddPage (panel, name, first);
+       first = false;
+}
diff --git a/src/wx/about_dialog.h b/src/wx/about_dialog.h
new file mode 100644 (file)
index 0000000..a78abb9
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <wx/wx.h>
+
+class wxNotebook;
+
+class AboutDialog : public wxDialog
+{
+public:
+       AboutDialog (wxWindow *);
+
+private:
+       void add_section (wxString, wxArrayString);
+
+       wxNotebook* _notebook;
+};
+
index 3ff32280d7c3b4afb606ab7d04c8be082efb571d..34646c2b7ea99f70af6d49e36009d8bcd3d9db5d 100644 (file)
@@ -21,8 +21,6 @@ msgstr ""
 msgid "%"
 msgstr "%"
 
-msgid "(restart DCP-o-matic to see language changes)"
-
 #: src/wx/film_editor.cc:1276
 msgid "1 channel"
 msgstr "1 canal"
index d915f5899a5065ff8e66cff0ff040fabe11b606e..992f31175eb0e27cfb36ed1209f7c411d53567a8 100644 (file)
@@ -4,6 +4,7 @@ from waflib import Logs
 import i18n
 
 sources = """
+          about_dialog.cc
           audio_dialog.cc
           audio_mapping_view.cc
           audio_plot.cc
index c708709150405abd62027b63b2919c48f5037a77..9bec006516d67c6d6ede9174d787e2da53de4cce 100644 (file)
@@ -35,6 +35,9 @@ BOOST_AUTO_TEST_CASE (make_black_test)
        pix_fmts.push_back (AV_PIX_FMT_YUV444P10LE);
        pix_fmts.push_back (AV_PIX_FMT_YUV444P10BE);
        pix_fmts.push_back (AV_PIX_FMT_UYVY422);
+       pix_fmts.push_back (AV_PIX_FMT_YUVJ420P);
+       pix_fmts.push_back (AV_PIX_FMT_YUVJ422P);
+       pix_fmts.push_back (AV_PIX_FMT_YUVJ444P);
 
        int N = 0;
        for (list<AVPixelFormat>::const_iterator i = pix_fmts.begin(); i != pix_fmts.end(); ++i) {
@@ -46,6 +49,9 @@ BOOST_AUTO_TEST_CASE (make_black_test)
                for (int y = 0; y < bar->size().height; ++y) {
                        uint8_t* q = p;
                        for (int x = 0; x < bar->line_size()[0]; ++x) {
+                               if (*q != 0) {
+                                       std::cerr << "x=" << x << ", (x%3)=" << (x%3) << "\n";
+                               }
                                BOOST_CHECK_EQUAL (*q++, 0);
                        }
                        p += bar->stride()[0];
index 89cfa56dfafc39e79df4ef744f3a54a5dfef2fd3..b33c06be4443830691cc80234de91d225c6483d0 100644 (file)
@@ -164,3 +164,4 @@ check_dcp (string ref, string check)
 #include "job_test.cc"
 #include "client_server_test.cc"
 #include "image_test.cc"
+
diff --git a/wscript b/wscript
index 21599e171fe689b1d1d71d040f360f6ca124edfc..b1d7eafe2a155fa134fe2298db66060f52ba412c 100644 (file)
--- a/wscript
+++ b/wscript
@@ -15,17 +15,23 @@ def options(opt):
     opt.add_option('--static', action='store_true', default=False, help='build statically, and link statically to libdcp and FFmpeg')
     opt.add_option('--magickpp-config', action='store', default='Magick++-config', help='path to Magick++-config')
     opt.add_option('--wx-config', action='store', default='wx-config', help='path to wx-config')
-    opt.add_option('--osx', action='store_true', default=False, help='build on OS X')
 
 def configure(conf):
     conf.load('compiler_cxx')
     if conf.options.target_windows:
         conf.load('winres')
 
+    conf.env.TARGET_WINDOWS = conf.options.target_windows
+    conf.env.DISABLE_GUI = conf.options.disable_gui
+    conf.env.STATIC = conf.options.static
+    conf.env.VERSION = VERSION
+    conf.env.TARGET_OSX = sys.platform == 'darwin'
+    conf.env.TARGET_LINUX = not conf.env.TARGET_WINDOWS and not conf.env.TARGET_OSX
+
     conf.env.append_value('CXXFLAGS', ['-D__STDC_CONSTANT_MACROS', '-D__STDC_LIMIT_MACROS', '-msse', '-mfpmath=sse', '-ffast-math', '-fno-strict-aliasing',
                                        '-Wall', '-Wno-attributes', '-Wextra'])
 
-    if conf.options.target_windows:
+    if conf.env.TARGET_WINDOWS:
         conf.env.append_value('CXXFLAGS', ['-DDCPOMATIC_WINDOWS', '-DWIN32_LEAN_AND_MEAN', '-DBOOST_USE_WINDOWS_H', '-DUNICODE'])
         wxrc = os.popen('wx-config --rescomp').read().split()[1:]
         conf.env.append_value('WINRCFLAGS', wxrc)
@@ -45,15 +51,14 @@ def configure(conf):
         boost_lib_suffix = ''
         boost_thread = 'boost_thread'
         conf.env.append_value('LINKFLAGS', '-pthread')
-        # libxml2 seems to be linked against this on Ubuntu, but it doesn't mention it in its .pc file
+
+    if conf.env.TARGET_LINUX:
+        # libxml2 seems to be linked against this on Ubuntu but it doesn't mention it in its .pc file
         conf.env.append_value('LIB', 'lzma')
+        conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_LINUX')
 
-    conf.env.TARGET_WINDOWS = conf.options.target_windows
-    conf.env.DISABLE_GUI = conf.options.disable_gui
-    conf.env.STATIC = conf.options.static
-    conf.env.VERSION = VERSION
-    conf.env.TARGET_OSX = conf.options.osx
-    conf.env.TARGET_LINUX = not conf.options.target_windows and not conf.options.osx
+    if conf.env.TARGET_OSX:
+        conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_OSX')
 
     if conf.options.enable_debug:
         conf.env.append_value('CXXFLAGS', ['-g', '-DDCPOMATIC_DEBUG'])
@@ -100,8 +105,10 @@ def configure(conf):
 
     conf.check_cfg(package = 'sndfile', args = '--cflags --libs', uselib_store = 'SNDFILE', mandatory = True)
     conf.check_cfg(package = 'glib-2.0', args = '--cflags --libs', uselib_store = 'GLIB', mandatory = True)
-    if conf.options.target_windows is False:
-        conf.check_cfg(package = 'liblzma', args = '--cflags --libs', uselib_store = 'LZMA', mandatory = True)
+
+    if conf.env.TARGET_LINUX:
+        conf.check_cfg(package='liblzma', args='--cflags --libs', uselib_store='LZMA', mandatory=True)
+
     conf.check_cfg(package = '', path = conf.options.magickpp_config, args = '--cppflags --cxxflags --libs', uselib_store = 'MAGICK', mandatory = True)
 
     if conf.options.static: