summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_decoder.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-06-21 17:38:50 +0100
committerCarl Hetherington <cth@carlh.net>2013-06-21 17:38:50 +0100
commitf1bf21a9c2581591ab80bfc997a22b93046f8c56 (patch)
tree7c0db304d310e656fcaf4766a6c3b27e98df25b1 /src/lib/ffmpeg_decoder.h
parent01791aac0b11e9f296cd31a7803e287203bd8355 (diff)
Split examiner parts off decoder.
Diffstat (limited to 'src/lib/ffmpeg_decoder.h')
-rw-r--r--src/lib/ffmpeg_decoder.h72
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;
};