X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fsound_asset.h;h=5c230e06848805ab114bc032a734a32983d78d54;hb=1368dfded40e5a774a73e2256e214bcaf4e74866;hp=bd1811b1832a4ec58b5da83c411fc84ccfe61045;hpb=828c320df8c56208a8834971f5d937ce06a4edf2;p=libdcp.git diff --git a/src/sound_asset.h b/src/sound_asset.h index bd1811b1..5c230e06 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,8 +78,8 @@ 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 start_frame Frame in the source to start writing from. + * @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, @@ -52,8 +87,8 @@ public: std::string mxf_name, boost::signals2::signal* progress, int fps, - int length, - int start_frame + int intrinsic_duration, + MXFMetadata const & metadata = MXFMetadata () ); /** Construct a SoundAsset, generating the MXF from some WAV files. @@ -63,8 +98,7 @@ 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 start_frame Frame in the source to start writing from. + * @param intrinsic_duration Length of the whole asset in frames. * @param channels Number of audio channels. */ SoundAsset ( @@ -73,24 +107,32 @@ public: std::string mxf_name, boost::signals2::signal* progress, int fps, - int length, - int start_frame, - 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 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. */ void write_to_cpl (std::ostream& s) 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; @@ -103,13 +145,12 @@ public: } private: - void construct (boost::function 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 */ int _channels; int _sampling_rate; - int _start_frame; }; }