From 0251d3f2986bf70d4721b7127ca6ddcc9da3b256 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 22 Aug 2012 18:57:05 +0100 Subject: Add basic example; tweak bits and pieces. --- examples/help.j2c | Bin 0 -> 161027 bytes examples/help.png | Bin 0 -> 49919 bytes examples/make_dcp.cc | 58 ++++++++++++++++++++++++++++++++++++++++++++ examples/sine_440_-12dB.wav | Bin 0 -> 384080 bytes examples/sine_880_-12dB.wav | Bin 0 -> 384080 bytes examples/wscript | 7 ++++++ run/dcpdiff | 12 --------- run/examples/make_dcp | 12 +++++++++ run/tools/dcpdiff | 12 +++++++++ src/dcp.cc | 6 ++--- src/picture_asset.cc | 8 ++++-- src/sound_asset.cc | 4 ++- wscript | 1 + 13 files changed, 102 insertions(+), 18 deletions(-) create mode 100644 examples/help.j2c create mode 100644 examples/help.png create mode 100644 examples/make_dcp.cc create mode 100644 examples/sine_440_-12dB.wav create mode 100644 examples/sine_880_-12dB.wav create mode 100644 examples/wscript delete mode 100755 run/dcpdiff create mode 100755 run/examples/make_dcp create mode 100755 run/tools/dcpdiff diff --git a/examples/help.j2c b/examples/help.j2c new file mode 100644 index 00000000..5ff1afb0 Binary files /dev/null and b/examples/help.j2c differ diff --git a/examples/help.png b/examples/help.png new file mode 100644 index 00000000..a192abc7 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 index 00000000..71e15427 --- /dev/null +++ b/examples/make_dcp.cc @@ -0,0 +1,58 @@ +/* + Copyright (C) 2012 Carl Hetherington + + 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 +#include +#include +#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 picture_asset ( + new libdcp::MonoPictureAsset (sigc::ptr_fun (&video_frame), "My Film DCP", "video.mxf", 0, 24, 48, 1998, 1080) + ); + + std::vector sound_files; + sound_files.push_back ("examples/sine_440_-12dB.wav"); + sound_files.push_back ("examples/sine_880_-12dB.wav"); + + boost::shared_ptr sound_asset ( + new libdcp::SoundAsset (sound_files, "My Film DCP", "audio.mxf", 0, 24, 48) + ); + + dcp.add_reel ( + boost::shared_ptr ( + new libdcp::Reel (picture_asset, sound_asset, boost::shared_ptr ()) + ) + ); + + dcp.write_xml (); +} diff --git a/examples/sine_440_-12dB.wav b/examples/sine_440_-12dB.wav new file mode 100644 index 00000000..e213d8c8 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 index 00000000..772799bb Binary files /dev/null and b/examples/sine_880_-12dB.wav 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/dcpdiff b/run/dcpdiff deleted file mode 100755 index ab21937c..00000000 --- a/run/dcpdiff +++ /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 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/tools/dcpdiff b/run/tools/dcpdiff new file mode 100755 index 00000000..ab21937c --- /dev/null +++ b/run/tools/dcpdiff @@ -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 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 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 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 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 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/*~' -- cgit v1.2.3