Add basic example; tweak bits and pieces.
authorCarl Hetherington <cth@carlh.net>
Wed, 22 Aug 2012 17:57:05 +0000 (18:57 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 22 Aug 2012 17:57:05 +0000 (18:57 +0100)
13 files changed:
examples/help.j2c [new file with mode: 0644]
examples/help.png [new file with mode: 0644]
examples/make_dcp.cc [new file with mode: 0644]
examples/sine_440_-12dB.wav [new file with mode: 0644]
examples/sine_880_-12dB.wav [new file with mode: 0644]
examples/wscript [new file with mode: 0644]
run/dcpdiff [deleted file]
run/examples/make_dcp [new file with mode: 0755]
run/tools/dcpdiff [new file with mode: 0755]
src/dcp.cc
src/picture_asset.cc
src/sound_asset.cc
wscript

diff --git a/examples/help.j2c b/examples/help.j2c
new file mode 100644 (file)
index 0000000..5ff1afb
Binary files /dev/null and b/examples/help.j2c differ
diff --git a/examples/help.png b/examples/help.png
new file mode 100644 (file)
index 0000000..a192abc
Binary files /dev/null and b/examples/help.png differ
diff --git a/examples/make_dcp.cc b/examples/make_dcp.cc
new file mode 100644 (file)
index 0000000..71e1542
--- /dev/null
@@ -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 (file)
index 0000000..e213d8c
Binary files /dev/null and b/examples/sine_440_-12dB.wav differ
diff --git a/examples/sine_880_-12dB.wav b/examples/sine_880_-12dB.wav
new file mode 100644 (file)
index 0000000..772799b
Binary files /dev/null and b/examples/sine_880_-12dB.wav differ
diff --git a/examples/wscript b/examples/wscript
new file mode 100644 (file)
index 0000000..b6b2865
--- /dev/null
@@ -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/dcpdiff b/run/dcpdiff
deleted file mode 100755 (executable)
index ab21937..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-export LD_LIBRARY_PATH=build/src
-if [ "$1" == "--debug" ]; then
-    shift
-    gdb --args build/tools/dcpdiff "$@"
-elif [ "$1" == "--valgrind" ]; then
-    shift
-    valgrind --tool="memcheck" --leak-check=full --show-reachable=yes build/tools/dcpdiff "$@"
-else
-    build/tools/dcpdiff "$@"
-fi
diff --git a/run/examples/make_dcp b/run/examples/make_dcp
new file mode 100755 (executable)
index 0000000..1649c0c
--- /dev/null
@@ -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/tools/dcpdiff b/run/tools/dcpdiff
new file mode 100755 (executable)
index 0000000..ab21937
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+export LD_LIBRARY_PATH=build/src
+if [ "$1" == "--debug" ]; then
+    shift
+    gdb --args build/tools/dcpdiff "$@"
+elif [ "$1" == "--valgrind" ]; then
+    shift
+    valgrind --tool="memcheck" --leak-check=full --show-reachable=yes build/tools/dcpdiff "$@"
+else
+    build/tools/dcpdiff "$@"
+fi
index 65a6a826dc0c84f786613bf553e8f86a5776c6e2..d3c5367b8e2c27cafd691b86af00c65b30e99fa6 100644 (file)
@@ -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;
index 3fbc09478d48480c54f974b55b2e3dbd3aebfc75..abc902d47f3096413f7713fccc12aaf2776e1aef 100644 (file)
@@ -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())) {
index 75ca3a76db6ead19d9c02fbde0077dfc9ac10b6c..732bb61029f8282492972b4c6575ab74e31ba83c 100644 (file)
@@ -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 5047c627b782cebe9be35e3f31cc97712ec9f13e..62d9e70d236fbc94661ef87608e24ef41e491040 100644 (file)
--- 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/*~'