X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fffmpeg_decoder.h;h=26b5d69792f42084d8b72cbad9c6cac5415e6282;hb=44b57d623dec97a3f9955082f0b8a7a8d27b7518;hp=18c2e2aeb316fa937a253a5dbc70a9bdd7535f96;hpb=6fd70950e721181920603d90ad52ed58883f2806;p=dcpomatic.git diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h index 18c2e2aeb..26b5d6979 100644 --- a/src/lib/ffmpeg_decoder.h +++ b/src/lib/ffmpeg_decoder.h @@ -25,6 +25,7 @@ #include #include #include +#include extern "C" { #include #include @@ -39,6 +40,7 @@ struct AVFormatContext; struct AVFrame; struct AVBufferContext; struct AVCodec; +struct AVStream; class Job; class FilmState; class Options; @@ -55,14 +57,16 @@ public: ~FFmpegDecoder (); /* Methods to query our input video */ - int length_in_frames () const; - int decoding_frames () const; float frames_per_second () const; Size native_size () const; int audio_channels () const; int audio_sample_rate () const; AVSampleFormat audio_sample_format () const; int64_t audio_channel_layout () const; + bool has_subtitles () const; + + std::vector audio_streams () const; + std::vector subtitle_streams () const; private: @@ -72,7 +76,6 @@ private: int time_base_denominator () const; int sample_aspect_ratio_numerator () const; int sample_aspect_ratio_denominator () const; - void overlay (boost::shared_ptr image) const; void setup_general (); void setup_video (); @@ -81,11 +84,16 @@ private: void maybe_add_subtitle (); + std::string stream_name (AVStream* s) const; + AVFormatContext* _format_context; int _video_stream; int _audio_stream; ///< may be < 0 if there is no audio int _subtitle_stream; ///< may be < 0 if there is no subtitle AVFrame* _frame; + + std::vector _audio_streams; + std::vector _subtitle_streams; AVCodecContext* _video_codec_context; AVCodec* _video_codec; @@ -95,6 +103,7 @@ private: AVCodec* _subtitle_codec; ///< may be 0 if there is no subtitle AVPacket _packet; - AVSubtitle _subtitle; - bool _have_subtitle; + + boost::optional _first_video; + boost::optional _first_audio; };