X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fffmpeg.h;h=6dd9da0dc4efb9f571ec76629ed7c6953ebd2d6d;hb=341f0a81591ab83b96069d6e6bb70cbf8e6cf878;hp=dcafe17f759237945fc16f015d9111eb820b522f;hpb=f1bf21a9c2581591ab80bfc997a22b93046f8c56;p=dcpomatic.git diff --git a/src/lib/ffmpeg.h b/src/lib/ffmpeg.h index dcafe17f7..6dd9da0dc 100644 --- a/src/lib/ffmpeg.h +++ b/src/lib/ffmpeg.h @@ -17,12 +17,16 @@ */ -#include -#include -#include +#ifndef DCPOMATIC_FFMPEG_H +#define DCPOMATIC_FFMPEG_H + extern "C" { #include } +#include "file_group.h" +#include +#include +#include struct AVFilterGraph; struct AVCodecContext; @@ -32,6 +36,7 @@ struct AVFrame; struct AVBufferContext; struct AVCodec; struct AVStream; +struct AVIOContext; class FFmpegContent; @@ -45,17 +50,27 @@ public: return _ffmpeg_content; } + int avio_read (uint8_t *, int); + int64_t avio_seek (int64_t, int); + protected: + AVCodecContext* video_codec_context () const; + AVCodecContext* audio_codec_context () const; + AVCodecContext* subtitle_codec_context () const; + boost::shared_ptr _ffmpeg_content; + + uint8_t* _avio_buffer; + int _avio_buffer_size; + AVIOContext* _avio_context; + FileGroup _file_group; + AVFormatContext* _format_context; AVPacket _packet; AVFrame* _frame; - int _video_stream; - 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 + /** Index of video stream within AVFormatContext */ + int _video_stream; /* It would appear (though not completely verified) that one must have a mutex around calls to avcodec_open* and avcodec_close... and here @@ -65,6 +80,7 @@ protected: private: void setup_general (); - void setup_video (); - void setup_audio (); + void setup_decoders (); }; + +#endif