summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-06-02 23:03:08 +0100
committerCarl Hetherington <cth@carlh.net>2013-06-02 23:03:08 +0100
commita0856e3fbef17f24073b01cb96be6bbcb229ecbc (patch)
tree13fd6191f2c4d82943cbcfa1f34688552cfc1f8e /src
parente6d086fff404d9fe5ac080f9e75334eeb315c1da (diff)
parent42866530db49e0faf367ad28a55c658be60951bf (diff)
Merge master.
Diffstat (limited to 'src')
-rw-r--r--src/lib/config.cc2
-rw-r--r--src/lib/ffmpeg_decoder.cc1
-rw-r--r--src/lib/film.cc4
-rw-r--r--src/lib/filter_graph.cc1
-rw-r--r--src/lib/image.cc8
-rw-r--r--src/lib/subtitle.cc10
-rw-r--r--src/lib/subtitle.h6
-rw-r--r--src/lib/util.h2
-rw-r--r--src/lib/video_content.cc2
-rw-r--r--src/tools/dcpomatic.cc38
-rw-r--r--src/tools/dcpomatic_server.cc5
-rw-r--r--src/tools/wscript2
-rw-r--r--src/wx/audio_plot.cc2
-rw-r--r--src/wx/config_dialog.cc6
-rw-r--r--src/wx/film_viewer.cc14
-rw-r--r--src/wx/new_film_dialog.cc9
-rw-r--r--src/wx/new_film_dialog.h4
17 files changed, 80 insertions, 36 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 978428b02..6fbd34d05 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -189,6 +189,8 @@ Config::file (bool old) const
{
boost::filesystem::path p;
p /= g_get_user_config_dir ();
+ boost::system::error_code ec;
+ boost::filesystem::create_directory (p, ec);
if (old) {
p /= ".dvdomatic";
} else {
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index 67587a564..1d000b62b 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -31,7 +31,6 @@
#include <stdint.h>
#include <boost/lexical_cast.hpp>
extern "C" {
-#include <tiffio.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
diff --git a/src/lib/film.cc b/src/lib/film.cc
index ef29d35fd..57e3791a2 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -170,6 +170,10 @@ Film::video_state_identifier () const
<< "_" << j2k_bandwidth()
<< "_" << lexical_cast<int> (colour_lut());
+ if (trim_type() == ENCODE) {
+ s << "_" << trim_start() << "_" << trim_end();
+ }
+
if (ab()) {
pair<string, string> fa = Filter::ffmpeg_strings (Config::instance()->reference_filters());
s << "ab_" << Config::instance()->reference_scaler()->id() << "_" << fa.first << "_" << fa.second;
diff --git a/src/lib/filter_graph.cc b/src/lib/filter_graph.cc
index 7ec2466c5..472480de3 100644
--- a/src/lib/filter_graph.cc
+++ b/src/lib/filter_graph.cc
@@ -154,6 +154,7 @@ FilterGraph::process (AVFrame* frame)
}
images.push_back (shared_ptr<Image> (new SimpleImage (_frame)));
+ av_frame_unref (_frame);
}
return images;
diff --git a/src/lib/image.cc b/src/lib/image.cc
index a12c61b3e..f0a38f4e9 100644
--- a/src/lib/image.cc
+++ b/src/lib/image.cc
@@ -68,7 +68,7 @@ Image::lines (int n) const
throw PixelFormatError (N_("lines()"), _pixel_format);
}
- return size().height / pow(2, d->log2_chroma_h);
+ return size().height / pow(2.0f, d->log2_chroma_h);
}
/** @return Number of components */
@@ -407,13 +407,13 @@ Image::bytes_per_pixel (int c) const
bpp[0] = floor ((d->comp[0].depth_minus1 + 1 + 7) / 8);
if (d->nb_components > 1) {
- bpp[1] = floor ((d->comp[1].depth_minus1 + 1 + 7) / 8) / pow (2, d->log2_chroma_w);
+ bpp[1] = floor ((d->comp[1].depth_minus1 + 1 + 7) / 8) / pow (2.0f, d->log2_chroma_w);
}
if (d->nb_components > 2) {
- bpp[2] = floor ((d->comp[2].depth_minus1 + 1 + 7) / 8) / pow (2, d->log2_chroma_w);
+ bpp[2] = floor ((d->comp[2].depth_minus1 + 1 + 7) / 8) / pow (2.0f, d->log2_chroma_w);
}
if (d->nb_components > 3) {
- bpp[3] = floor ((d->comp[3].depth_minus1 + 1 + 7) / 8) / pow (2, d->log2_chroma_w);
+ bpp[3] = floor ((d->comp[3].depth_minus1 + 1 + 7) / 8) / pow (2.0f, d->log2_chroma_w);
}
if ((d->flags & PIX_FMT_PLANAR) == 0) {
diff --git a/src/lib/subtitle.cc b/src/lib/subtitle.cc
index eafccd9b5..2815fccd8 100644
--- a/src/lib/subtitle.cc
+++ b/src/lib/subtitle.cc
@@ -110,13 +110,13 @@ Subtitle::Subtitle (Position p, shared_ptr<Image> i)
* in the coordinate space of the source.
* @param subtitle_scale scaling factor to apply to the subtitle image.
*/
-Rect
+dvdomatic::Rect
subtitle_transformed_area (
float target_x_scale, float target_y_scale,
- Rect sub_area, int subtitle_offset, float subtitle_scale
+ dvdomatic::Rect sub_area, int subtitle_offset, float subtitle_scale
)
{
- Rect tx;
+ dvdomatic::Rect tx;
sub_area.y += subtitle_offset;
@@ -145,8 +145,8 @@ subtitle_transformed_area (
}
/** @return area that this subtitle takes up, in the original uncropped source's coordinate space */
-Rect
+dvdomatic::Rect
Subtitle::area () const
{
- return Rect (_position.x, _position.y, _image->size().width, _image->size().height);
+ return dvdomatic::Rect (_position.x, _position.y, _image->size().width, _image->size().height);
}
diff --git a/src/lib/subtitle.h b/src/lib/subtitle.h
index 52bd35923..c3929d676 100644
--- a/src/lib/subtitle.h
+++ b/src/lib/subtitle.h
@@ -48,17 +48,17 @@ public:
return _image;
}
- Rect area () const;
+ dvdomatic::Rect area () const;
private:
Position _position;
boost::shared_ptr<Image> _image;
};
-Rect
+dvdomatic::Rect
subtitle_transformed_area (
float target_x_scale, float target_y_scale,
- Rect sub_area, int subtitle_offset, float subtitle_scale
+ dvdomatic::Rect sub_area, int subtitle_offset, float subtitle_scale
);
/** A Subtitle class with details of the time over which it should be shown */
diff --git a/src/lib/util.h b/src/lib/util.h
index 65859309d..be70eb259 100644
--- a/src/lib/util.h
+++ b/src/lib/util.h
@@ -45,6 +45,8 @@ extern "C" {
#define TIMING(...)
#endif
+#undef check
+
/** The maximum number of audio channels that we can cope with */
#define MAX_AUDIO_CHANNELS 6
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc
index 18a128a5d..84dee81d1 100644
--- a/src/lib/video_content.cc
+++ b/src/lib/video_content.cc
@@ -39,6 +39,7 @@ using boost::optional;
VideoContent::VideoContent (shared_ptr<const Film> f, Time s, ContentVideoFrame len)
: Content (f, s)
, _video_length (len)
+ , _video_frame_rate (0)
, _ratio (0)
{
@@ -47,6 +48,7 @@ VideoContent::VideoContent (shared_ptr<const Film> f, Time s, ContentVideoFrame
VideoContent::VideoContent (shared_ptr<const Film> f, boost::filesystem::path p)
: Content (f, p)
, _video_length (0)
+ , _video_frame_rate (0)
, _ratio (0)
{
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc
index 8d3de53ff..ebd647861 100644
--- a/src/tools/dcpomatic.cc
+++ b/src/tools/dcpomatic.cc
@@ -23,6 +23,9 @@
#ifdef __WXMSW__
#include <shellapi.h>
#endif
+#ifdef __WXOSX__
+#include <ApplicationServices/ApplicationServices.h>
+#endif
#include <wx/aboutdlg.h>
#include <wx/stdpaths.h>
#include <wx/cmdline.h>
@@ -142,13 +145,10 @@ enum {
ID_file_open,
ID_file_save,
ID_file_properties,
- ID_file_quit,
- ID_edit_preferences,
ID_jobs_make_dcp,
ID_jobs_send_dcp_to_tms,
ID_jobs_show_dcp,
ID_jobs_analyse_audio,
- ID_help_about
};
void
@@ -161,11 +161,17 @@ setup_menu (wxMenuBar* m)
add_item (file, _("&Save"), ID_file_save, NEEDS_FILM);
file->AppendSeparator ();
add_item (file, _("&Properties..."), ID_file_properties, NEEDS_FILM);
+#ifndef __WXOSX__
file->AppendSeparator ();
- add_item (file, _("&Quit"), ID_file_quit, ALWAYS);
+#endif
+ add_item (file, _("&Exit"), wxID_EXIT, ALWAYS);
+#ifdef __WXOSX__
+ add_item (file, _("&Preferences..."), wxID_PREFERENCES, ALWAYS);
+#else
wxMenu* edit = new wxMenu;
- add_item (edit, _("&Preferences..."), ID_edit_preferences, ALWAYS);
+ add_item (edit, _("&Preferences..."), wxID_PREFERENCES, ALWAYS);
+#endif
jobs_menu = new wxMenu;
add_item (jobs_menu, _("&Make DCP"), ID_jobs_make_dcp, NEEDS_FILM);
@@ -175,10 +181,16 @@ setup_menu (wxMenuBar* m)
add_item (jobs_menu, _("&Analyse audio"), ID_jobs_analyse_audio, NEEDS_FILM);
wxMenu* help = new wxMenu;
- add_item (help, _("About"), ID_help_about, ALWAYS);
+#ifdef __WXOSX__
+ add_item (help, _("About DVD-o-matic"), wxID_ABOUT, ALWAYS);
+#else
+ add_item (help, _("About"), wxID_ABOUT, ALWAYS);
+#endif
m->Append (file, _("&File"));
+#ifndef __WXOSX__
m->Append (edit, _("&Edit"));
+#endif
m->Append (jobs_menu, _("&Jobs"));
m->Append (help, _("&Help"));
}
@@ -204,13 +216,13 @@ public:
Connect (ID_file_open, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_open));
Connect (ID_file_save, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_save));
Connect (ID_file_properties, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_properties));
- Connect (ID_file_quit, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_quit));
- Connect (ID_edit_preferences, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::edit_preferences));
+ Connect (wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_exit));
+ Connect (wxID_PREFERENCES, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::edit_preferences));
Connect (ID_jobs_make_dcp, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_make_dcp));
Connect (ID_jobs_send_dcp_to_tms, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_send_dcp_to_tms));
Connect (ID_jobs_show_dcp, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_show_dcp));
Connect (ID_jobs_analyse_audio, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_analyse_audio));
- Connect (ID_help_about, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::help_about));
+ Connect (wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::help_about));
Connect (wxID_ANY, wxEVT_MENU_OPEN, wxMenuEventHandler (Frame::menu_opened));
@@ -342,7 +354,7 @@ private:
d->Destroy ();
}
- void file_quit (wxCommandEvent &)
+ void file_exit (wxCommandEvent &)
{
maybe_save_then_delete_film ();
Close (true);
@@ -450,6 +462,12 @@ class App : public wxApp
#ifdef DCPOMATIC_POSIX
unsetenv ("UBUNTU_MENUPROXY");
+#endif
+
+#ifdef __WXOSX__
+ ProcessSerialNumber serial;
+ GetCurrentProcess (&serial);
+ TransformProcessType (&serial, kProcessTransformToForegroundApplication);
#endif
wxInitAllImageHandlers ();
diff --git a/src/tools/dcpomatic_server.cc b/src/tools/dcpomatic_server.cc
index 152e063c1..d3a353154 100644
--- a/src/tools/dcpomatic_server.cc
+++ b/src/tools/dcpomatic_server.cc
@@ -102,8 +102,11 @@ public:
wxBitmap bitmap (wxString::Format (wxT ("%s/taskbar_icon.png"), POSIX_ICON_PREFIX), wxBITMAP_TYPE_PNG);
wxIcon icon;
icon.CopyFromBitmap (bitmap);
-#endif
+#endif
+#ifndef __WXOSX__
+ /* XXX: fix this for OS X */
SetIcon (icon, std_to_wx ("DCP-o-matic encode server"));
+#endif
Connect (ID_status, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (TaskBarIcon::status));
Connect (ID_quit, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (TaskBarIcon::quit));
diff --git a/src/tools/wscript b/src/tools/wscript
index cddd07b7d..38d986f25 100644
--- a/src/tools/wscript
+++ b/src/tools/wscript
@@ -20,7 +20,7 @@ def build(bld):
obj.use = ['libdcpomatic', 'libdcpomatic-wx']
obj.source = '%s.cc' % t
if bld.env.TARGET_WINDOWS:
- obj.source += ' ../../windows/dcpomatic.rc'
+ obj.source += ' ../../platform/windows/dcpomatic.rc'
obj.target = t
i18n.po_to_mo(os.path.join('src', 'tools'), 'dcpomatic', bld)
diff --git a/src/wx/audio_plot.cc b/src/wx/audio_plot.cc
index 46c64c9bf..fb02fea7b 100644
--- a/src/wx/audio_plot.cc
+++ b/src/wx/audio_plot.cc
@@ -43,7 +43,9 @@ AudioPlot::AudioPlot (wxWindow* parent)
, _gain (0)
, _smoothing (max_smoothing / 2)
{
+#ifndef __WXOSX__
SetDoubleBuffered (true);
+#endif
for (int i = 0; i < MAX_AUDIO_CHANNELS; ++i) {
_channel_visible[i] = false;
diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc
index 3efd7857a..0b13b9c88 100644
--- a/src/wx/config_dialog.cc
+++ b/src/wx/config_dialog.cc
@@ -18,7 +18,7 @@
*/
/** @file src/config_dialog.cc
- * @brief A dialogue to edit DCP-o-matic configuration.
+ * @brief A dialogue to edit DVD-o-matic configuration.
*/
#include <iostream>
@@ -43,7 +43,7 @@ using namespace std;
using boost::bind;
ConfigDialog::ConfigDialog (wxWindow* parent)
- : wxDialog (parent, wxID_ANY, _("DCP-o-matic Preferences"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+ : wxDialog (parent, wxID_ANY, _("DVD-o-matic Preferences"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
_notebook = new wxNotebook (this, wxID_ANY);
@@ -95,7 +95,7 @@ ConfigDialog::make_misc_panel ()
table->Add (_language, 1, wxEXPAND);
table->AddSpacer (0);
- wxStaticText* restart = add_label_to_sizer (table, _misc_panel, _("(restart DCP-o-matic to see language changes)"));
+ wxStaticText* restart = add_label_to_sizer (table, _misc_panel, _("(restart DVD-o-matic to see language changes)"));
wxFont font = restart->GetFont();
font.SetStyle (wxFONTSTYLE_ITALIC);
font.SetPointSize (font.GetPointSize() - 1);
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index 26f99db11..e1471d94e 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -1,5 +1,3 @@
-/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
-
/*
Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
@@ -65,7 +63,10 @@ FilmViewer::FilmViewer (shared_ptr<Film> f, wxWindow* p)
, _display_frame_x (0)
, _got_frame (false)
{
+#ifndef __WXOSX__
_panel->SetDoubleBuffered (true);
+#endif
+
#if wxMAJOR_VERSION == 2 && wxMINOR_VERSION >= 9
_panel->SetBackgroundStyle (wxBG_STYLE_PAINT);
#endif
@@ -196,9 +197,6 @@ FilmViewer::timer (wxTimerEvent &)
return;
}
- _panel->Refresh ();
- _panel->Update ();
-
get_frame ();
if (_film->length()) {
@@ -207,6 +205,9 @@ FilmViewer::timer (wxTimerEvent &)
_slider->SetValue (new_slider_position);
}
}
+
+ _panel->Refresh ();
+ _panel->Update ();
}
@@ -365,7 +366,8 @@ FilmViewer::process_video (shared_ptr<const Image> image, bool, Time t)
_got_frame = true;
double const fps = _film->dcp_video_frame_rate ();
- _frame->SetLabel (wxString::Format (wxT("%d"), int (rint (t * fps / TIME_HZ))));
+ /* Count frame number from 1 ... not sure if this is the best idea */
+ _frame->SetLabel (wxString::Format (wxT("%d"), int (rint (t * fps / TIME_HZ)) + 1));
double w = static_cast<double>(t) / TIME_HZ;
int const h = (w / 3600);
diff --git a/src/wx/new_film_dialog.cc b/src/wx/new_film_dialog.cc
index 90c2d727e..737b07fbb 100644
--- a/src/wx/new_film_dialog.cc
+++ b/src/wx/new_film_dialog.cc
@@ -29,6 +29,8 @@
using namespace std;
using namespace boost;
+string NewFilmDialog::_directory = Config::instance()->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir()));
+
NewFilmDialog::NewFilmDialog (wxWindow* parent)
: wxDialog (parent, wxID_ANY, _("New Film"))
{
@@ -49,7 +51,7 @@ NewFilmDialog::NewFilmDialog (wxWindow* parent)
#else
_folder = new wxDirPickerCtrl (this, wxDD_DIR_MUST_EXIST);
#endif
- _folder->SetPath (std_to_wx (Config::instance()->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir()))));
+ _folder->SetPath (std_to_wx (_directory));
table->Add (_folder, 1, wxEXPAND);
wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL);
@@ -61,6 +63,11 @@ NewFilmDialog::NewFilmDialog (wxWindow* parent)
overall_sizer->SetSizeHints (this);
}
+NewFilmDialog::~NewFilmDialog ()
+{
+ _directory = wx_to_std (_folder->GetPath ());
+}
+
string
NewFilmDialog::get_path () const
{
diff --git a/src/wx/new_film_dialog.h b/src/wx/new_film_dialog.h
index 3d1253ecc..715f71f51 100644
--- a/src/wx/new_film_dialog.h
+++ b/src/wx/new_film_dialog.h
@@ -26,6 +26,7 @@ class NewFilmDialog : public wxDialog
{
public:
NewFilmDialog (wxWindow *);
+ ~NewFilmDialog ();
std::string get_path () const;
@@ -35,5 +36,6 @@ private:
DirPickerCtrl* _folder;
#else
wxDirPickerCtrl* _folder;
-#endif
+#endif
+ static std::string _directory;
};