X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fsound_asset.h;h=1e3553a0f48338af33fcf1fd08bbdf0a79c63f91;hb=27e74ac5cf717233914fd017eb9ca67ee7c4af96;hp=a19d67268241fccddd40d7a12f5e5a44e1bcb0b7;hpb=8fca5499789ae1deb2dbcad8d3501a8f42fb95f0;p=libdcp.git diff --git a/src/sound_asset.h b/src/sound_asset.h index a19d6726..1e3553a0 100644 --- a/src/sound_asset.h +++ b/src/sound_asset.h @@ -26,11 +26,46 @@ #include "mxf_asset.h" #include "types.h" +#include "metadata.h" namespace libdcp { -class SoundFrame; +class SoundFrame; +class SoundAsset; + +class SoundAssetWriter +{ +public: + ~SoundAssetWriter (); + + void write (float const * const *, int); + void finalize (); + +private: + friend class SoundAsset; + + SoundAssetWriter (SoundAsset *, MXFMetadata const &); + + /* no copy construction */ + SoundAssetWriter (SoundAssetWriter const &); + SoundAssetWriter& operator= (SoundAssetWriter const &); + + void write_current_frame (); + + /* do this with an opaque pointer so we don't have to include + ASDCP headers + */ + + struct ASDCPState; + boost::shared_ptr _state; + + SoundAsset* _asset; + bool _finalized; + int _frames_written; + int _frame_buffer_offset; + MXFMetadata _metadata; +}; /** @brief An asset made up of WAV files */ class SoundAsset : public MXFAsset @@ -43,15 +78,17 @@ public: * @param mxf_name Name of MXF file to create. * @param progress Signal to inform of progress. * @param fps Frames per second. - * @param length Length in frames. + * @param intrinsic_duration Length of the whole asset in frames. + * Note that this is different to entry_point in that the asset will contain no data before start_frame. */ SoundAsset ( std::vector const & files, std::string directory, std::string mxf_name, - sigc::signal1* progress, + boost::signals2::signal* progress, int fps, - int length + int intrinsic_duration, + MXFMetadata const & metadata = MXFMetadata () ); /** Construct a SoundAsset, generating the MXF from some WAV files. @@ -61,33 +98,41 @@ public: * @param mxf_name Name of MXF file to create. * @param progress Signal to inform of progress. * @param fps Frames per second. - * @param length Length in frames. + * @param intrinsic_duration Length of the whole asset in frames. * @param channels Number of audio channels. */ SoundAsset ( - sigc::slot get_path, + boost::function get_path, std::string directory, std::string mxf_name, - sigc::signal1* progress, + boost::signals2::signal* progress, int fps, - int length, - int channels + int intrinsic_duration, + int channels, + MXFMetadata const & metadata = MXFMetadata () + ); + + SoundAsset ( + std::string directory, + std::string mxf_name ); SoundAsset ( std::string directory, std::string mxf_name, int fps, - int entry_point, - int length + int channels, + int sampling_rate ); + + boost::shared_ptr start_write (MXFMetadata const & metadata = MXFMetadata ()); - /** Write details of this asset to a CPL stream. - * @param s Stream. + /** Write details of this asset to a CPL XML node. + * @param node Node. */ - void write_to_cpl (std::ostream& s) const; + void write_to_cpl (xmlpp::Node* node) const; - bool equals (boost::shared_ptr other, EqualityOptions opt, std::list& notes) const; + bool equals (boost::shared_ptr other, EqualityOptions opt, boost::function note) const; boost::shared_ptr get_frame (int n) const; @@ -100,7 +145,7 @@ public: } private: - void construct (sigc::slot get_path); + void construct (boost::function get_path, MXFMetadata const &); std::string path_from_channel (Channel channel, std::vector const & files); /** Number of channels in the asset */