AudioTrack&AudioFlinger

struct audio_track_cblk_t
{

    // The data members are grouped so that members accessed frequently and in the same context
    // are in the same line of data cache.
                Mutex       lock;
                Condition   cv;
    volatile    uint32_t    user;                                //user代表AudioTrack,生产者已经写了多少个frame
    volatile    uint32_t    server;                              //server代表AudioFlinger,消费者已经读取了多少个frame
                uint32_t    userBase;                            //与user结合使用,使之成为一个环形FIFO
                uint32_t    serverBase;                          //与server结合使用,使之成为一个环形FIFO
                void*       buffers;                             //实际数据buffer的起始地址,
                                                                 //如果是MODE_STREAM,buffers紧跟在cblk后面
                                                                 //如果是MODE_STATIC,buffers指向sharedBuffer
                uint32_t    frameCount;                          //数据buffer的大小,以Frame为单位
                // Cache line boundary
                uint32_t    loopStart;                           //以下3个loopXXX是与循环播放有关
                uint32_t    loopEnd;
                int         loopCount;
    volatile    union {
                    uint16_t    volume[2];
                    uint32_t    volumeLR;
                };                                               //音量相关
                uint32_t    sampleRate;                          //采样率
                // NOTE: audio_track_cblk_t::frameSize is not equal to AudioTrack::frameSize() for
                // 8 bit PCM data: in this case,  mCblk->frameSize is based on a sample size of
                // 16 bit because data is converted to 16 bit before being stored in buffer

                uint8_t     frameSize;                           //一个frame的字节数
                uint8_t     channelCount;                        //通道数目
                uint16_t    flags;

                uint16_t    bufferTimeoutMs; // Maximum cumulated timeout before restarting audioflinger
                uint16_t    waitTimeMs;      // Cumulated wait time

                uint16_t    sendLevel;
                uint16_t    reserved;
                // Cache line boundary (32 bytes)
                            audio_track_cblk_t();                //cblk总是new在指定的共享内存上,而不是堆栈上  
                uint32_t    stepUser(uint32_t frameCount);       //AudioTrack更新写位置
                bool        stepServer(uint32_t frameCount);     //AudioFlinger更新读位置 
                void*       buffer(uint32_t offset) const;       //返回可写的地址
                uint32_t    framesAvailable();                   //还有多少空间可写 
                uint32_t    framesAvailable_l();
                uint32_t    framesReady();                       //是否有可读数据 
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值