Merge master.
authorCarl Hetherington <cth@carlh.net>
Sun, 7 Apr 2013 12:53:52 +0000 (13:53 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 7 Apr 2013 12:53:52 +0000 (13:53 +0100)
1  2 
src/lib/util.cc
src/lib/wscript
wscript

diff --combined src/lib/util.cc
index 760b826c7649cc18cc20462bf07773c459412897,5b2038cdea5df7dd29d69f9902666f692f3b899e..654546e62e572e5f4107de5783d6f6f784fbc657
@@@ -63,26 -63,8 +63,26 @@@ extern "C" 
  
  #include "i18n.h"
  
 -using namespace std;
 -using namespace boost;
 +using std::string;
 +using std::stringstream;
 +using std::setfill;
 +using std::ostream;
 +using std::endl;
 +using std::vector;
 +using std::hex;
 +using std::setw;
 +using std::ifstream;
 +using std::ios;
 +using std::min;
 +using std::max;
 +using std::list;
 +using std::multimap;
 +using std::istream;
 +using std::numeric_limits;
 +using std::pair;
 +using boost::shared_ptr;
 +using boost::thread;
 +using boost::lexical_cast;
  using libdcp::Size;
  
  thread::id ui_thread;
@@@ -261,7 -243,7 +261,7 @@@ dvdomatic_setup (
        Filter::setup_filters ();
        SoundProcessor::setup_sound_processors ();
  
 -      ui_thread = this_thread::get_id ();
 +      ui_thread = boost::this_thread::get_id ();
  }
  
  #ifdef DVDOMATIC_WINDOWS
@@@ -301,6 -283,7 +301,7 @@@ dvdomatic_setup_i18n (string lang
  
  #ifdef DVDOMATIC_WINDOWS
        bindtextdomain ("libdvdomatic", mo_path().string().c_str());
+       bind_textdomain_codeset ("libdvdomatic", "UTF8");
  #endif        
  
  #ifdef DVDOMATIC_POSIX
@@@ -365,11 -348,11 +366,11 @@@ md5_digest (void const * data, int size
   *  @return MD5 digest of file's contents.
   */
  string
 -md5_digest (string file)
 +md5_digest (boost::filesystem::path file)
  {
 -      ifstream f (file.c_str(), ios::binary);
 +      ifstream f (file.string().c_str(), ios::binary);
        if (!f.good ()) {
 -              throw OpenFileError (file);
 +              throw OpenFileError (file.string());
        }
        
        f.seekg (0, ios::end);
@@@ -494,6 -477,16 +495,6 @@@ dcp_audio_sample_rate (int fs
        return 96000;
  }
  
 -bool operator== (Crop const & a, Crop const & b)
 -{
 -      return (a.left == b.left && a.right == b.right && a.top == b.top && a.bottom == b.bottom);
 -}
 -
 -bool operator!= (Crop const & a, Crop const & b)
 -{
 -      return !(a == b);
 -}
 -
  /** @param index Colour LUT index.
   *  @return Human-readable name.
   */
@@@ -516,16 -509,16 +517,16 @@@ Socket::Socket (int timeout
        , _socket (_io_service)
        , _timeout (timeout)
  {
 -      _deadline.expires_at (posix_time::pos_infin);
 +      _deadline.expires_at (boost::posix_time::pos_infin);
        check ();
  }
  
  void
  Socket::check ()
  {
 -      if (_deadline.expires_at() <= asio::deadline_timer::traits_type::now ()) {
 +      if (_deadline.expires_at() <= boost::asio::deadline_timer::traits_type::now ()) {
                _socket.close ();
 -              _deadline.expires_at (posix_time::pos_infin);
 +              _deadline.expires_at (boost::posix_time::pos_infin);
        }
  
        _deadline.async_wait (boost::bind (&Socket::check, this));
   *  @param endpoint End-point to connect to.
   */
  void
 -Socket::connect (asio::ip::basic_resolver_entry<asio::ip::tcp> const & endpoint)
 +Socket::connect (boost::asio::ip::basic_resolver_entry<boost::asio::ip::tcp> const & endpoint)
  {
 -      _deadline.expires_from_now (posix_time::seconds (_timeout));
 -      system::error_code ec = asio::error::would_block;
 -      _socket.async_connect (endpoint, lambda::var(ec) = lambda::_1);
 +      _deadline.expires_from_now (boost::posix_time::seconds (_timeout));
 +      boost::system::error_code ec = boost::asio::error::would_block;
 +      _socket.async_connect (endpoint, boost::lambda::var(ec) = boost::lambda::_1);
        do {
                _io_service.run_one();
 -      } while (ec == asio::error::would_block);
 +      } while (ec == boost::asio::error::would_block);
  
        if (ec || !_socket.is_open ()) {
                throw NetworkError (_("connect timed out"));
  void
  Socket::write (uint8_t const * data, int size)
  {
 -      _deadline.expires_from_now (posix_time::seconds (_timeout));
 -      system::error_code ec = asio::error::would_block;
 +      _deadline.expires_from_now (boost::posix_time::seconds (_timeout));
 +      boost::system::error_code ec = boost::asio::error::would_block;
  
 -      asio::async_write (_socket, asio::buffer (data, size), lambda::var(ec) = lambda::_1);
 +      boost::asio::async_write (_socket, boost::asio::buffer (data, size), boost::lambda::var(ec) = boost::lambda::_1);
        
        do {
                _io_service.run_one ();
 -      } while (ec == asio::error::would_block);
 +      } while (ec == boost::asio::error::would_block);
  
        if (ec) {
                throw NetworkError (ec.message ());
@@@ -584,14 -577,14 +585,14 @@@ Socket::write (uint32_t v
  void
  Socket::read (uint8_t* data, int size)
  {
 -      _deadline.expires_from_now (posix_time::seconds (_timeout));
 -      system::error_code ec = asio::error::would_block;
 +      _deadline.expires_from_now (boost::posix_time::seconds (_timeout));
 +      boost::system::error_code ec = boost::asio::error::would_block;
  
 -      asio::async_read (_socket, asio::buffer (data, size), lambda::var(ec) = lambda::_1);
 +      boost::asio::async_read (_socket, boost::asio::buffer (data, size), boost::lambda::var(ec) = boost::lambda::_1);
  
        do {
                _io_service.run_one ();
 -      } while (ec == asio::error::would_block);
 +      } while (ec == boost::asio::error::would_block);
        
        if (ec) {
                throw NetworkError (ec.message ());
@@@ -868,39 -861,37 +869,39 @@@ AudioBuffers::move (int from, int to, i
        }
  }
  
 +/** Add data from from `from', `from_channel' to our channel `to_channel' */
 +void
 +AudioBuffers::accumulate (shared_ptr<AudioBuffers> from, int from_channel, int to_channel)
 +{
 +      int const N = frames ();
 +      assert (from->frames() == N);
 +
 +      float* s = from->data (from_channel);
 +      float* d = _data[to_channel];
 +
 +      for (int i = 0; i < N; ++i) {
 +              *d++ += *s++;
 +      }
 +}
 +
  /** Trip an assert if the caller is not in the UI thread */
  void
  ensure_ui_thread ()
  {
 -      assert (this_thread::get_id() == ui_thread);
 +      assert (boost::this_thread::get_id() == ui_thread);
  }
  
 -/** @param v Source video frame.
 +/** @param v Content video frame.
   *  @param audio_sample_rate Source audio sample rate.
   *  @param frames_per_second Number of video frames per second.
   *  @return Equivalent number of audio frames for `v'.
   */
  int64_t
 -video_frames_to_audio_frames (SourceFrame v, float audio_sample_rate, float frames_per_second)
 +video_frames_to_audio_frames (ContentVideoFrame v, float audio_sample_rate, float frames_per_second)
  {
        return ((int64_t) v * audio_sample_rate / frames_per_second);
  }
  
 -/** @param f Filename.
 - *  @return true if this file is a still image, false if it is something else.
 - */
 -bool
 -still_image_file (string f)
 -{
 -      string ext = boost::filesystem::path(f).extension().string();
 -
 -      transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
 -      
 -      return (ext == N_(".tif") || ext == N_(".tiff") || ext == N_(".jpg") || ext == N_(".jpeg") || ext == N_(".png") || ext == N_(".bmp"));
 -}
 -
  /** @return A pair containing CPU model name and the number of processors */
  pair<string, int>
  cpu_info ()
@@@ -947,6 -938,58 +948,6 @@@ audio_channel_name (int c
        return channels[c];
  }
  
 -AudioMapping::AudioMapping (int c)
 -      : _source_channels (c)
 -{
 -
 -}
 -
 -optional<libdcp::Channel>
 -AudioMapping::source_to_dcp (int c) const
 -{
 -      if (c >= _source_channels) {
 -              return optional<libdcp::Channel> ();
 -      }
 -
 -      if (_source_channels == 1) {
 -              /* mono sources to centre */
 -              return libdcp::CENTRE;
 -      }
 -      
 -      return static_cast<libdcp::Channel> (c);
 -}
 -
 -optional<int>
 -AudioMapping::dcp_to_source (libdcp::Channel c) const
 -{
 -      if (_source_channels == 1) {
 -              if (c == libdcp::CENTRE) {
 -                      return 0;
 -              } else {
 -                      return optional<int> ();
 -              }
 -      }
 -
 -      if (static_cast<int> (c) >= _source_channels) {
 -              return optional<int> ();
 -      }
 -      
 -      return static_cast<int> (c);
 -}
 -
 -int
 -AudioMapping::dcp_channels () const
 -{
 -      if (_source_channels == 1) {
 -              /* The source is mono, so to put the mono channel into
 -                 the centre we need to generate a 5.1 soundtrack.
 -              */
 -              return 6;
 -      }
 -
 -      return _source_channels;
 -}
 -
  FrameRateConversion::FrameRateConversion (float source, int dcp)
        : skip (false)
        , repeat (false)
diff --combined src/lib/wscript
index 896598a0efd64302f018fe2a33643f29028403e8,8e9d3470665281269b3ad4c5ebdcdb2c323f9eb8..8f0e851e39d6a6387f2cad7bc6945bd47f5bdf27
@@@ -6,18 -6,16 +6,18 @@@ sources = ""
          ab_transcoder.cc
            analyse_audio_job.cc
            audio_analysis.cc
 +          audio_content.cc
            audio_decoder.cc
 +          audio_mapping.cc
            audio_source.cc
            config.cc
            combiner.cc
 +          content.cc
            cross.cc
            dci_metadata.cc
            dcp_content_type.cc
            dcp_video_frame.cc
            decoder.cc
 -          decoder_factory.cc
            delay_line.cc
            dolby_cp750.cc
            encoder.cc
            exceptions.cc
            filter_graph.cc
            ffmpeg_compatibility.cc
 +          ffmpeg_content.cc
            ffmpeg_decoder.cc
            film.cc
            filter.cc
            format.cc
            gain.cc
            image.cc
 +          imagemagick_content.cc
            imagemagick_decoder.cc
            job.cc
            job_manager.cc
            log.cc
            lut.cc
            matcher.cc
 +          player.cc
 +          playlist.cc
            scp_dcp_job.cc
            scaler.cc
            server.cc
 +          sndfile_content.cc
            sndfile_decoder.cc
            sound_processor.cc
 -          stream.cc
            subtitle.cc
            timer.cc
            transcode_job.cc
            transcoder.cc
 +          types.cc
            ui_signaller.cc
            util.cc
-           version.cc
 +          video_content.cc
            video_decoder.cc
            video_source.cc
            writer.cc
@@@ -72,11 -63,11 +71,11 @@@ def build(bld)
      obj.uselib = """
                   AVCODEC AVUTIL AVFORMAT AVFILTER SWSCALE SWRESAMPLE 
                   BOOST_FILESYSTEM BOOST_THREAD BOOST_DATETIME BOOST_SIGNALS2 
 -                 SNDFILE OPENJPEG POSTPROC TIFF MAGICK SSH DCP GLIB LZMA
 +                 SNDFILE OPENJPEG POSTPROC TIFF MAGICK SSH DCP CXML GLIB LZMA
                   """
      if bld.env.TARGET_WINDOWS:
          obj.uselib += ' WINSOCK2'
-     obj.source = sources
+     obj.source = sources + " version.cc"
      obj.target = 'dvdomatic'
  
      i18n.po_to_mo(os.path.join('src', 'lib'), 'libdvdomatic', bld)
diff --combined wscript
index 9914b3292f4ebf74f73baf304591ba3dbe36583f,7ee3899e7097f33604a216eb9690c44d809953ab..a85f3bf9cde08424a60ba5ccd766d361aa929687
+++ b/wscript
@@@ -3,7 -3,7 +3,7 @@@ import o
  import sys
  
  APPNAME = 'dvdomatic'
- VERSION = '0.78beta16'
+ VERSION = '0.80pre'
  
  def options(opt):
      opt.load('compiler_cxx')
@@@ -55,7 -55,6 +55,7 @@@ def configure(conf)
  
      if not conf.options.static:
          conf.check_cfg(package = 'libdcp', atleast_version = '0.41', args = '--cflags --libs', uselib_store = 'DCP', mandatory = True)
 +        conf.check_cfg(package = 'libcxml', atleast_version = '0.01', args = '--cflags --libs', uselib_store = 'CXML', mandatory = True)
          conf.check_cfg(package = 'libavformat', args = '--cflags --libs', uselib_store = 'AVFORMAT', mandatory = True)
          conf.check_cfg(package = 'libavfilter', args = '--cflags --libs', uselib_store = 'AVFILTER', mandatory = True)
          conf.check_cfg(package = 'libavcodec', args = '--cflags --libs', uselib_store = 'AVCODEC', mandatory = True)
@@@ -72,8 -71,6 +72,8 @@@
          conf.env.HAVE_DCP = 1
          conf.env.STLIB_DCP = ['dcp', 'asdcp-libdcp', 'kumu-libdcp']
          conf.env.LIB_DCP = ['glibmm-2.4', 'xml++-2.6', 'ssl', 'crypto', 'bz2']
 +        conf.env.HAVE_CXML = 1
 +        conf.env.STLIB_CXML = ['cxml']
          conf.env.HAVE_AVFORMAT = 1
          conf.env.STLIB_AVFORMAT = ['avformat']
          conf.env.HAVE_AVFILTER = 1