diff --git a/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj b/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj
index bce166e1e..5342cf9b8 100644
--- a/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj
+++ b/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj
@@ -611,6 +611,14 @@
RelativePath="..\..\src\mkv_wrap.h"
>
+
+
+
+
diff --git a/aegisub/src/Makefile.am b/aegisub/src/Makefile.am
index fff9beeda..5102961a2 100644
--- a/aegisub/src/Makefile.am
+++ b/aegisub/src/Makefile.am
@@ -250,6 +250,7 @@ aegisub_2_2_SOURCES = \
mythes.cxx \
options.cpp \
plugin_manager.cpp \
+ quicktime_common.cpp \
scintilla_text_ctrl.cpp \
spellchecker.cpp \
spline.cpp \
diff --git a/aegisub/src/quicktime_common.cpp b/aegisub/src/quicktime_common.cpp
new file mode 100644
index 000000000..7a7214a81
--- /dev/null
+++ b/aegisub/src/quicktime_common.cpp
@@ -0,0 +1,62 @@
+// Copyright (c) 2009, Karl Blomster
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+// * Neither the name of the Aegisub Group nor the names of its contributors
+// may be used to endorse or promote products derived from this software
+// without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// -----------------------------------------------------------------------------
+//
+// AEGISUB
+//
+// Website: http://aegisub.cellosoft.com
+// Contact: mailto:zeratul@cellosoft.com
+//
+
+
+#include
+#include "config.h"
+
+#ifdef WITH_QUICKTIME
+#include "quicktime_common.h"
+
+
+void QuickTimeProvider::wxStringToDataRef(const wxString &string, Handle *dataref, OSType *dataref_type) {
+ // convert filename, first to a CFStringRef...
+ wxString wx_filename = wxFileName(string).GetShortPath();
+ CFStringRef qt_filename = CFStringCreateWithCString(NULL, wx_filename.utf8_str(), kCFStringEncodingUTF8);
+
+ // and then to a data reference
+ OSErr qt_err = QTNewDataReferenceFromFullPathCFString(qt_filename, kQTNativeDefaultPathStyle, 0,
+ dataref, dataref_type);
+ QTCheckError(qt_err, wxString(_T("Failed to convert filename to data reference")));
+}
+
+
+void QuickTimeProvider::QTCheckError(OSErr err, wxString errmsg) {
+ if (err != noErr)
+ throw errmsg;
+ /* CheckError(err, errmsg.c_str()); // I wonder if this actually works on Mac, and if so, what it does */
+}
+
+#endif /* WITH_QUICKTIME */
diff --git a/aegisub/src/quicktime_common.h b/aegisub/src/quicktime_common.h
new file mode 100644
index 000000000..08cf7d434
--- /dev/null
+++ b/aegisub/src/quicktime_common.h
@@ -0,0 +1,73 @@
+// Copyright (c) 2009, Karl Blomster
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+// * Neither the name of the Aegisub Group nor the names of its contributors
+// may be used to endorse or promote products derived from this software
+// without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// -----------------------------------------------------------------------------
+//
+// AEGISUB
+//
+// Website: http://aegisub.cellosoft.com
+// Contact: mailto:zeratul@cellosoft.com
+//
+
+
+#pragma once
+
+#include "config.h"
+#include
+
+#ifdef WITH_QUICKTIME
+
+#ifdef _MSC_VER
+// avoid conflicts between MSVC's stdint.h and QT's stdint.h
+#define _STDINT_H
+// get MSVC to shut up about a macro redefinition in QT's ConditionalMacros.h
+#pragma warning(disable: 4004)
+#endif
+
+#include "include/aegisub/aegisub.h"
+extern "C" {
+#ifdef WIN32
+#include
+#include
+#include
+#include
+#else
+#include // not sure about this path, someone on mac needs to test it
+#endif
+}
+
+
+class QuickTimeProvider {
+public:
+ void wxStringToDataRef(const wxString &string, Handle *dataref, OSType *dataref_type);
+ void QTCheckError(OSErr err, wxString errmsg);
+
+ virtual ~QuickTimeProvider() {};
+};
+
+#endif /* WITH_QUICKTIME */
+