Audio流程分析二(AudioSystem)

本文继续上一节的内容,深入分析AudioSystem的getOutputFrameCount和getOutputSamplingRate方法,探讨如何查询硬件缓冲大小和采样率。通过与audioflinger和audiopolicy交互获取帧计数,并计算帧数。最后,讨论AudioTrack的创建过程及其构造函数中的set方法。
摘要由CSDN通过智能技术生成

接上一节

来看AudioSystem::getOutputFrameCount(&afFrameCount, mStreamType),他的作用是查询硬件内部缓冲的大小。所以要跟audioflinger打交道。

再看看是怎么得到framcount的,貌似和audiopolicy打交道了

status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType)
{
    OutputDescriptor *outputDesc;
    audio_io_handle_t output;

    if (streamType == DEFAULT) {
        streamType = MUSIC;
    }

    output = getOutput((stream_type)streamType);
    if (output == 0) {
        return PERMISSION_DENIED;
    }

    gLock.lock();
    outputDesc = AudioSystem::gOutputs.valueFor(output);
    if (outputDesc == 0) {
        gLock.unlock();
        const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
        if (af == 0) return PERMISSION_DENIED;
        *frameCount = af->frameCount(output);
    } else {
        *frameCount = outputDesc->frameCount;
        gLock.unlock();
    }

    LOGI("getOutputFrameCount() streamType %d, output %d, frameCount %d", streamType, output, *frameCount);

    return NO_ERROR;
}

再往下看,AudioSystem::getOutputSamplingRate(&afSampleRate, mStreamType),查询采样率,一般返回的是所支持的最高采样率。

然后计算帧数,fra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值