1 #ifndef DVDOMATIC_FFMPEG_CONTENT_H
2 #define DVDOMATIC_FFMPEG_CONTENT_H
4 #include <boost/enable_shared_from_this.hpp>
5 #include "video_content.h"
6 #include "audio_content.h"
8 class FFmpegAudioStream
11 FFmpegAudioStream (std::string n, int i, int f, int64_t c)
18 int channels () const {
19 return av_get_channel_layout_nb_channels (channel_layout);
25 int64_t channel_layout;
28 extern bool operator== (FFmpegAudioStream const & a, FFmpegAudioStream const & b);
30 class FFmpegSubtitleStream
33 FFmpegSubtitleStream (std::string n, int i)
42 extern bool operator== (FFmpegSubtitleStream const & a, FFmpegSubtitleStream const & b);
44 class FFmpegContentProperty : public VideoContentProperty
47 static int const SUBTITLE_STREAMS;
48 static int const SUBTITLE_STREAM;
49 static int const AUDIO_STREAMS;
50 static int const AUDIO_STREAM;
53 class FFmpegContent : public VideoContent, public AudioContent, public boost::enable_shared_from_this<FFmpegContent>
56 FFmpegContent (boost::filesystem::path);
58 void examine (boost::shared_ptr<Film>, boost::shared_ptr<Job>, bool);
59 std::string summary () const;
62 int audio_channels () const;
63 ContentAudioFrame audio_length () const;
64 int audio_frame_rate () const;
65 int64_t audio_channel_layout () const;
67 std::vector<FFmpegSubtitleStream> subtitle_streams () const {
68 boost::mutex::scoped_lock lm (_mutex);
69 return _subtitle_streams;
72 boost::optional<FFmpegSubtitleStream> subtitle_stream () const {
73 boost::mutex::scoped_lock lm (_mutex);
74 return _subtitle_stream;
77 std::vector<FFmpegAudioStream> audio_streams () const {
78 boost::mutex::scoped_lock lm (_mutex);
79 return _audio_streams;
82 boost::optional<FFmpegAudioStream> audio_stream () const {
83 boost::mutex::scoped_lock lm (_mutex);
87 void set_subtitle_stream (FFmpegSubtitleStream);
88 void set_audio_stream (FFmpegAudioStream);
91 std::vector<FFmpegSubtitleStream> _subtitle_streams;
92 boost::optional<FFmpegSubtitleStream> _subtitle_stream;
93 std::vector<FFmpegAudioStream> _audio_streams;
94 boost::optional<FFmpegAudioStream> _audio_stream;