X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fffmpeg_file_encoder.h;h=1c23d59027c0359f5bb670ad52db2a407e574305;hp=8b9d0b67c2a7269af994690ca52ede24a6880bc2;hb=010a6240453384e35d4aa848af00ed58244fe16d;hpb=ad1ef39eda58b3a919ea3b7084401a0439409ec6 diff --git a/src/lib/ffmpeg_file_encoder.h b/src/lib/ffmpeg_file_encoder.h index 8b9d0b67c..1c23d5902 100644 --- a/src/lib/ffmpeg_file_encoder.h +++ b/src/lib/ffmpeg_file_encoder.h @@ -25,11 +25,16 @@ #include "event_history.h" #include "audio_mapping.h" #include "log.h" +#include extern "C" { #include #include } + +class ExportAudioStream; + + class FFmpegFileEncoder { public: @@ -39,13 +44,18 @@ 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 key + , boost::optional id +#endif ); - void video (boost::shared_ptr, DCPTime); + void video (boost::shared_ptr, dcpomatic::DCPTime); void audio (boost::shared_ptr); - void subtitle (PlayerText, DCPTimePeriod); + void subtitle (PlayerText, dcpomatic::DCPTimePeriod); void flush (); @@ -62,11 +72,10 @@ private: AVCodec* _video_codec; AVCodecContext* _video_codec_context; - AVCodec* _audio_codec; - AVCodecContext* _audio_codec_context; + std::vector > _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; @@ -79,15 +88,18 @@ private: int _video_frame_rate; int _audio_frame_rate; + int64_t _audio_frames; + boost::shared_ptr _pending_audio; /** Store of shared_ptr to keep them alive whilst raw pointers into their data have been passed to FFmpeg. */ std::map > _pending_images; + boost::mutex _pending_images_mutex; static int _video_stream_index; - static int _audio_stream_index; + static int _audio_stream_index_base; }; #endif