X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fxinestream.h;h=01cc3e05c3533c1baddde06c6a4dc4998a6aee21;hb=60cd42dc4fdb1fdfa438402956e7342a01fc8677;hp=0b9bbd69462cde16370502a63fe9d4ce6e31611c;hpb=ed777426d367df15a67082f5dae0911c21472b5f;p=xinema.git diff --git a/source/xinestream.h b/source/xinestream.h index 0b9bbd6..01cc3e0 100644 --- a/source/xinestream.h +++ b/source/xinestream.h @@ -2,7 +2,10 @@ #define XINESTREAM_H_ #include +#include #include +#include +#include #include class XineEngine; @@ -10,30 +13,90 @@ class XineEngine; class XineStream { public: + enum State + { + STOPPED, + PAUSED, + PLAYING + }; + + enum + { + OFF = -1 + }; + + sigc::signal signal_state_changed; + sigc::signal signal_title_changed; sigc::signal signal_duration_changed; sigc::signal signal_position_changed; + sigc::signal signal_video_size_changed; + sigc::signal signal_framerate_changed; + sigc::signal signal_codecs_changed; + sigc::signal signal_channels_changed; + sigc::signal signal_current_audio_channel_changed; + sigc::signal signal_current_spu_channel_changed; + sigc::signal signal_finished; private: XineEngine &engine; + std::string filename; xine_stream_t *stream; xine_event_queue_t *queue; + Msp::Mutex mutex; + State state; + std::string title; Msp::Time::TimeDelta duration; Msp::Time::TimeDelta position; + unsigned video_width; + unsigned video_height; + float framerate; + std::string video_codec; + std::string audio_codec; + std::vector audio_channels; + std::vector spu_channels; + int current_audio; + int current_spu; + bool channels_changed; public: XineStream(XineEngine &, const std::string &); ~XineStream(); + Msp::Mutex &get_mutex() { return mutex; } + State get_state() const { return state; } const Msp::Time::TimeDelta &get_duration() const { return duration; } const Msp::Time::TimeDelta &get_position() const { return position; } - std::string get_title() const; + const std::string &get_title() const; + unsigned get_video_width() const { return video_width; } + unsigned get_video_height() const { return video_height; } + float get_framerate() const { return framerate; } + const std::string &get_video_codec() const { return video_codec; } + const std::string &get_audio_codec() const { return audio_codec; } void play(); + void seek(const Msp::Time::TimeDelta &); + void pause(); void stop(); +private: + void set_state(State); + +public: + const std::vector &get_audio_channels() const { return audio_channels; } + const std::vector &get_spu_channels() const { return spu_channels; } + void select_audio_channel(int); + void select_spu_channel(int); + int get_current_audio_channel() const { return current_audio; } + int get_current_spu_channel() const { return current_spu; } void tick(); private: + static bool equals(const std::string &, const char *); + void update_info(); + void update_channels(); void handle_event(const xine_event_t &); }; +void operator<<(Msp::LexicalConverter &, XineStream::State); +void operator>>(const Msp::LexicalConverter &, XineStream::State &); + #endif