亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pa_mac_core.c

?? ppciaxclient softphone
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
    }

}

#if 0
static void PaOSX_DumpDeviceInfo( AudioDeviceID devID, Boolean isInput )
{
    OSStatus err = noErr;
    UInt32    dataSize;
    UInt32    uidata32;
    Float32   fdata32;
    AudioValueRange audioRange;
    
    dataSize = sizeof( uidata32 );
    err = AudioDeviceGetProperty( devID, 0, isInput, 
        kAudioDevicePropertyLatency, &dataSize, &uidata32 );
    if( err != noErr )
    {
        PRINT_ERR("Error reading kAudioDevicePropertyLatency", err);
        return;
    }
    PRINT(("kAudioDevicePropertyLatency = %d\n", (int)uidata32 ));
    
    dataSize = sizeof( fdata32 );
    err = AudioDeviceGetProperty( devID, 1, isInput, 
        kAudioDevicePropertyVolumeScalar, &dataSize, &fdata32 );
    if( err != noErr )
    {
        PRINT_ERR("Error reading kAudioDevicePropertyVolumeScalar", err);
        return;
    }
    PRINT(("kAudioDevicePropertyVolumeScalar = %f\n", fdata32 ));
    
    dataSize = sizeof( uidata32 );
    err = AudioDeviceGetProperty( devID, 0, isInput, 
        kAudioDevicePropertyBufferSize, &dataSize, &uidata32 );
    if( err != noErr )
    {
        PRINT_ERR("Error reading buffer size", err);
        return;
    }
    PRINT(("kAudioDevicePropertyBufferSize = %d bytes\n", (int)uidata32 ));

    dataSize = sizeof( audioRange );
    err = AudioDeviceGetProperty( devID, 0, isInput, 
        kAudioDevicePropertyBufferSizeRange, &dataSize, &audioRange );
    if( err != noErr )
    {
        PRINT_ERR("Error reading buffer size range", err);
        return;
    }
    PRINT(("kAudioDevicePropertyBufferSizeRange = %g to %g bytes\n", audioRange.mMinimum, audioRange.mMaximum ));
    
    dataSize = sizeof( uidata32 );
    err = AudioDeviceGetProperty( devID, 0, isInput, 
        kAudioDevicePropertyBufferFrameSize, &dataSize, &uidata32 );
    if( err != noErr )
    {
        PRINT_ERR("Error reading buffer size", err);
        return;
    }
    PRINT(("kAudioDevicePropertyBufferFrameSize = %d frames\n", (int)uidata32 ));
    
    dataSize = sizeof( audioRange );
    err = AudioDeviceGetProperty( devID, 0, isInput, 
        kAudioDevicePropertyBufferFrameSizeRange, &dataSize, &audioRange );
    if( err != noErr )
    {
        PRINT_ERR("Error reading buffer size range", err);
        return;
    }
    PRINT(("kAudioDevicePropertyBufferFrameSizeRange = %g to %g frames\n", audioRange.mMinimum, audioRange.mMaximum ));

    return;
}
#endif

/*******************************************************************/
static OSStatus PAOSX_DevicePropertyListener (AudioDeviceID					inDevice,
								UInt32							inChannel,
								Boolean							isInput,
								AudioDevicePropertyID			inPropertyID,
								void*							inClientData)
{
    PaHostSoundControl       *pahsc;
    internalPortAudioStream  *past;
    UInt32                    dataSize;
    OSStatus                  err = noErr;
	AudioStreamBasicDescription userStreamFormat, hardwareStreamFormat;
    PaHostInOut              *hostInOut;
	AudioStreamBasicDescription *destFormatPtr, *srcFormatPtr;

    past = (internalPortAudioStream *) inClientData;
    pahsc = (PaHostSoundControl *) past->past_DeviceData;

    DBUG(("PAOSX_DevicePropertyListener: called with propertyID = 0x%0X\n", (unsigned int) inPropertyID ));

    if(inPropertyID == kAudioDevicePropertyStreamFormat)
    {    
        /* Get target device format */
        dataSize = sizeof(hardwareStreamFormat);
        err = AudioDeviceGetProperty(inDevice, 0, isInput,
            kAudioDevicePropertyStreamFormat, &dataSize, &hardwareStreamFormat);
        if( err != noErr )
        {
            PRINT_ERR("PAOSX_DevicePropertyListener: Could not get device format", err);
            sSavedHostError = err;
            goto error;
        }

        DBUG(("PAOSX_DevicePropertyListener: HW mChannelsPerFrame = %d\n", (int)hardwareStreamFormat.mChannelsPerFrame ));
        
        /* Set source user format. */
        userStreamFormat = hardwareStreamFormat;
        userStreamFormat.mSampleRate = past->past_SampleRate;	// sample rate of the user synthesis code
        userStreamFormat.mChannelsPerFrame = (isInput) ? past->past_NumInputChannels : past->past_NumOutputChannels;	//	the number of channels in each frame
        DBUG(("PAOSX_DevicePropertyListener: User mChannelsPerFrame = %d\n", (int)userStreamFormat.mChannelsPerFrame ));
    
        userStreamFormat.mBytesPerFrame = userStreamFormat.mChannelsPerFrame * sizeof(float);
        userStreamFormat.mBytesPerPacket = userStreamFormat.mBytesPerFrame * userStreamFormat.mFramesPerPacket;
    
    	/* Don't use AudioConverter for merging or splitting channels. */
        hardwareStreamFormat.mChannelsPerFrame = userStreamFormat.mChannelsPerFrame;
        hardwareStreamFormat.mBytesPerFrame = userStreamFormat.mBytesPerFrame;
        hardwareStreamFormat.mBytesPerPacket = userStreamFormat.mBytesPerPacket;
    	        
        if( isInput )
        {
            hostInOut = &pahsc->input;
            srcFormatPtr = &hardwareStreamFormat;
            destFormatPtr = &userStreamFormat;
        }
        else
        {
            hostInOut = &pahsc->output;
            srcFormatPtr = &userStreamFormat;
            destFormatPtr = &hardwareStreamFormat;
        }
        DBUG(("PAOSX_DevicePropertyListener: source rate = %f\n", srcFormatPtr->mSampleRate ));
        DBUG(("PAOSX_DevicePropertyListener: dest rate = %f\n", destFormatPtr->mSampleRate ));
        
        // Don't delete old converter until we create new one so we don't pull
        // the rug out from under other audio threads.
        AudioConverterRef oldConverter = hostInOut->converter;
        
        // Make converter to change sample rate.
        err = AudioConverterNew (
            srcFormatPtr, 
            destFormatPtr, 
            &hostInOut->converter );
        if( err != noErr )
        {
            PRINT_ERR("Could not create format converter", err);
            sSavedHostError = err;
            goto error;
        }
        
        if( oldConverter != NULL )
        {
            verify_noerr( AudioConverterDispose( oldConverter ) );
        }
    }
    
error:
    pahsc->formatListenerCalled = true;
    return err;
}

/* Allocate FIFO between Device callback and Converter callback so that device can push data
* and converter can pull data.
*/
static PaError PaOSX_CreateInputRingBuffer( internalPortAudioStream   *past )
{
    PaHostSoundControl *pahsc = (PaHostSoundControl *) past->past_DeviceData;
    OSStatus  err = noErr;
    UInt32    dataSize;
    double    sampleRateRatio;
    long      numBytes;
    UInt32    framesPerHostBuffer;
    UInt32    bytesForDevice;
    UInt32    bytesForUser;
    UInt32    bytesPerFrame;
    AudioStreamBasicDescription formatDesc;
    
    dataSize = sizeof(formatDesc);
    err = AudioDeviceGetProperty( pahsc->input.audioDeviceID, 0, IS_INPUT,
        kAudioDevicePropertyStreamFormat, &dataSize, &formatDesc);
    if( err != noErr )
    {
        PRINT_ERR("PaOSX_CreateInputRingBuffer: Could not get input format.\n", err);
        sSavedHostError = err;
        return paHostError;
    }

    // If device is delivering audio faster than being consumed then buffer must be bigger.
    sampleRateRatio = formatDesc.mSampleRate / past->past_SampleRate;
    
    // Get size of CoreAudio IO buffers.
    dataSize = sizeof(framesPerHostBuffer);
    err = AudioDeviceGetProperty( pahsc->input.audioDeviceID, 0, IS_INPUT,
                                kAudioDevicePropertyBufferFrameSize, &dataSize,
                                &framesPerHostBuffer);
    if( err != noErr )
    {
        PRINT_ERR("PaOSX_CreateInputRingBuffer: Could not get input buffer size.\n", err);
        sSavedHostError = err;
        return paHostError;
    }
    
    bytesPerFrame = past->past_NumInputChannels * sizeof(Float32);
    
    bytesForDevice = framesPerHostBuffer * bytesPerFrame * 2;
    bytesForUser = past->past_FramesPerUserBuffer * bytesPerFrame * 3 * sampleRateRatio;
        
    // Ring buffer should be large enough to consume audio input from device,
    // and to deliver a complete user buffer.
    numBytes = (bytesForDevice > bytesForUser) ? bytesForDevice : bytesForUser;
            
    numBytes = RoundUpToNextPowerOf2( numBytes );

    DBUG(("PaOSX_CreateInputRingBuffer: FIFO numBytes = %ld\n", numBytes));
    pahsc->ringBufferData = PaHost_AllocateFastMemory( numBytes );
    if( pahsc->ringBufferData == NULL )
    {
        return paInsufficientMemory;
    }
    RingBuffer_Init( &pahsc->ringBuffer, numBytes, pahsc->ringBufferData );
    // Make it look almost full at beginning. We must advance by an integral number of frames
    // so that the channels don't get scrambled when numChannels is not a power of 2.
    {
        int numZeroFrames = numBytes / bytesPerFrame;
        int numZeroBytes = numZeroFrames * bytesPerFrame;
        RingBuffer_AdvanceWriteIndex( &pahsc->ringBuffer, numZeroBytes );
    }
    
    return paNoError;
}

/******************************************************************
 * Try to set the I/O bufferSize of the device.
 * Scale the size by the ratio of the sample rates so that the converter will have
 * enough data to operate on.
 */
static OSStatus PaOSX_SetDeviceBufferSize( AudioDeviceID devID, Boolean isInput, int framesPerUserBuffer, Float64 sampleRateRatio )
{
    UInt32    dataSize;
    UInt32    ioBufferSize;
    int       scaler;    
    
	scaler = (int) sampleRateRatio;
    if( sampleRateRatio > (Float64) scaler ) scaler += 1;
    DBUG(("PaOSX_SetDeviceBufferSize: buffer size scaler = %d\n", scaler ));
    ioBufferSize = framesPerUserBuffer * scaler;
    
    // Limit buffer size to reasonable value.
    if( ioBufferSize < 128 ) ioBufferSize = 128;

    dataSize = sizeof(ioBufferSize);
    return AudioDeviceSetProperty( devID, 0, 0, isInput,
                            kAudioDevicePropertyBufferFrameSize, dataSize,
                            &ioBufferSize);
}


/*******************************************************************/
static PaError PaOSX_OpenCommonDevice( internalPortAudioStream   *past,
        PaHostInOut *inOut, Boolean isInput )
{
    PaHostSoundControl *pahsc = (PaHostSoundControl *) past->past_DeviceData;
    PaError          result = paNoError;
    OSStatus         err = noErr;
    Float64          deviceRate;

    PaOSX_FixVolumeScalars( inOut->audioDeviceID, isInput,
        inOut->numChannels, 0.1, 0.9 );

    // The HW device format changes are asynchronous.
    // So we don't know when or if the PAOSX_DevicePropertyListener() will
    // get called. To be safe, call the listener now to forcibly create the converter.
    if( inOut->converter == NULL )
    {
        err = PAOSX_DevicePropertyListener (inOut->audioDeviceID,
                                0, isInput, kAudioDevicePropertyStreamFormat, past);
        if (err != kAudioHardwareNoError)
        {
            PRINT_ERR("PaOSX_OpenCommonDevice: PAOSX_DevicePropertyListener failed.\n", err);
            sSavedHostError = err;
            return paHostError;
        }
    }

    // Add listener for when format changed by other apps.
    DBUG(("PaOSX_OpenCommonDevice: call AudioDeviceAddPropertyListener()\n" ));
	err = AudioDeviceAddPropertyListener( inOut->audioDeviceID, 0, isInput,
        kAudioDevicePropertyStreamFormat,
        (AudioDevicePropertyListenerProc) PAOSX_DevicePropertyListener, past );
    if (err != noErr)
    {
        return -1; // FIXME
    }

    // Only change format if current HW format is different.
    // Don't bother to check result because we are going to use an AudioConverter anyway.
    pahsc->formatListenerCalled = false;
    result = PaOSX_SetFormat( inOut->audioDeviceID, isInput, past->past_SampleRate, inOut->numChannels );
    // Synchronize with device because format changes put some devices into unusable mode.
    if( result > 0 )
    {
        const int sleepDurMsec = 50;
        int spinCount = MIN_TIMEOUT_MSEC / sleepDurMsec;
        while( !pahsc->formatListenerCalled && (spinCount > 0) )
        {
            Pa_Sleep( sleepDurMsec ); // FIXME - use a semaphore or signal
            spinCount--;
        }
        if( !pahsc->formatListenerCalled )
        {
            PRINT(("PaOSX_OpenCommonDevice: timed out waiting for device format to settle.\n"));
        }
        result = 0;
    }
    
#if SET_DEVICE_BUFFER_SIZE
    // Try to set the I/O bufferSize of the device.
    {
        Float64   ratio;
        deviceRate = PaOSX_GetDeviceSampleRate

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美精品午睡沙发| 一二三区精品福利视频| 亚洲精品一区二区三区在线观看 | 国产福利一区二区| 激情国产一区二区| 久草这里只有精品视频| 精品一区二区成人精品| 国产在线精品免费| 国产激情视频一区二区三区欧美| 国产精品影视网| 成人一区二区三区视频 | 国产欧美一区二区精品仙草咪| 久久婷婷一区二区三区| 国产日韩av一区二区| 国内精品自线一区二区三区视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 麻豆国产精品一区二区三区 | 高清成人在线观看| 成人精品小蝌蚪| 在线观看一区不卡| 欧美日韩一二三| 日韩一区国产二区欧美三区| 久久亚洲一区二区三区四区| 久久精品人人做人人综合| 中文字幕一区日韩精品欧美| 一区二区高清在线| 毛片基地黄久久久久久天堂| 国产成人免费在线视频| 99re热这里只有精品免费视频| 色成年激情久久综合| 欧美日韩国产经典色站一区二区三区 | 国产精品888| 色婷婷亚洲婷婷| 91精品国产色综合久久不卡蜜臀| 2024国产精品视频| 18成人在线视频| 日韩专区中文字幕一区二区| 激情综合五月天| 99久久综合色| 91精品在线免费| 国产色一区二区| 亚洲成在线观看| 国产在线观看一区二区 | 国产精品电影一区二区三区| 亚洲午夜久久久久久久久久久| 麻豆视频一区二区| aa级大片欧美| 欧美sm美女调教| 一区二区三区免费| 国产毛片一区二区| 欧美日韩中文国产| 欧美极品xxx| 男女男精品视频| 一本一道久久a久久精品综合蜜臀| 日韩丝袜美女视频| 亚洲人精品一区| 国产一区二区毛片| 国产精品国产三级国产a| 日韩毛片精品高清免费| 精东粉嫩av免费一区二区三区 | 天天综合色天天| 韩国欧美一区二区| 国产日韩欧美综合在线| 亚洲国产精品t66y| 日本免费新一区视频| 不卡高清视频专区| 久久午夜色播影院免费高清| 亚洲欧美视频一区| 99久久综合99久久综合网站| 69堂国产成人免费视频| 综合欧美一区二区三区| 美女视频黄a大片欧美| 欧美三级电影在线看| 国产女主播视频一区二区| 日本成人在线看| 91国产福利在线| 成人免费一区二区三区在线观看 | 91在线免费视频观看| 精品国内二区三区| 视频一区视频二区中文| 91麻豆国产在线观看| 国产免费成人在线视频| 蜜桃视频第一区免费观看| 欧美日韩日本视频| 一区二区三区欧美日韩| 91免费在线播放| 国产精品九色蝌蚪自拍| 国产精品亚洲一区二区三区妖精| 91精品免费在线| 日韩不卡在线观看日韩不卡视频| 欧美视频中文字幕| 亚洲欧美国产毛片在线| 91麻豆免费视频| 中文字幕一区二区三区在线不卡 | 9191久久久久久久久久久| 亚洲一区二区偷拍精品| 92精品国产成人观看免费| 国产精品素人视频| 成人网在线免费视频| 欧美国产成人精品| 成人性生交大片免费看中文| 亚洲精品一区二区三区在线观看 | 91国偷自产一区二区开放时间| 国产精品不卡在线观看| 成人av免费在线播放| 中文字幕字幕中文在线中不卡视频| 丁香激情综合五月| 最新国产精品久久精品| 99精品一区二区三区| 综合色中文字幕| 色婷婷av久久久久久久| 亚洲一区在线观看免费 | 国产视频一区不卡| www.日韩在线| 有码一区二区三区| 欧美午夜精品一区二区三区 | 国产欧美一区二区精品性色超碰 | 欧美在线观看禁18| 午夜在线电影亚洲一区| 日韩欧美一区二区三区在线| 久久99精品久久久久| 国产亚洲成aⅴ人片在线观看| 国产91丝袜在线播放九色| 中文字幕一区视频| 欧美日本视频在线| 麻豆成人综合网| 国产欧美视频在线观看| 91麻豆视频网站| 日韩成人av影视| 国产亚洲人成网站| 91麻豆视频网站| 青青青伊人色综合久久| 久久久亚洲综合| 色哟哟精品一区| 麻豆国产精品官网| 中文字幕在线免费不卡| 欧美午夜电影一区| 久久99精品国产| 亚洲人成在线观看一区二区| 6080日韩午夜伦伦午夜伦| 国产一区二区精品久久91| 亚洲免费在线视频一区 二区| 3atv在线一区二区三区| 国产成人免费视频一区| 一区二区三区在线观看网站| 日韩免费看的电影| 不卡的av在线播放| 日本伊人午夜精品| 中文字幕一区二区不卡| 宅男噜噜噜66一区二区66| 国产成人8x视频一区二区| 亚洲一区二区视频在线| 2020国产精品| 色狠狠桃花综合| 国产一区二区按摩在线观看| 亚洲自拍偷拍九九九| 国产欧美日产一区| 5566中文字幕一区二区电影| 国产69精品久久久久毛片 | 色一情一乱一乱一91av| 国内一区二区视频| 亚洲第一搞黄网站| 国产精品日日摸夜夜摸av| 日韩免费在线观看| 在线视频你懂得一区二区三区| 国产一区二区三区国产| 亚洲成av人在线观看| 欧美电影免费观看高清完整版在线| 欧美一区二区三区啪啪| 国产精品无码永久免费888| 久久99久久精品| 99re这里都是精品| 7777精品伊人久久久大香线蕉的| 亚洲靠逼com| 懂色av一区二区三区蜜臀| 在线观看区一区二| 欧美激情一区在线| 男人的j进女人的j一区| 96av麻豆蜜桃一区二区| wwwwxxxxx欧美| 免费成人av在线| 日韩欧美黄色影院| 欧美性生活大片视频| 粉嫩高潮美女一区二区三区| 蜜桃视频在线观看一区二区| 午夜精品久久久久久久| 亚洲视频精选在线| 欧美国产欧美综合| 久久亚洲二区三区| 日韩限制级电影在线观看| 欧美日韩亚洲综合| 欧美伊人精品成人久久综合97| 99riav久久精品riav| 播五月开心婷婷综合| 国产成人av一区二区三区在线 | 91老司机福利 在线| 国产不卡视频一区| 国产乱色国产精品免费视频| 精品写真视频在线观看| 欧美在线不卡一区|