qtmobility/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
child 15 1f895d8a5b2b
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    45 #include <QAudioFormat>
    45 #include <QAudioFormat>
    46 
    46 
    47 #include <QtCore/qdebug.h>
    47 #include <QtCore/qdebug.h>
    48 
    48 
    49 S60AudioEncoderControl::S60AudioEncoderControl(QObject *session, QObject *parent)
    49 S60AudioEncoderControl::S60AudioEncoderControl(QObject *session, QObject *parent)
    50     :QAudioEncoderControl(parent), m_quality(QtMediaServices::NormalQuality)
    50     :QAudioEncoderControl(parent), m_quality(QtMultimedia::NormalQuality)
    51 {   
    51 {   
    52     m_session = qobject_cast<S60AudioCaptureSession*>(session);
    52     m_session = qobject_cast<S60AudioCaptureSession*>(session);
    53     QAudioFormat fmt = m_session->format();
    53     QAudioFormat fmt = m_session->format();
    54     // medium, 22050Hz mono S16
    54     // medium, 22050Hz mono S16
    55     fmt.setSampleType(QAudioFormat::SignedInt);
    55     fmt.setSampleType(QAudioFormat::SignedInt);
    66 QStringList S60AudioEncoderControl::supportedAudioCodecs() const
    66 QStringList S60AudioEncoderControl::supportedAudioCodecs() const
    67 {
    67 {
    68     return m_session->supportedAudioCodecs();
    68     return m_session->supportedAudioCodecs();
    69 }
    69 }
    70 
    70 
    71 QString S60AudioEncoderControl::audioCodec() const
       
    72 {
       
    73     return m_session->format().codec();
       
    74 }
       
    75 
       
    76 bool S60AudioEncoderControl::setAudioCodec(const QString &codecName)
       
    77 {
       
    78     QAudioFormat fmt = m_session->format();
       
    79     fmt.setCodec(codecName);
       
    80     return m_session->setFormat(fmt);
       
    81 }
       
    82 
       
    83 QString S60AudioEncoderControl::codecDescription(const QString &codecName) const
    71 QString S60AudioEncoderControl::codecDescription(const QString &codecName) const
    84 {
    72 {
    85 	return m_session->codecDescription(codecName);    
    73 	return m_session->codecDescription(codecName);    
    86 }
    74 }
    87 
    75 
    88 int S60AudioEncoderControl::bitRate() const
    76 QtMultimedia::EncodingQuality S60AudioEncoderControl::quality() const
    89 {
       
    90     return (m_session->format().frequency() * m_session->format().channels() * (m_session->format().sampleSize() / 8));
       
    91 }
       
    92 
       
    93 void S60AudioEncoderControl::setBitRate(int value)
       
    94 {
       
    95     Q_UNUSED(value)
       
    96     //Note: None of the default codecs provided in the MMF support the setting of bit rates.                
       
    97 }
       
    98 
       
    99 QtMediaServices::EncodingQuality S60AudioEncoderControl::quality() const
       
   100 {
    77 {
   101     return m_quality;
    78     return m_quality;
   102 }
    79 }
   103 
    80 
   104 void S60AudioEncoderControl::setQuality(QtMediaServices::EncodingQuality value)
    81 void S60AudioEncoderControl::setQuality(QtMultimedia::EncodingQuality value, QAudioFormat &fmt)
   105 {
    82 {
   106     QAudioFormat fmt = m_session->format();
       
   107 
       
   108     switch (value) {
    83     switch (value) {
   109     case QtMediaServices::VeryLowQuality:
    84     case QtMultimedia::VeryLowQuality:
   110     case QtMediaServices::LowQuality:
    85     case QtMultimedia::LowQuality:
   111         // low, 8000Hz mono U8
    86         // low, 8000Hz mono U8
   112         fmt.setSampleType(QAudioFormat::UnSignedInt);
    87         fmt.setSampleType(QAudioFormat::UnSignedInt);
   113         fmt.setSampleSize(8);
    88         fmt.setSampleSize(8);
   114         fmt.setFrequency(8000);
    89         fmt.setFrequency(8000);
   115         fmt.setChannels(1);
    90         fmt.setChannels(1);
   116         break;
    91         break;
   117     case QtMediaServices::NormalQuality:
    92     case QtMultimedia::NormalQuality:
   118         // medium, 22050Hz mono S16
    93         // medium, 22050Hz mono S16
   119         fmt.setSampleType(QAudioFormat::SignedInt);
    94         fmt.setSampleType(QAudioFormat::SignedInt);
   120         fmt.setSampleSize(16);
    95         fmt.setSampleSize(16);
   121         fmt.setFrequency(22050);
    96         fmt.setFrequency(22050);
   122         fmt.setChannels(1);
    97         fmt.setChannels(1);
   123         break;
    98         break;
   124     case QtMediaServices::HighQuality:
    99     case QtMultimedia::HighQuality:
   125     case QtMediaServices::VeryHighQuality:    
   100     case QtMultimedia::VeryHighQuality:    
   126         // high, 44100Hz mono S16
   101         // high, 44100Hz mono S16
   127         fmt.setSampleType(QAudioFormat::SignedInt);
   102         fmt.setSampleType(QAudioFormat::SignedInt);
   128         fmt.setSampleSize(16);
   103         fmt.setSampleSize(16);
   129         fmt.setFrequency(44100);
   104         fmt.setFrequency(44100);
   130         fmt.setChannels(1);
   105         fmt.setChannels(2);
   131         break;
   106         break;
   132     default:
   107     default:
   133         break;
   108         break;
   134     }
   109     }
   135     m_session->setFormat(fmt);
       
   136     m_quality = value;  
       
   137 }
   110 }
   138 
   111 
   139 QStringList S60AudioEncoderControl::supportedEncodingOptions(const QString &codec) const
   112 QStringList S60AudioEncoderControl::supportedEncodingOptions(const QString &codec) const
   140 {
   113 {
   141     Q_UNUSED(codec)
   114     Q_UNUSED(codec)
   148 QVariant S60AudioEncoderControl::encodingOption(const QString &codec, const QString &name) const
   121 QVariant S60AudioEncoderControl::encodingOption(const QString &codec, const QString &name) const
   149 {
   122 {
   150     if (codec == "PCM") {
   123     if (codec == "PCM") {
   151         QAudioFormat fmt = m_session->format();
   124         QAudioFormat fmt = m_session->format();
   152         
   125         
   153         if(qstrcmp(name.toLocal8Bit().constData(), "bitrate") == 0) {
   126         if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) {
   154             return QVariant(bitRate());
       
   155         }
       
   156         else if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) {
       
   157             return QVariant(quality());
   127             return QVariant(quality());
   158         }        
   128         }        
   159         else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) {
   129         else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) {
   160             return QVariant(fmt.channels());
   130             return QVariant(fmt.channels());
   161         }                
   131         }                
   168 
   138 
   169 void S60AudioEncoderControl::setEncodingOption(
   139 void S60AudioEncoderControl::setEncodingOption(
   170         const QString &codec, const QString &name, const QVariant &value)
   140         const QString &codec, const QString &name, const QVariant &value)
   171 {
   141 {
   172     if (codec == "PCM") {        
   142     if (codec == "PCM") {        
   173         if(qstrcmp(name.toLocal8Bit().constData(), "bitrate") == 0) {
   143         QAudioFormat fmt = m_session->format();
   174             setBitRate(value.toInt());
   144 
   175         } else if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) {
   145         if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) {
   176             setQuality((QtMediaServices::EncodingQuality)value.toInt());
   146             setQuality((QtMultimedia::EncodingQuality)value.toInt(), fmt);
   177         } else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) {
   147         } else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) {
   178             setChannelCount(value.toInt());
   148             fmt.setChannels(value.toInt());
   179         } else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0) {
   149         } else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0) {
   180             setSampleRate(value.toInt());       
   150             fmt.setFrequency(value.toInt());
   181         }        
   151         }
       
   152         m_session->setFormat(fmt);
   182     }
   153     }
   183 }
       
   184 
       
   185 int S60AudioEncoderControl::sampleRate() const
       
   186 {
       
   187     return m_session->format().frequency();
       
   188 }
       
   189 
       
   190 void S60AudioEncoderControl::setSampleRate(int sampleRate)
       
   191 {
       
   192     QAudioFormat fmt = m_session->format();
       
   193     fmt.setFrequency(sampleRate);
       
   194     m_session->setFormat(fmt);
       
   195 }
   154 }
   196 
   155 
   197 QList<int> S60AudioEncoderControl::supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous) const
   156 QList<int> S60AudioEncoderControl::supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous) const
   198 {
   157 {
   199     if (continuous)
   158     if (continuous)
   200         *continuous = false;
   159         *continuous = false;
   201     
   160     
   202     return m_session->supportedAudioSampleRates(settings);       
   161     return m_session->supportedAudioSampleRates(settings);       
   203 }
   162 }
   204 
   163 
   205 int S60AudioEncoderControl::channelCount() const
       
   206 {
       
   207     return m_session->format().channels();
       
   208 }
       
   209 
       
   210 void S60AudioEncoderControl::setChannelCount(int channels)
       
   211 {
       
   212     QAudioFormat fmt = m_session->format();
       
   213     fmt.setChannels(channels);
       
   214     m_session->setFormat(fmt);
       
   215 }
       
   216 
       
   217 int S60AudioEncoderControl::sampleSize() const
       
   218 {
       
   219     return m_session->format().sampleSize();
       
   220 }
       
   221 
       
   222 void S60AudioEncoderControl::setSampleSize(int sampleSize)
       
   223 {
       
   224     QAudioFormat fmt = m_session->format();
       
   225     fmt.setSampleSize(sampleSize);
       
   226     m_session->setFormat(fmt);
       
   227 }
       
   228 
       
   229 QAudioEncoderSettings S60AudioEncoderControl::audioSettings() const
   164 QAudioEncoderSettings S60AudioEncoderControl::audioSettings() const
   230 {
   165 {
   231     QAudioEncoderSettings settings;
   166     return m_settings;
   232     settings.setCodec(audioCodec());
       
   233     settings.setBitRate(bitRate());
       
   234     settings.setQuality(quality());
       
   235     settings.setSampleRate(sampleRate());
       
   236     settings.setChannelCount(channelCount());
       
   237     return settings;
       
   238 }
   167 }
   239 
   168 
   240 void S60AudioEncoderControl::setAudioSettings(const QAudioEncoderSettings &settings)
   169 void S60AudioEncoderControl::setAudioSettings(const QAudioEncoderSettings &settings)
   241 {
   170 {
   242     if (settings.encodingMode() == QtMediaServices::ConstantQualityEncoding) {             
   171     QAudioFormat fmt = m_session->format();
   243         setAudioCodec(settings.codec());
   172     if (settings.encodingMode() == QtMultimedia::ConstantQualityEncoding) {
   244         setQuality(settings.quality());
   173         fmt.setCodec(settings.codec());
   245         if (settings.sampleRate() > 0)
   174         setQuality(settings.quality(), fmt);
   246             setSampleRate(settings.sampleRate());   
   175         if (settings.sampleRate() > 0) {
       
   176             fmt.setFrequency(settings.sampleRate());
       
   177         }
   247         if (settings.channelCount() > 0)
   178         if (settings.channelCount() > 0)
   248             setChannelCount(settings.channelCount());
   179             fmt.setChannels(settings.channelCount());
   249     }else {        
   180     }else {
   250         setAudioCodec(settings.codec());        
   181         if (settings.sampleRate() == 8000) {
   251         setSampleRate(settings.sampleRate());
   182             fmt.setSampleType(QAudioFormat::UnSignedInt);
   252         setChannelCount(settings.channelCount());
   183             fmt.setSampleSize(8);
   253     }    
   184         } else {
       
   185             fmt.setSampleType(QAudioFormat::SignedInt);
       
   186             fmt.setSampleSize(16);
       
   187         }
       
   188         fmt.setCodec(settings.codec());
       
   189         fmt.setFrequency(settings.sampleRate());
       
   190         fmt.setChannels(settings.channelCount());
       
   191     }
       
   192     m_session->setFormat(fmt);
       
   193     m_settings = settings;
   254 }
   194 }