/*
* (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 TUNER_H_
#define TUNER_H_
#include <string>
#include "avcap-export.h"
namespace avcap
{
class DeviceDescriptor;
//! Interface of a tuner.
/*! This class provides access to the tuner functionality of TV or Radio-cards.
* Applications can adjust things like frequency, audio mode etc.
* Applications don't create Tuner objects themselfes but get them from the Connector
* the tuner is associated with. The connector in turn can be obtained from the
* ConnectorManager of the CaptureDevice.
**/
class AVCAP_Export Tuner
{
private:
public:
virtual inline ~Tuner()
{}
//! Determine whether the tuner is able to receive radio frequencies.
/*! The default implementation returns false.
* \return true if radio tuner, false else */
virtual inline bool isRadioTuner() const
{ return false; }
//! Determine whether the tuner is able to receive TV frequencies.
/*! The default implementation returns false.
* \return true if TV tuner, false else */
virtual inline bool isTVTuner() const
{ return false; };
//! Set the audio mode to stereo.
/*! The default implementation is noop and returns -1.
* \return 0, if successful, -1 else. */
virtual inline int setStereo()
{ return -1; }
//! Set the audio mode to mono.
/*! Default implementation is noop and return -1.
* \return 0, if successful, -1 else. */
virtual inline int setMono()
{ return -1; }
//! Set the audio mode to secondary audio program (SAP).
/*! The default implementation is noop and returns -1.
* \return 0, if successful, -1 else. */
virtual inline int setSAP()
{ return -1; }
//! Set the audio mode to language 1.
/*! The default implementation is noop and returns -1.
* \return 0, if successful, -1 else. */
virtual inline int setLang1()
{ return -1; }
//! Set the audio mode to language 2.
/*! The default implementation is noop and returns -1.
* \return 0, if successful, -1 else. */
virtual inline int setLang2()
{ return -1; }
//! Returns the current frequency in MHz.
/*! The default implementation is noop and returns -1.
* \return tuner frequency */
virtual inline double getFreq() const
{ return -1.0f; }
//! Returns the step with in which the frequency can be increased or decreased.
/*! The default implementation is noop and returns -1.
* \return frequency step width*/
virtual inline double getFreqStep() const
{ return -1.0f; }
//! Returns the minimum possible frequency in MHz which can be applied to the tuner.
/*! The default implementation is noop and returns -1.
* \return minimal tuner frequency */
virtual inline double getMinFreq() const
{ return -1.0f; }
//! Returns the maximum possible frequency in MHz which can be applied to the tuner.
/*! The default implementation is noop and returns -1.
* \return maximal tuner frequency */
virtual inline double getMaxFreq() const
{ return -1.0f; }
//! Returns the tuner name.
/*! Default implementation returns an empty string.
* \return tuner name */
virtual inline const std::string getName() const
{ return ""; }
//! This method tries to readjust and to fine-tune the frequency by means of the current AFC-value.
/*! The default implementation is noop and returns -1.
* \return 0, if successful, -1 else. */
virtual inline int finetune(int maxsteps)
{ return -1; }
//! Get the current automatic frequency control (AFC) value.
/*! If the afc value is negative, the frequency is too low, if positive it is too high.
*! The default implementation is noop and returns -1.
* \return afc */
virtual inline int getAFCValue() const
{ return -1; }
//! Return the strength of the signal.
/*! The default implementation is noop and returns -1.
* \return signal strength */
virtual inline int getSignalStrength() const
{ return -1; }
//! Increase the frequency a step corresponding to getFreqStep().
/*! The default implementation is noop and returns -1.
* \return 0, if successful, -1 else. */
virtual inline int increaseFreq()
{ return 0; }
//! Decrease the frequency a step corresponding to getFreqStep().
/*! The default implementation is noop and returns -1.
* \return 0, if successful, -1 else. */
virtual inline int decreaseFreq()
{ return 0; }
//! Set the new frequency. The frequency is given in MHz.
/*! The default implementation is noop and returns -1.
* \param f The new frequency.
* \return 0, if successful, -1 else. */
virtual inline int setFreq(double f)
{ return -1; }
};
/*! Known european terrestric analog TV channels. They must be multiplied by 10^6
* to obtain the frequency in Hz. */
static const double TV_Channels[] =
{
48.25, 55.25, 62.25, 175.25, 182.25, 189.25, 196.25, 203.25, 210.25, 217.25, 224.25, 471.25, 479.25, 487.25,
495.25, 503.25, 511.25, 519.25, 527.25, 535.25, 543.25, 551.25, 559.25, 567.25, 575.25, 583.25, 591.25,
599.25, 607.25, 615.25, 623.25, 631.25, 639.25, 647.25, 655.25, 663.25, 671.25, 679.25, 687.25, 695.25,
703.25, 711.25, 719.25, 727.25, 735.25, 743.25, 751.25, 759.25, 767.25, 775.25, 783.25, 791.25, 799.25,
807.25, 815.25, 823.25, 831.25, 839.25, 847.25, 855.25
};
/*! The number of TV channels */
static const int TV_Num_Channels = 60;
/*! Some german analog radio channels. They must be multiplied by 10^6
* to obtain the frequency in Hz. */
static const double Radio_Channels[] =
{
102.4, 102.0
};
/*! The number of radio channels */
static const int Radio_Num_Channels = 2;
}
#endif // TUNER_H_