X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fskins2%2Fsrc%2Fvlcproc.hpp;h=64c79420ef6bba37b7c78c0ca2f681d8c5c5156c;hb=50200d70d0dc4497191e363ac06590bb5cd077c8;hp=94bf422b0a8219adad80ea8c0efdc2dfdcc95e6a;hpb=54d75f772ba75e1f318bdeecc874f02b9b06f840;p=vlc diff --git a/modules/gui/skins2/src/vlcproc.hpp b/modules/gui/skins2/src/vlcproc.hpp index 94bf422b0a..64c79420ef 100644 --- a/modules/gui/skins2/src/vlcproc.hpp +++ b/modules/gui/skins2/src/vlcproc.hpp @@ -5,7 +5,7 @@ * $Id$ * * Authors: Cyril Deguet - * Olivier Teuli�e + * Olivier Teulière * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,9 +17,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef VLCPROC_HPP @@ -27,199 +27,204 @@ #include +#include +#include +#include #include "../vars/equalizer.hpp" -#include "../vars/playlist.hpp" #include "../vars/playtree.hpp" #include "../vars/time.hpp" #include "../vars/volume.hpp" #include "../utils/position.hpp" #include "../utils/var_text.hpp" +#include "../utils/var_string.hpp" #include "../commands/cmd_generic.hpp" +#include "../controls/ctrl_video.hpp" class OSTimer; class VarBool; struct aout_instance_t; +struct vout_window_t; /// Singleton object handling VLC internal state and playlist class VlcProc: public SkinObject { - public: - /// Get the instance of VlcProc - /// Returns NULL if the initialization of the object failed - static VlcProc *instance( intf_thread_t *pIntf ); - - /// Delete the instance of VlcProc - static void destroy( intf_thread_t *pIntf ); - - /// Getter for the playlist variable - Playlist &getPlaylistVar() { return *((Playlist*)m_cPlaylist.get()); } - - /// Getter for the playtree variable - Playtree &getPlaytreeVar() { return *((Playtree*)m_cPlaytree.get()); } - - /// Getter for the time variable - StreamTime &getTimeVar() { return *((StreamTime*)(m_cVarTime.get())); } - - /// Getter for the volume variable - Volume &getVolumeVar() { return *((Volume*)(m_cVarVolume.get())); } - - /// Getter for the stream name variable - VarText &getStreamNameVar() - { return *((VarText*)(m_cVarStreamName.get())); } - - /// Getter for the stream URI variable - VarText &getStreamURIVar() - { return *((VarText*)(m_cVarStreamURI.get())); } - - /// Getter for the vout size variable - VarBox &getVoutSizeVar() { return m_varVoutSize; } - - /// Set the vout window handle - void registerVoutWindow( void *pVoutWindow ); - - /// Unset the vout window handle - void unregisterVoutWindow( void *pVoutWindow ); - - /// Indicate whether the embedded video output is currently used - bool isVoutUsed() const { return m_pVout != NULL; } - - /// If an embedded video output is used, drop it (i.e. tell it to stop - /// using our window handle) - void dropVout(); - - protected: - // Protected because it is a singleton - VlcProc( intf_thread_t *pIntf ); - virtual ~VlcProc(); - - private: - /// Timer to call manage() regularly (via doManage()) - OSTimer *m_pTimer; - /// Playlist variable - VariablePtr m_cPlaylist; - /// Playtree variable FIXME - VariablePtr m_cPlaytree; - VariablePtr m_cVarRandom; - VariablePtr m_cVarLoop; - VariablePtr m_cVarRepeat; - /// Variable for current position of the stream - VariablePtr m_cVarTime; - /// Variable for audio volume - VariablePtr m_cVarVolume; - /// Variable for current stream properties - VariablePtr m_cVarStreamName; - VariablePtr m_cVarStreamURI; - /// Variable for the "mute" state - VariablePtr m_cVarMute; - /// Variables related to the input - VariablePtr m_cVarPlaying; - VariablePtr m_cVarStopped; - VariablePtr m_cVarPaused; - VariablePtr m_cVarSeekable; - /// Variables related to the vout - VariablePtr m_cVarFullscreen; - VarBox m_varVoutSize; - VariablePtr m_cVarHasVout; - /// Equalizer variables - EqualizerBands m_varEqBands; - VariablePtr m_cVarEqPreamp; - VariablePtr m_cVarEqualizer; - /// Variable for DVD detection - VariablePtr m_cVarDvdActive; - - /// Set of handles of vout windows - /** - * When changing the skin, the handles of the 2 skins coexist in the - * set (but this is temporary, until the old theme is destroyed). - */ - set m_handleSet; - /// Vout thread - vout_thread_t *m_pVout; - /// Audio output - aout_instance_t *m_pAout; - - /** - * Poll VLC internals to update the status (volume, current time in - * the stream, current filename, play/pause/stop status, ...) - * This function should be called regurlarly, since there is no - * callback mechanism (yet?) to automatically update a variable when - * the internal status changes - */ - void manage(); - - /// Define the command that calls manage() - DEFINE_CALLBACK( VlcProc, Manage ); - - /// Refresh audio variables - void refreshAudio(); - - /// Update the stream name variable - void updateStreamName( playlist_t *p_playlist ); - - /// Callback for intf-change variable - static int onIntfChange( vlc_object_t *pObj, const char *pVariable, +public: + /// Get the instance of VlcProc + /// Returns NULL if the initialization of the object failed + static VlcProc *instance( intf_thread_t *pIntf ); + + /// Delete the instance of VlcProc + static void destroy( intf_thread_t *pIntf ); + + /// Getter for the playtree variable + Playtree &getPlaytreeVar() { return *((Playtree*)m_cPlaytree.get()); } + + /// Getter for the time variable + StreamTime &getTimeVar() { return *((StreamTime*)(m_cVarTime.get())); } + + /// Getter for the volume variable + Volume &getVolumeVar() { return *((Volume*)(m_cVarVolume.get())); } + + /// Getter for the stream name variable + VarText &getStreamNameVar() + { return *((VarText*)(m_cVarStreamName.get())); } + + /// Getter for the stream URI variable + VarText &getStreamURIVar() + { return *((VarText*)(m_cVarStreamURI.get())); } + + /// Getter for the stream bitrate variable + VarText &getStreamBitRateVar() + { return *((VarText*)(m_cVarStreamBitRate.get())); } + + /// Getter for the stream sample rate variable + VarText &getStreamSampleRateVar() + { return *((VarText*)(m_cVarStreamSampleRate.get())); } + + /// Getter for the stream Art url variable + VarString &getStreamArtVar() + { return *((VarString*)(m_cVarStreamArt.get())); } + + /// Getter/Setter for the fullscreen variable + VarBool &getFullscreenVar() { return *((VarBool*)(m_cVarFullscreen.get())); } + void setFullscreenVar( bool ); + + /// Indicate whether the embedded video output is currently used + bool isVoutUsed() const { return m_pVout != NULL; } + + /// update equalizer + void update_equalizer( ); + + void on_item_current_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + void on_intf_event_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + void on_bit_rate_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + void on_sample_rate_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + void on_can_record_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + + void on_random_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + void on_loop_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + void on_repeat_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + + void on_volume_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + void on_audio_filter_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + + void on_intf_show_changed( vlc_object_t* p_obj, vlc_value_t newVal ); + +protected: + // Protected because it is a singleton + VlcProc( intf_thread_t *pIntf ); + virtual ~VlcProc(); + +private: + /// Timer to call manage() regularly (via doManage()) + OSTimer *m_pTimer; + /// Playtree variable + VariablePtr m_cPlaytree; + VariablePtr m_cVarRandom; + VariablePtr m_cVarLoop; + VariablePtr m_cVarRepeat; + /// Variable for current position of the stream + VariablePtr m_cVarTime; + /// Variable for audio volume + VariablePtr m_cVarVolume; + /// Variable for current stream properties + VariablePtr m_cVarStreamName; + VariablePtr m_cVarStreamURI; + VariablePtr m_cVarStreamBitRate; + VariablePtr m_cVarStreamSampleRate; + VariablePtr m_cVarStreamArt; + /// Variable for the "mute" state + VariablePtr m_cVarMute; + /// Variables related to the input + VariablePtr m_cVarPlaying; + VariablePtr m_cVarStopped; + VariablePtr m_cVarPaused; + VariablePtr m_cVarSeekable; + VariablePtr m_cVarRecordable; + VariablePtr m_cVarRecording; + /// Variables related to the vout + VariablePtr m_cVarFullscreen; + VariablePtr m_cVarHasVout; + /// Variables related to audio + VariablePtr m_cVarHasAudio; + /// Equalizer variables + EqualizerBands m_varEqBands; + VariablePtr m_cVarEqPreamp; + VariablePtr m_cVarEqualizer; + /// Variable for DVD detection + VariablePtr m_cVarDvdActive; + + /// Vout thread + vout_thread_t *m_pVout; + /// Audio output + aout_instance_t *m_pAout; + bool m_bEqualizer_started; + + /** + * Poll VLC internals to update the status (volume, current time in + * the stream, current filename, play/pause/stop status, ...) + * This function should be called regurlarly, since there is no + * callback mechanism (yet?) to automatically update a variable when + * the internal status changes + */ + void manage(); + + // reset variables when input is over + void reset_input(); + + // init variables (libvlc and playlist levels) + void init_variables(); + + /// Define the command that calls manage() + DEFINE_CALLBACK( VlcProc, Manage ); + + /// Callback for intf-show variable + static int onIntfShow( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); + + /// Callback for input-current variable + static int onInputNew( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); + + /// Callback for item-change variable + static int onItemChange( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); + + /// Callback for item-change variable + static int onItemAppend( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); + + /// Callback for item-change variable + static int onItemDelete( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); + + static int onInteraction( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); + + static int onEqBandsChange( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); + + static int onEqPreampChange( vlc_object_t *pObj, const char *pVariable, vlc_value_t oldVal, vlc_value_t newVal, void *pParam ); - /// Callback for intf-show variable - static int onIntfShow( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); - - /// Callback for item-change variable - static int onItemChange( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); - - /// Callback for item-change variable - static int onItemAppend( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); - - /// Callback for item-change variable - static int onItemDelete( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); - - - /// Callback for playlist-current variable - static int onPlaylistChange( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); - - /// Callback for skins2-to-load variable - static int onSkinToLoad( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); - - /// Callback for interaction variable - static int onInteraction( vlc_object_t *pObj, const char *pVariable, + /// Generic Callback + static int onGenericCallback( vlc_object_t *pObj, const char *pVariable, vlc_value_t oldVal, vlc_value_t newVal, void *pParam ); - /// Callback to request a vout window - static void *getWindow( intf_thread_t *pIntf, vout_thread_t *pVout, - int *pXHint, int *pYHint, - unsigned int *pWidthHint, - unsigned int *pHeightHint ); - - /// Callback to release a vout window - static void releaseWindow( intf_thread_t *pIntf, void *pWindow ); - - /// Callback to change a vout window - static int controlWindow( intf_thread_t *pIntf, void *pWindow, - int query, va_list args ); - - /// Callback for equalizer-bands variable - static int onEqBandsChange( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); - - /// Callback for equalizer-preamp variable - static int onEqPreampChange( vlc_object_t *pObj, const char *pVariable, - vlc_value_t oldVal, vlc_value_t newVal, - void *pParam ); + /// Generic Callback for intf-event + static int onGenericCallback2( vlc_object_t *pObj, const char *pVariable, + vlc_value_t oldVal, vlc_value_t newVal, + void *pParam ); };