* @brief Some utility functions and classes.
*/
-#include <iomanip>
-#include <iostream>
-#include <fstream>
-#include <climits>
-#include <stdexcept>
-#ifdef DCPOMATIC_POSIX
-#include <execinfo.h>
-#include <cxxabi.h>
-#endif
-#include <libssh/libssh.h>
-#include <signal.h>
-#include <boost/algorithm/string.hpp>
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/thread.hpp>
-#include <boost/filesystem.hpp>
-#ifdef DCPOMATIC_WINDOWS
-#include <boost/locale.hpp>
-#endif
-#include <glib.h>
-#include <openjpeg.h>
-#include <pangomm/init.h>
-#include <magick/MagickCore.h>
-#include <magick/version.h>
-#include <dcp/version.h>
-#include <dcp/util.h>
-#include <dcp/signer.h>
-#include <dcp/raw_convert.h>
-extern "C" {
-#include <libavcodec/avcodec.h>
-#include <libavformat/avformat.h>
-#include <libswscale/swscale.h>
-#include <libavfilter/avfiltergraph.h>
-#include <libavutil/pixfmt.h>
-}
#include "util.h"
#include "exceptions.h"
#include "scaler.h"
#ifdef DCPOMATIC_WINDOWS
#include "stack.hpp"
#endif
+#include <dcp/version.h>
+#include <dcp/util.h>
+#include <dcp/signer.h>
+#include <dcp/raw_convert.h>
+extern "C" {
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+#include <libswscale/swscale.h>
+#include <libavfilter/avfiltergraph.h>
+#include <libavutil/pixfmt.h>
+}
+#include <glib.h>
+#include <openjpeg.h>
+#include <pangomm/init.h>
+#ifdef DCPOMATIC_IMAGE_MAGICK
+#include <magick/MagickCore.h>
+#else
+#include <magick/common.h>
+#include <magick/magick_config.h>
+#endif
+#include <magick/version.h>
+#include <libssh/libssh.h>
+#include <boost/algorithm/string.hpp>
+#include <boost/bind.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <boost/thread.hpp>
+#include <boost/filesystem.hpp>
+#ifdef DCPOMATIC_WINDOWS
+#include <boost/locale.hpp>
+#endif
+#include <signal.h>
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+#include <climits>
+#include <stdexcept>
+#ifdef DCPOMATIC_POSIX
+#include <execinfo.h>
+#include <cxxabi.h>
+#endif
#include "i18n.h"
using std::ostream;
using std::endl;
using std::vector;
-using std::hex;
-using std::setw;
-using std::ios;
using std::min;
using std::max;
using std::list;
using std::multimap;
-using std::map;
using std::istream;
-using std::numeric_limits;
using std::pair;
using std::cout;
using std::bad_alloc;
-using std::streampos;
using std::set_terminate;
using boost::shared_ptr;
using boost::thread;
SafeStringStream hms;
hms << h << N_(":");
hms.width (2);
- hms << std::setfill ('0') << m << N_(":");
+ hms << setfill ('0') << m << N_(":");
hms.width (2);
- hms << std::setfill ('0') << s;
+ hms << setfill ('0') << s;
return hms.str ();
}
if (hours) {
if (m > 30 && !minutes) {
- ap << (h + 1) << N_(" ") << _("hours");
+ /// TRANSLATORS: h here is an abbreviation for hours
+ ap << (h + 1) << _("h");
} else {
- ap << h << N_(" ");
- if (h == 1) {
- ap << _("hour");
- } else {
- ap << _("hours");
- }
+ /// TRANSLATORS: h here is an abbreviation for hours
+ ap << h << _("h");
}
if (minutes | seconds) {
if (minutes) {
/* Minutes */
if (s > 30 && !seconds) {
- ap << (m + 1) << N_(" ") << _("minutes");
+ /// TRANSLATORS: m here is an abbreviation for minutes
+ ap << (m + 1) << _("m");
} else {
- ap << m << N_(" ");
- if (m == 1) {
- ap << _("minute");
- } else {
- ap << _("minutes");
- }
+ /// TRANSLATORS: m here is an abbreviation for minutes
+ ap << m << _("m");
}
if (seconds) {
if (seconds) {
/* Seconds */
- ap << s << N_(" ");
- if (s == 1) {
- ap << _("second");
- } else {
- ap << _("seconds");
- }
+ /// TRANSLATORS: s here is an abbreviation for seconds
+ ap << s << _("s");
}
return ap.str ();
}
#endif
+void
+set_backtrace_file (boost::filesystem::path p)
+{
+ backtrace_file = p;
+}
+
/* From http://stackoverflow.com/questions/2443135/how-do-i-find-where-an-exception-was-thrown-in-c */
void
terminate ()
dcpomatic_setup ()
{
#ifdef DCPOMATIC_WINDOWS
- backtrace_file /= g_get_user_config_dir ();
- backtrace_file /= "backtrace.txt";
+ boost::filesystem::path p = g_get_user_config_dir ();
+ p /= "backtrace.txt";
+ set_backtrace_file (p);
SetUnhandledExceptionFilter(exception_handler);
/* Dark voodoo which, I think, gets boost::filesystem::path to
_acceptor->async_accept (_socket, boost::lambda::var(ec) = boost::lambda::_1);
do {
_io_service.run_one ();
- } while (ec == boost::asio::error::would_block );
+ } while (ec == boost::asio::error::would_block);
delete _acceptor;
_acceptor = 0;
{
assert (MAX_DCP_AUDIO_CHANNELS == 12);
- /* TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency
- enhancement channel (sub-woofer). HI is the hearing-impaired audio track and
- VI is the visually-impaired audio track (audio describe).
- */
+ /// TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency
+ /// enhancement channel (sub-woofer). HI is the hearing-impaired audio track and
+ /// VI is the visually-impaired audio track (audio describe).
string const channels[] = {
_("Left"),
_("Right"),
{
string ext = f.extension().string();
transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
- return (ext == ".tif" || ext == ".tiff" || ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp" || ext == ".tga" || ext == ".dpx");
+ return (
+ ext == ".tif" || ext == ".tiff" || ext == ".jpg" || ext == ".jpeg" ||
+ ext == ".png" || ext == ".bmp" || ext == ".tga" || ext == ".dpx" ||
+ ext == ".j2c" || ext == ".j2k"
+ );
+}
+
+bool
+valid_j2k_file (boost::filesystem::path f)
+{
+ string ext = f.extension().string();
+ transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
+ return (ext == ".j2k" || ext == ".j2c");
}
string
return t;
}
-map<string, string>
-split_get_request (string url)
-{
- enum {
- AWAITING_QUESTION_MARK,
- KEY,
- VALUE
- } state = AWAITING_QUESTION_MARK;
-
- map<string, string> r;
- string k;
- string v;
- for (size_t i = 0; i < url.length(); ++i) {
- switch (state) {
- case AWAITING_QUESTION_MARK:
- if (url[i] == '?') {
- state = KEY;
- }
- break;
- case KEY:
- if (url[i] == '=') {
- v.clear ();
- state = VALUE;
- } else {
- k += url[i];
- }
- break;
- case VALUE:
- if (url[i] == '&') {
- r.insert (make_pair (k, v));
- k.clear ();
- state = KEY;
- } else {
- v += url[i];
- }
- break;
- }
- }
-
- if (state == VALUE) {
- r.insert (make_pair (k, v));
- }
-
- return r;
-}
-
dcp::Size
fit_ratio_within (float ratio, dcp::Size full_frame, int round)
{