diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-06-21 17:38:50 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-06-21 17:38:50 +0100 |
| commit | f1bf21a9c2581591ab80bfc997a22b93046f8c56 (patch) | |
| tree | 7c0db304d310e656fcaf4766a6c3b27e98df25b1 /src/lib/ffmpeg_decoder.h | |
| parent | 01791aac0b11e9f296cd31a7803e287203bd8355 (diff) | |
Split examiner parts off decoder.
Diffstat (limited to 'src/lib/ffmpeg_decoder.h')
| -rw-r--r-- | src/lib/ffmpeg_decoder.h | 72 |
1 files changed, 5 insertions, 67 deletions
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<const Film>, boost::shared_ptr<const FFmpegContent>, 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<boost::shared_ptr<FFmpegSubtitleStream> > subtitle_streams () const { - return _subtitle_streams; - } - - std::vector<boost::shared_ptr<FFmpegAudioStream> > audio_streams () const { - return _audio_streams; - } - - boost::shared_ptr<const FFmpegContent> 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<AudioBuffers> deinterleave_audio (uint8_t** data, int size); - std::string stream_name (AVStream* s) const; - - boost::shared_ptr<const FFmpegContent> _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<boost::shared_ptr<FilterGraph> > _filter_graphs; boost::mutex _filter_graphs_mutex; - std::vector<boost::shared_ptr<FFmpegSubtitleStream> > _subtitle_streams; - std::vector<boost::shared_ptr<FFmpegAudioStream> > _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; }; |
