/* * (c) 2005, 2008 Nico Pranke <Nico.Pranke@googlemail.com>, Robin Luedtke <RobinLu@gmx.de> * * This file is part of avcap. * * avcap is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * avcap is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * 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 avcap. If not, see <http://www.gnu.org/licenses/>. */ /* avcap is free for non-commercial use. * To use it in commercial endeavors, please contact Nico Pranke <Nico.Pranke@googlemail.com> */ #ifndef CONNECTORMANAGER_H_ #define CONNECTORMANAGER_H_ #include <list> #include "Connector.h" #include "Manager.h" #include "avcap-export.h" namespace avcap { class DeviceCollector; //! This class is the interface to query and select the available video/audio inputs/outputs. /*! This class manages STL-lists of objects of class Connector which describe * an input or output of a capture device. Applications can get these lists and get/set * the currently used connector of a special type. The methods to deal * with outputs are only of partial interest for capturing but have been added * for completeness. * Application must use the API-dependent CaptureDevice-object to get an ConnectorManager. * The default implementations of the mehtods in this class are a noop. */ class AVCAP_Export ConnectorManager: public Manager<Connector> { protected: // Connector Lists ListType mVideoInputs; ListType mAudioInputs; ListType mVideoOutputs; ListType mAudioOutputs; public: //! Construct the manager and query for available inputs and outputs for audio and video. /*! The manager is usualy created by an CaptureDevice object. * \param dd The DeviceDescriptor to acces the device. */ ConnectorManager(DeviceDescriptor *dd); //! The destructor. */ virtual ~ConnectorManager() = 0; //! Returns the Connector describing the currently used video input. /*! The default-implementation returns 0. * \return video input connector.*/ virtual inline Connector* getVideoInput() { return 0; } //! Sets the currently used video input. /*! The default-implementation is a noop and returns -1. * \param c The connector to use for the video input. * \return 0, if succesful, -1 else*/ virtual inline int setVideoInput(Connector* c) { return -1; } //! Returns the Connector describing the currently used audio input. /*! The default-implementation returns 0. * \return audio input connector.*/ virtual inline Connector* getAudioInput() { return 0; } //! Sets the currently used audio input. /*! The default-implementation is a noop and returns -1. * \param c The connector to use for the audio input. * \return 0, if succesful, -1 else*/ virtual inline int setAudioInput(Connector* c) { return -1; } //! Returns the Connector describing the currently used video output. /*! The default-implementation returns 0. * \return video output connector.*/ virtual inline Connector* getVideoOutput() { return 0; } //! Sets the currently used video output. /*! The default-implementation is a noop and returns -1. * \param c The connector to use for the video input. * \return 0, if succesful, -1 else*/ virtual inline int setVideoOutput(Connector* c) { return -1; } //! Returns the Connector describing the currently used audio output. /*! The default-implementation returns 0. * \return audio output connector.*/ virtual inline Connector* getAudioOutput() { return 0; } //! Sets the currently used audio output. /*! The default-implementation is a noop and returns -1. * \param c The connector to use for the audio output. * \return 0, if succesful, -1 else*/ virtual inline int setAudioOutput(Connector* c) { return -1; } //! Get the list of available video inputs of the device. /*! \return STL-list of pointers to objects of type * Connector describing the available video inputs. */ inline const ListType& getVideoInputList() const { return mVideoInputs; } //! Get the list of available audio inputs of the device. /*! \return STL-list of pointers to objects of type * Connector describing the available audio inputs. */ inline const ListType& getAudioInputList() const { return mAudioInputs; } //! Get the list of available video outputs of the device. /*! \return STL-list of pointers to objects of type * Connector describing the available video outputs. */ inline const ListType& getVideoOutputList() const { return mVideoOutputs; } //! Get the list of available audio outputs of the device. /*! \return STL-list of pointers to objects of type * Connector describing the available audio outputs. */ inline const ListType& getAudioOutputList() const { return mAudioOutputs; } //! This method is called after creation to query for video/audio in- and outputs. virtual void query() = 0; private: void clearList(ConnectorManager::ListType& list); }; } #endif //CONNECTORMANAGER_H_