+2013-06-27 Carl Hetherington <cth@carlh.net>
+
+ * Version 0.104 released.
+
+2013-06-27 Carl Hetherington <cth@carlh.net>
+
+ * Hopefully fix problems with end-trim not working.
+
+2013-06-24 Carl Hetherington <cth@carlh.net>
+
+ * Version 0.103 released.
+
2013-06-20 Carl Hetherington <cth@carlh.net>
* Version 0.102 released.
+dvdomatic (0.104-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Carl Hetherington <carl@houllier.lan> Thu, 27 Jun 2013 01:20:18 +0100
+
+dvdomatic (0.103-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Carl Hetherington <carl@houllier.lan> Mon, 24 Jun 2013 23:39:57 +0100
+
dvdomatic (0.102-1) UNRELEASED; urgency=low
* New upstream release.
CloseHandle (process_info.hThread);
CloseHandle (child_stderr_read);
#else
- string ffprobe = "ffprobe 2> \"" + content.string() + "\" 2> \"" + out.string();
+ string ffprobe = "ffprobe \"" + content.string() + "\" 2> \"" + out.string() + "\"";
log->log (String::compose ("Probing with %1", ffprobe));
system (ffprobe.c_str ());
#endif
*/
#include <boost/shared_ptr.hpp>
+#include <stdint.h>
#include "trimmer.h"
using std::cout;
_audio_end = video_frames_to_audio_frames (_video_end, audio_sample_rate, frames_per_second);
}
- /* XXX: this is a hack; this flag means that no trim is happening at the end of the film, and I'm
- using that to prevent audio trim being rounded to video trim, which breaks the current set
- of regression tests. This could be removed if a) the regression tests are regenerated and b)
- I can work out what DCP length should be.
+ /* XXX: this is a hack; if there is no trim at the end, set
+ the audio end point to infinity so that
+ shorter-video-than-audio does not trim audio (which breaks
+ the current set of regression tests). This could be
+ removed if a) the regression tests are regenerated and b) I
+ can work out what DCP length should be.
*/
- _no_trim = (_video_start == 0) && (_video_end == (video_length - video_trim_end));
+ if (video_trim_end == 0) {
+ _audio_end = INT64_MAX;
+ }
}
void
Trimmer::process_video (shared_ptr<const Image> image, bool same, shared_ptr<Subtitle> sub)
{
- if (_no_trim || (_video_in >= _video_start && _video_in <= _video_end)) {
+ if (_video_in >= _video_start && _video_in < _video_end) {
Video (image, same, sub);
}
void
Trimmer::process_audio (shared_ptr<const AudioBuffers> audio)
{
- if (_no_trim) {
- Audio (audio);
- return;
- }
-
int64_t offset = _audio_start - _audio_in;
if (offset > audio->frames()) {
+ /* we haven't reached the start of the untrimmed section yet */
_audio_in += audio->frames ();
return;
}
int64_t _audio_start;
int64_t _audio_end;
int64_t _audio_in;
- bool _no_trim;
};
def build(bld):
for t in ['makedcp', 'servomatic_cli', 'servomatictest']:
obj = bld(features = 'cxx cxxprogram')
- obj.uselib = 'BOOST_THREAD OPENJPEG DCP AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC CXML'
+ obj.uselib = 'BOOST_THREAD OPENJPEG DCP AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC CXML WXWIDGETS'
obj.includes = ['..']
obj.use = ['libdvdomatic']
obj.source = '%s.cc' % t
if not bld.env.DISABLE_GUI:
for t in ['dvdomatic', 'dvdomatic_batch', 'servomatic_gui']:
obj = bld(features = 'cxx cxxprogram')
- obj.uselib = 'DCP OPENJPEG AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC CXML'
+ obj.uselib = 'DCP OPENJPEG AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC CXML WXWIDGETS'
obj.includes = ['..']
obj.use = ['libdvdomatic', 'libdvdomatic-wx']
obj.source = '%s.cc' % t
"""
def configure(conf):
- conf.check_cfg(package = '', path = conf.options.wx_config, args = '--cppflags --cxxflags --libs', uselib_store = 'WXWIDGETS', mandatory = True)
+ conf.check_cfg(msg='Checking for wxWidgets', package='', path=conf.options.wx_config,
+ args='--cppflags --cxxflags --libs',
+ uselib_store='WXWIDGETS', mandatory=True)
+
+ if conf.env.STATIC:
+ # wx-config returns its static libraries as full paths, without -l prefixes, which I think confuses
+ # check_cfg(), so it ends up putting these libraries before even the .cc file when linking.
+ # This hack works around that.
+ conf.env.STLIB_WXWIDGETS = ['wx_gtk2u_xrc-2.9', 'wx_gtk2u_qa-2.9', 'wx_baseu_net-2.9', 'wx_gtk2u_html-2.9',
+ 'wx_gtk2u_adv-2.9', 'wx_gtk2u_core-2.9', 'wx_baseu_xml-2.9', 'wx_baseu-2.9']
+
+ conf.in_msg = 1
+ wx_version = conf.check_cfg(package='', path=conf.options.wx_config, args='--version').strip()
+ conf.im_msg = 0
+ if wx_version != '2.9.4':
+ conf.fatal('wxwidgets version 2.9.4 is required; %s found' % wx_version)
def build(bld):
if bld.env.STATIC:
using boost::shared_ptr;
shared_ptr<const Image> trimmer_test_last_video;
+int trimmer_test_video_frames = 0;
shared_ptr<const AudioBuffers> trimmer_test_last_audio;
void
trimmer_test_video_helper (shared_ptr<const Image> image, bool, shared_ptr<Subtitle>)
{
trimmer_test_last_video = image;
+ ++trimmer_test_video_frames;
}
void
BOOST_CHECK (trimmer_test_last_audio == 0);
}
+BOOST_AUTO_TEST_CASE (trim_end_test)
+{
+ Trimmer trimmer (shared_ptr<Log> (), 0, 75, 200, 48000, 25, 25);
+
+ shared_ptr<SimpleImage> image (new SimpleImage (PIX_FMT_RGB24, libdcp::Size (256, 256), true));
+ trimmer.Video.connect (bind (&trimmer_test_video_helper, _1, _2, _3));
+ trimmer_test_video_frames = 0;
+ for (int i = 0; i < 200; ++i) {
+ trimmer.process_video (image, false, shared_ptr<Subtitle> ());
+ }
+
+ BOOST_CHECK_EQUAL (trimmer_test_video_frames, 125);
+}
import sys
APPNAME = 'dvdomatic'
-VERSION = '0.103pre'
+VERSION = '0.105pre'
def options(opt):
opt.load('compiler_cxx')
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', '-msse', '-mfpmath=sse', '-ffast-math', '-fno-strict-aliasing',
+ 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.env.TARGET_WINDOWS: