X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fffmpeg_file_encoder.h;h=1c23d59027c0359f5bb670ad52db2a407e574305;hp=63826e2d5169bbe26298d910132f17955b8d440c;hb=010a6240453384e35d4aa848af00ed58244fe16d;hpb=f41310384889e4cfb6e709d098b316e212d8bf22 diff --git a/src/lib/ffmpeg_file_encoder.h b/src/lib/ffmpeg_file_encoder.h index 63826e2d5..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: @@ -38,15 +43,19 @@ public: int video_frame_rate, int audio_frame_rate, int channels, - boost::shared_ptr log, 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 (); @@ -63,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,7 +87,8 @@ private: dcp::Size _video_frame_size; int _video_frame_rate; int _audio_frame_rate; - boost::shared_ptr _log; + + int64_t _audio_frames; boost::shared_ptr _pending_audio; @@ -87,9 +96,10 @@ private: 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