#include <libavformat/avformat.h>
}
+
+class ExportAudioStream;
+
+
class FFmpegFileEncoder
{
public:
int audio_frame_rate,
int channels,
ExportFormat,
+ bool audio_stream_per_channel,
int x264_crf,
boost::filesystem::path output
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- , boost::optional<dcp::Key> key
- , boost::optional<std::string> id
-#endif
);
- void video (boost::shared_ptr<PlayerVideo>, dcpomatic::DCPTime);
- void audio (boost::shared_ptr<AudioBuffers>);
+ ~FFmpegFileEncoder ();
+
+ void video (std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime);
+ void audio (std::shared_ptr<AudioBuffers>);
void subtitle (PlayerText, dcpomatic::DCPTimePeriod);
void flush ();
AVCodec* _video_codec;
AVCodecContext* _video_codec_context;
- AVCodec* _audio_codec;
- AVCodecContext* _audio_codec_context;
+ std::vector<std::shared_ptr<ExportAudioStream> > _audio_streams;
+ bool _audio_stream_per_channel;
AVFormatContext* _format_context;
AVStream* _video_stream;
- AVStream* _audio_stream;
AVPixelFormat _pixel_format;
AVSampleFormat _sample_format;
AVDictionary* _video_options;
int _video_frame_rate;
int _audio_frame_rate;
- boost::shared_ptr<AudioBuffers> _pending_audio;
+ int64_t _audio_frames;
+
+ std::shared_ptr<AudioBuffers> _pending_audio;
/** Store of shared_ptr<Image> to keep them alive whilst raw pointers into
their data have been passed to FFmpeg.
*/
- std::map<uint8_t*, boost::shared_ptr<const Image> > _pending_images;
+ std::map<uint8_t*, std::shared_ptr<const Image> > _pending_images;
+ boost::mutex _pending_images_mutex;
static int _video_stream_index;
- static int _audio_stream_index;
+ static int _audio_stream_index_base;
};
#endif