Android Audio代码分析4

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 03:13 点击:

 

前面看过的代码中,经常会调用到AudioSystem类中的getOutputSamplingRate函数,getOutputFrameCount函数,getOutputLatency函数等。

这些函数的实现基本类似,今天就细细品味下AudioSystem::getOutputSamplingRate函数。

 

*****************************************源码*************************************************

status_t AudioSystem::getOutputSamplingRate(int* samplingRate, 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) {

        LOGV("getOutputSamplingRate() no output descriptor for output %d in gOutputs", output);

        gLock.unlock();

        const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();

        if (af == 0) return PERMISSION_DENIED;

        *samplingRate = af->sampleRate(output);

    } else {

        LOGV("getOutputSamplingRate() reading from output desc");

        *samplingRate = outputDesc->samplingRate;

        gLock.unlock();

    }

 

    LOGV("getOutputSamplingRate() streamType %d, output %d, sampling rate %d", streamType, output, *samplingRate);

 

    return NO_ERROR;

}

**********************************************************************************************

源码路径:

frameworks\base\media\libmedia\AudioSystem.cpp

 

###########################################说明################################################

status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType)

{

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    // audio output descritor used to cache output configurations in client process to avoid frequent calls

    // through IAudioFlinger

    class OutputDescriptor {

    public:

        OutputDescriptor()

        : samplingRate(0), format(0), channels(0), frameCount(0), latency(0)  {}

 

        uint32_t samplingRate;

        int32_t format;

        int32_t channels;

        size_t frameCount;

        uint32_t latency;

    };

----------------------------------------------------------------

    OutputDescriptor *outputDesc;

// typedef int audio_io_handle_t;

    audio_io_handle_t output;

 

// Default类型的stream,强制转为music

    if (streamType == DEFAULT) {

        streamType = MUSIC;

    }

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1