From f1bf21a9c2581591ab80bfc997a22b93046f8c56 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 21 Jun 2013 17:38:50 +0100 Subject: Split examiner parts off decoder. --- src/lib/ffmpeg_decoder.h | 72 ++++-------------------------------------------- 1 file changed, 5 insertions(+), 67 deletions(-) (limited to 'src/lib/ffmpeg_decoder.h') diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h index be178dbfb..331d9be70 100644 --- a/src/lib/ffmpeg_decoder.h +++ b/src/lib/ffmpeg_decoder.h @@ -35,33 +35,19 @@ extern "C" { #include "decoder.h" #include "video_decoder.h" #include "audio_decoder.h" +#include "ffmpeg.h" -struct AVFilterGraph; -struct AVCodecContext; -struct AVFilterContext; -struct AVFormatContext; -struct AVFrame; -struct AVBufferContext; -struct AVCodec; -struct AVStream; -class Job; -class Options; -class Image; -class Log; -class FFmpegContent; class Film; /** @class FFmpegDecoder * @brief A decoder using FFmpeg to decode content. */ -class FFmpegDecoder : public VideoDecoder, public AudioDecoder +class FFmpegDecoder : public VideoDecoder, public AudioDecoder, public FFmpeg { public: FFmpegDecoder (boost::shared_ptr, boost::shared_ptr, bool video, bool audio); ~FFmpegDecoder (); - /* Decoder */ - void pass (); void seek (Time); void seek_back (); @@ -69,78 +55,30 @@ public: Time position () const; bool done () const; - /* VideoDecoder */ - - float video_frame_rate () const; - libdcp::Size video_size () const; - ContentVideoFrame video_length () const; - - /* FFmpegDecoder */ - - std::vector > subtitle_streams () const { - return _subtitle_streams; - } - - std::vector > audio_streams () const { - return _audio_streams; - } - - boost::shared_ptr ffmpeg_content () const { - return _ffmpeg_content; - } - private: /* No copy construction */ FFmpegDecoder (FFmpegDecoder const &); FFmpegDecoder& operator= (FFmpegDecoder const &); - PixelFormat pixel_format () const; + void setup_subtitle (); + AVSampleFormat audio_sample_format () const; int bytes_per_audio_sample () const; void do_seek (Time, bool, bool); - void setup_general (); - void setup_video (); - void setup_audio (); - void setup_subtitle (); - bool decode_video_packet (); void decode_audio_packet (); void maybe_add_subtitle (); boost::shared_ptr deinterleave_audio (uint8_t** data, int size); - std::string stream_name (AVStream* s) const; - - boost::shared_ptr _ffmpeg_content; - - AVFormatContext* _format_context; - int _video_stream; - - AVFrame* _frame; - - AVCodecContext* _video_codec_context; - AVCodec* _video_codec; - AVCodecContext* _audio_codec_context; ///< may be 0 if there is no audio - AVCodec* _audio_codec; ///< may be 0 if there is no audio AVCodecContext* _subtitle_codec_context; ///< may be 0 if there is no subtitle AVCodec* _subtitle_codec; ///< may be 0 if there is no subtitle - - AVPacket _packet; - + std::list > _filter_graphs; boost::mutex _filter_graphs_mutex; - std::vector > _subtitle_streams; - std::vector > _audio_streams; - bool _decode_video; bool _decode_audio; - - /* It would appear (though not completely verified) that one must have - a mutex around calls to avcodec_open* and avcodec_close... and here - it is. - */ - static boost::mutex _mutex; }; -- cgit v1.2.3