zoukankan      html  css  js  c++  java
  • AudioRecord::getMinFrameCount

    1. 介绍

    这个函数是C++一侧使用的函数,在录音开始前获得最小FrameCount的大小。

    status_t status = AudioRecord::getMinFrameCount(&minFrameCount, sampleRateHz, audioFormat, channelConfig)
    

     获得的minFrameCount会存到第一个参数中。后三个参数会被传递给AudioSystem::getInputBufferSize,比如我这边传下面三个具体数字:

    sampleRateHz = 48000;
    audioFormat = AUDIO_FORMAT_PCM_16_BIT;
    channelConfig = AUDIO_CHANNEL_IN_STEREO; // 1或者2
    

     在AudioSystem.cpp中,AudioSystem::getInputBufferSize会去找:

    const sp<AudioFlingerClient> afc = getAudioFlingerClient();
        return afc->getInputBufferSize(sampleRate, format, channelMask, buffSize);
    

    AudioFlingerClient中对应的getInputBufferSize。

    2. 遇到的问题

    FORTIFY: pthread_mutex_lock called on a destroyed mutex

     在c++中写一个线程直接调用这个函数会报上面的错误。意思是:FORTIFY:对已销毁的互斥体调用pthread_mutex_lock 。
    仔细追代码就会发现在AudioFlingerClient::getInputBufferSize中有锁的操作。

    Mutex::Autolock _l(mLock)
    

     如果说在我们调用的时候这个锁处于一个已经被注销的状态。是一定拿不到的。

  • 相关阅读:
    DOM性能小记
    利用tween.js算法生成缓动效果
    小游戏(锅打灰太狼)
    DOM应用实例(寻找房祖名)
    学习总结——DOM
    图片预加载
    删除src值为空的img标签
    2019-08-17 纪中NOIP模拟B组
    [SCOI2015] 小凸玩矩阵
    [JZOJ4899] 雪之国度
  • 原文地址:https://www.cnblogs.com/hansenn/p/13262128.html
Copyright © 2011-2022 走看看