summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-08-22 18:57:05 +0100
committerCarl Hetherington <cth@carlh.net>2012-08-22 18:57:05 +0100
commit0251d3f2986bf70d4721b7127ca6ddcc9da3b256 (patch)
tree5b8bee96ae9bd53c7e78c264cdf08993f3a28e41
parent422c8a63d2368a2e63aee4c391207e3332d1d4c7 (diff)
Add basic example; tweak bits and pieces.
-rw-r--r--examples/help.j2cbin0 -> 161027 bytes
-rw-r--r--examples/help.pngbin0 -> 49919 bytes
-rw-r--r--examples/make_dcp.cc58
-rw-r--r--examples/sine_440_-12dB.wavbin0 -> 384080 bytes
-rw-r--r--examples/sine_880_-12dB.wavbin0 -> 384080 bytes
-rw-r--r--examples/wscript7
-rwxr-xr-xrun/examples/make_dcp12
-rwxr-xr-xrun/tools/dcpdiff (renamed from run/dcpdiff)0
-rw-r--r--src/dcp.cc6
-rw-r--r--src/picture_asset.cc8
-rw-r--r--src/sound_asset.cc4
-rw-r--r--wscript1
12 files changed, 90 insertions, 6 deletions
diff --git a/examples/help.j2c b/examples/help.j2c
new file mode 100644
index 00000000..5ff1afb0
--- /dev/null
+++ b/examples/help.j2c
Binary files differ
diff --git a/examples/help.png b/examples/help.png
new file mode 100644
index 00000000..a192abc7
--- /dev/null
+++ b/examples/help.png
Binary files differ
diff --git a/examples/make_dcp.cc b/examples/make_dcp.cc
new file mode 100644
index 00000000..71e15427
--- /dev/null
+++ b/examples/make_dcp.cc
@@ -0,0 +1,58 @@
+/*
+ Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <vector>
+#include <string>
+#include <sigc++/sigc++.h>
+#include "dcp.h"
+#include "picture_asset.h"
+#include "sound_asset.h"
+#include "reel.h"
+
+std::string
+video_frame (int /* frame */)
+{
+ return "examples/help.j2c";
+}
+
+int
+main ()
+{
+ libdcp::DCP dcp ("My Film DCP", "My Film", libdcp::FEATURE, 24, 48);
+
+ boost::shared_ptr<libdcp::MonoPictureAsset> picture_asset (
+ new libdcp::MonoPictureAsset (sigc::ptr_fun (&video_frame), "My Film DCP", "video.mxf", 0, 24, 48, 1998, 1080)
+ );
+
+ std::vector<std::string> sound_files;
+ sound_files.push_back ("examples/sine_440_-12dB.wav");
+ sound_files.push_back ("examples/sine_880_-12dB.wav");
+
+ boost::shared_ptr<libdcp::SoundAsset> sound_asset (
+ new libdcp::SoundAsset (sound_files, "My Film DCP", "audio.mxf", 0, 24, 48)
+ );
+
+ dcp.add_reel (
+ boost::shared_ptr<libdcp::Reel> (
+ new libdcp::Reel (picture_asset, sound_asset, boost::shared_ptr<libdcp::SubtitleAsset> ())
+ )
+ );
+
+ dcp.write_xml ();
+}
diff --git a/examples/sine_440_-12dB.wav b/examples/sine_440_-12dB.wav
new file mode 100644
index 00000000..e213d8c8
--- /dev/null
+++ b/examples/sine_440_-12dB.wav
Binary files differ
diff --git a/examples/sine_880_-12dB.wav b/examples/sine_880_-12dB.wav
new file mode 100644
index 00000000..772799bb
--- /dev/null
+++ b/examples/sine_880_-12dB.wav
Binary files differ
diff --git a/examples/wscript b/examples/wscript
new file mode 100644
index 00000000..b6b28653
--- /dev/null
+++ b/examples/wscript
@@ -0,0 +1,7 @@
+def build(bld):
+ obj = bld(features = 'cxx cxxprogram')
+ obj.name = 'examples'
+ obj.use = 'libdcp'
+ obj.source = 'make_dcp.cc'
+ obj.target = 'make_dcp'
+ obj.install_path = ''
diff --git a/run/examples/make_dcp b/run/examples/make_dcp
new file mode 100755
index 00000000..1649c0c6
--- /dev/null
+++ b/run/examples/make_dcp
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+export LD_LIBRARY_PATH=build/src
+if [ "$1" == "--debug" ]; then
+ shift
+ gdb --args build/examples/make_dcp "$@"
+elif [ "$1" == "--valgrind" ]; then
+ shift
+ valgrind --tool="memcheck" --leak-check=full --show-reachable=yes build/examples/make_dcp "$@"
+else
+ build/examples/make_dcp "$@"
+fi
diff --git a/run/dcpdiff b/run/tools/dcpdiff
index ab21937c..ab21937c 100755
--- a/run/dcpdiff
+++ b/run/tools/dcpdiff
diff --git a/src/dcp.cc b/src/dcp.cc
index 65a6a826..d3c5367b 100644
--- a/src/dcp.cc
+++ b/src/dcp.cc
@@ -52,7 +52,7 @@ DCP::DCP (string directory, string name, ContentKind content_kind, int fps, int
, _fps (fps)
, _length (length)
{
-
+ filesystem::create_directories (directory);
}
void
@@ -274,8 +274,8 @@ DCP::DCP (string directory)
p = (*i)->asset_list->main_stereoscopic_picture;
}
- assert (_fps == 0 || _fps == p->frame_rate.numerator);
- _fps = p->frame_rate.numerator;
+ assert (_fps == 0 || _fps == p->edit_rate.numerator);
+ _fps = p->edit_rate.numerator;
_length += p->duration;
shared_ptr<PictureAsset> picture;
diff --git a/src/picture_asset.cc b/src/picture_asset.cc
index 3fbc0947..abc902d4 100644
--- a/src/picture_asset.cc
+++ b/src/picture_asset.cc
@@ -280,6 +280,8 @@ MonoPictureAsset::construct (sigc::slot<string, int> get_path)
for (int i = 0; i < _length; ++i) {
string const path = get_path (i);
+
+ cout << "reading " << path << "\n";
if (ASDCP_FAILURE (j2k_parser.OpenReadFrame (path.c_str(), frame_buffer))) {
throw FileError ("could not open JPEG2000 file for reading", path);
@@ -289,8 +291,10 @@ MonoPictureAsset::construct (sigc::slot<string, int> get_path)
if (ASDCP_FAILURE (mxf_writer.WriteFrame (frame_buffer, 0, 0))) {
throw MiscError ("error in writing video MXF");
}
-
- (*_progress) (0.5 * float (i) / _length);
+
+ if (_progress) {
+ (*_progress) (0.5 * float (i) / _length);
+ }
}
if (ASDCP_FAILURE (mxf_writer.Finalize())) {
diff --git a/src/sound_asset.cc b/src/sound_asset.cc
index 75ca3a76..732bb610 100644
--- a/src/sound_asset.cc
+++ b/src/sound_asset.cc
@@ -170,7 +170,9 @@ SoundAsset::construct (sigc::slot<string, Channel> get_path)
throw MiscError ("could not write audio MXF frame");
}
- (*_progress) (0.5 * float (i) / _length);
+ if (_progress) {
+ (*_progress) (0.5 * float (i) / _length);
+ }
}
if (ASDCP_FAILURE (mxf_writer.Finalize())) {
diff --git a/wscript b/wscript
index 5047c627..62d9e70d 100644
--- a/wscript
+++ b/wscript
@@ -70,6 +70,7 @@ def build(bld):
bld.recurse('tools')
bld.recurse('test')
bld.recurse('asdcplib')
+ bld.recurse('examples')
def dist(ctx):
ctx.excl = 'TODO core *~ .git build .waf* .lock* doc/*~ src/*~ test/ref/*~'