summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2026-01-17 21:05:17 +0100
committerCarl Hetherington <cth@carlh.net>2026-01-31 16:47:23 +0100
commitdb15020d516c2d2ea36c10261a22a7da9c4a60ed (patch)
tree00472dc6379bf5377ca5799a5bdb16fc8125a715
parentff869661d7632bc40aec17d1d42e31f18bd0c40b (diff)
Allow building without MPEG2 transcoding, and so without FFmpeg.
-rw-r--r--cscript9
-rw-r--r--src/mono_mpeg2_picture_asset.cc6
-rw-r--r--src/wscript13
-rw-r--r--test/wscript8
-rw-r--r--wscript10
5 files changed, 37 insertions, 9 deletions
diff --git a/cscript b/cscript
index 1d75abdf..e8b425af 100644
--- a/cscript
+++ b/cscript
@@ -34,6 +34,10 @@
import os
import shutil
+
+option_defaults = { "mpeg2": True }
+
+
def build_with_cpp17(target):
return (
target.platform.startswith('osx') or
@@ -54,7 +58,8 @@ def dependencies(target, options, for_package):
if target.platform != 'linux' or target.distro != 'arch' or not for_package:
# Use distro-provided FFmpeg and openjpeg on Arch (except when packaging), otherwise our own
- deps.append(('ffmpeg', '693b3a8274ce407d0741d320849dc9433c748262', ffmpeg_options))
+ if options['mpeg2']:
+ deps.append(('ffmpeg', '693b3a8274ce407d0741d320849dc9433c748262', ffmpeg_options))
deps.append(('openjpeg', 'ad8edaacd54a862940d0a77c41ecda5858b54d6e'))
return deps
@@ -68,6 +73,8 @@ def build(target, options, for_package, version):
target.command('sudo pacman --noconfirm -U libdcp*.zst')
else:
cmd = './waf configure --disable-examples --disable-dumpimage --disable-benchmarks --prefix=%s' % target.directory
+ if not options['mpeg2']:
+ cmd += ' --disable-mpeg2-transcode'
if target.platform == 'linux':
cmd += ' --static'
if target.distro != 'ubuntu' or not target.version in ('16.04', '22.04'):
diff --git a/src/mono_mpeg2_picture_asset.cc b/src/mono_mpeg2_picture_asset.cc
index 9a879f0b..277bed2c 100644
--- a/src/mono_mpeg2_picture_asset.cc
+++ b/src/mono_mpeg2_picture_asset.cc
@@ -36,7 +36,9 @@
#include "mono_mpeg2_picture_asset.h"
#include "mono_mpeg2_picture_asset_reader.h"
#include "mono_mpeg2_picture_asset_writer.h"
+#ifdef LIBDCP_MPEG2_TRANSCODE
#include "mpeg2_transcode.h"
+#endif
#include <asdcp/AS_DCP.h>
@@ -90,6 +92,7 @@ MonoMPEG2PictureAsset::start_write(boost::filesystem::path file, Behaviour behav
bool
MonoMPEG2PictureAsset::can_be_read() const
{
+#ifdef LIBDCP_MPEG2_TRANSCODE
if (!MXF::can_be_read()) {
return false;
}
@@ -106,5 +109,8 @@ MonoMPEG2PictureAsset::can_be_read() const
}
return true;
+#else
+ return false;
+#endif
}
diff --git a/src/wscript b/src/wscript
index 9b59b602..4fb4c359 100644
--- a/src/wscript
+++ b/src/wscript
@@ -58,7 +58,6 @@ def build(bld):
exceptions.cc
file.cc
filesystem.cc
- ffmpeg_image.cc
font_asset.cc
fsk.cc
gamma_transfer_function.cc
@@ -86,7 +85,6 @@ def build(bld):
mono_mpeg2_picture_frame.cc
mpeg2_picture_asset.cc
mpeg2_picture_asset_writer.cc
- mpeg2_transcode.cc
mxf.cc
name_format.cc
object.cc
@@ -181,7 +179,6 @@ def build(bld):
identity_transfer_function.h
interop_load_font_node.h
interop_text_asset.h
- ffmpeg_image.h
j2k_picture_asset.h
j2k_picture_asset_writer.h
j2k_transcode.h
@@ -204,7 +201,6 @@ def build(bld):
mono_mpeg2_picture_asset_writer.h
mono_mpeg2_picture_frame.h
mpeg2_picture_asset.h
- mpeg2_transcode.h
mxf.h
name_format.h
object.h
@@ -264,6 +260,15 @@ def build(bld):
warnings.h
"""
+ if not bld.env.DISABLE_MPEG2_TRANSCODE:
+ source += """
+ ffmpeg_image.cc
+ mpeg2_transcode.cc
+ """
+ headers += """
+ ffmpeg_image.h
+ mpeg2_transcode.h
+ """
uselib = 'BOOST_FILESYSTEM BOOST_SIGNALS2 BOOST_DATETIME OPENSSL SIGC++ LIBXML++ OPENJPEG CXML XMLSEC1 ASDCPLIB_DCPOMATIC XERCES AVCODEC AVUTIL FMT FAST_FLOAT HARU'
diff --git a/test/wscript b/test/wscript
index 3eaef516..da0b6172 100644
--- a/test/wscript
+++ b/test/wscript
@@ -99,8 +99,6 @@ def build(bld):
make_digest_test.cc
markers_test.cc
mca_test.cc
- mono_mpeg2_picture_read_test.cc
- mono_mpeg2_picture_write_test.cc
kdm_test.cc
key_test.cc
language_tag_test.cc
@@ -130,6 +128,12 @@ def build(bld):
obj.target = 'tests'
obj.install_path = ''
+ if bld.env.LIBDCP_MPEG2_TRANSCODE:
+ obj.source += """
+ mono_mpeg2_picture_read_test.cc
+ mono_mpeg2_picture_write_test.cc
+ """
+
obj = bld(features='cxx cxxprogram')
obj.name = 'subs_in_out'
obj.uselib = uselib
diff --git a/wscript b/wscript
index 5d7a5aa8..146ff1fe 100644
--- a/wscript
+++ b/wscript
@@ -69,6 +69,7 @@ def options(opt):
opt.add_option('--enable-openmp', action='store_true', default=False, help='enable use of OpenMP')
opt.add_option('--openmp', default='gomp', help='specify OpenMP Library to use: omp, gomp (default), iomp')
opt.add_option('--c++17', action='store_true', default=False, help='build with C++17 and libxml++-4.0')
+ opt.add_option('--disable-mpeg2-transcode', action='store_true', default=False, help='build without support for MPEG2 transcoding (then ffmpeg is not required)')
def configure(conf):
conf.load('compiler_cxx')
@@ -98,6 +99,7 @@ def configure(conf):
conf.env.DISABLE_BENCHMARKS = conf.options.disable_benchmarks
conf.env.DISABLE_EXAMPLES = conf.options.disable_examples
conf.env.DISABLE_DUMPIMAGE = conf.options.disable_dumpimage
+ conf.env.DISABLE_MPEG2_TRANSCODE = conf.options.disable_mpeg2_transcode
conf.env.STATIC = conf.options.static
conf.env.API_VERSION = API_VERSION
@@ -132,6 +134,9 @@ def configure(conf):
if conf.env.TARGET_LINUX:
conf.check(lib='dl', uselib_store='DL', msg='Checking for library dl')
+ if not conf.env.DISABLE_MPEG2_TRANSCODE:
+ conf.env.append_value('CXXFLAGS', '-DLIBDCP_MPEG2_TRANSCODE')
+
conf.check_cfg(package='openssl', args='--cflags --libs', uselib_store='OPENSSL', mandatory=True)
conf.check_cxx(fragment="""
#include <openssl/x509.h>
@@ -280,8 +285,9 @@ def configure(conf):
lib=boost_libs('date_time'),
uselib_store='BOOST_DATETIME')
- conf.check_cfg(package='libavcodec', args='--cflags --libs', uselib_store='AVCODEC', mandatory=True)
- conf.check_cfg(package='libavutil', args='--cflags --libs', uselib_store='AVUTIL', mandatory=True)
+ if not conf.options.disable_mpeg2_transcode:
+ conf.check_cfg(package='libavcodec', args='--cflags --libs', uselib_store='AVCODEC', mandatory=True)
+ conf.check_cfg(package='libavutil', args='--cflags --libs', uselib_store='AVUTIL', mandatory=True)
conf.check_cfg(package='fmt', args='--cflags --libs', uselib_store='FMT', mandatory=True)
conf.check_cxx(header_name="fast_float/fast_float.h", uselib_store='FAST_FLOAT', mandatory=True)