Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/multimedia/audio/qaudioinput_win32_p.cpp

    r769 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 201 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation ([email protected])
     
    8080}
    8181
    82 void CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
     82void CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
    8383        DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 )
    8484{
     
    149149    for(int i = 0; i < count; i++) {
    150150        waveInUnprepareHeader(hWaveIn,blocks, sizeof(WAVEHDR));
    151         blocks+=sizeof(WAVEHDR);
     151        blocks+;
    152152    }
    153153    HeapFree(GetProcessHeap(), 0, blockArray);
     
    215215#endif
    216216    header = 0;
    217     if(buffer_size == 0) {
    218         // Default buffer size, 200ms, default period size is 40ms
    219         buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2;
    220         period_size = buffer_size/5;
     217    period_size = 0;
     218
     219    if (!settings.isValid()) {
     220        qWarning("QAudioInput: open error, invalid format.");
     221    } else if (settings.channels() <= 0) {
     222        qWarning("QAudioInput: open error, invalid number of channels (%d).",
     223                 settings.channels());
     224    } else if (settings.sampleSize() <= 0) {
     225        qWarning("QAudioInput: open error, invalid sample size (%d).",
     226                 settings.sampleSize());
     227    } else if (settings.frequency() < 8000 || settings.frequency() > 48000) {
     228        qWarning("QAudioInput: open error, frequency out of range (%d).", settings.frequency());
     229    } else if (buffer_size == 0) {
     230
     231        buffer_size
     232                = (settings.frequency()
     233                * settings.channels()
     234                * settings.sampleSize()
     235#ifndef Q_OS_WINCE  // Default buffer size, 200ms, default period size is 40ms
     236                + 39) / 40;
     237        period_size = buffer_size / 5;
    221238    } else {
    222         period_size = buffer_size/5;
    223     }
     239        period_size = buffer_size / 5;
     240#else               // For wince reduce size to 40ms for buffer size and 20ms period
     241                + 199) / 200;
     242        period_size = buffer_size / 2;
     243    } else {
     244        period_size = buffer_size / 2;
     245#endif
     246    }
     247
     248    if (period_size == 0) {
     249        errorState = QAudio::OpenError;
     250        deviceState = QAudio::StoppedState;
     251        emit stateChanged(deviceState);
     252        return false;
     253    }
     254
    224255    timeStamp.restart();
    225256    elapsedTimeOffset = 0;
     
    242273            == MMSYSERR_NOERROR) {
    243274            QString tmp;
    244             tmp = QString::fromUtf16((const unsigned short*)wic.szPname);
     275            tmp = QString*)wic.szPname);
    245276            if(tmp.compare(QLatin1String(m_device)) == 0) {
    246277                devId = ii;
     
    370401                }
    371402            } else {
     403
    372404                // push mode
    373                 memcpy(p,waveBlocks[header].lpData,waveBlocks[header].dwBytesRecorded);
    374                 l = waveBlocks[header].dwBytesRecorded;
     405                memcpy(p, waveBlocks[header].lpData, l);
     406
     407                len -= l;
     408
    375409#ifdef DEBUG_AUDIO
    376410                qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l;
     
    427461        mutex.lock();
    428462        if(!pullMode) {
    429             if(l+period_size > len && waveFreeBlockCount == buffer_size/period_size)
     463 waveFreeBlockCount == buffer_size/period_size)
    430464                done = true;
    431465        } else {
     
    538572    if(pullMode) {
    539573        // reads some audio data and writes it to QIODevice
    540         read(0,0);
     574        read(0,);
    541575    } else {
    542576        // emits readyRead() so user will call read() on QIODevice to get some audio data
Note: See TracChangeset for help on using the changeset viewer.