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 FFmpegAudioStream (boost::shared_ptr<const cxml::Node>);
20 void as_xml (xmlpp::Node *) const;
22 int channels () const {
23 return av_get_channel_layout_nb_channels (channel_layout);
29 int64_t channel_layout;
32 extern bool operator== (FFmpegAudioStream const & a, FFmpegAudioStream const & b);
34 class FFmpegSubtitleStream
37 FFmpegSubtitleStream (std::string n, int i)
42 FFmpegSubtitleStream (boost::shared_ptr<const cxml::Node>);
44 void as_xml (xmlpp::Node *) const;
50 extern bool operator== (FFmpegSubtitleStream const & a, FFmpegSubtitleStream const & b);
52 class FFmpegContentProperty : public VideoContentProperty
55 static int const SUBTITLE_STREAMS;
56 static int const SUBTITLE_STREAM;
57 static int const AUDIO_STREAMS;
58 static int const AUDIO_STREAM;
61 class FFmpegContent : public VideoContent, public AudioContent, public boost::enable_shared_from_this<FFmpegContent>
64 FFmpegContent (boost::filesystem::path);
65 FFmpegContent (boost::shared_ptr<const cxml::Node>);
67 void examine (boost::shared_ptr<Film>, boost::shared_ptr<Job>, bool);
68 std::string summary () const;
69 void as_xml (xmlpp::Node *) const;
72 int audio_channels () const;
73 ContentAudioFrame audio_length () const;
74 int audio_frame_rate () const;
75 int64_t audio_channel_layout () const;
77 std::vector<FFmpegSubtitleStream> subtitle_streams () const {
78 boost::mutex::scoped_lock lm (_mutex);
79 return _subtitle_streams;
82 boost::optional<FFmpegSubtitleStream> subtitle_stream () const {
83 boost::mutex::scoped_lock lm (_mutex);
84 return _subtitle_stream;
87 std::vector<FFmpegAudioStream> audio_streams () const {
88 boost::mutex::scoped_lock lm (_mutex);
89 return _audio_streams;
92 boost::optional<FFmpegAudioStream> audio_stream () const {
93 boost::mutex::scoped_lock lm (_mutex);
97 void set_subtitle_stream (FFmpegSubtitleStream);
98 void set_audio_stream (FFmpegAudioStream);
101 std::vector<FFmpegSubtitleStream> _subtitle_streams;
102 boost::optional<FFmpegSubtitleStream> _subtitle_stream;
103 std::vector<FFmpegAudioStream> _audio_streams;
104 boost::optional<FFmpegAudioStream> _audio_stream;