Chinaunix首页 | 论坛 | 博客
  • 博客访问: 537903
  • 博文数量: 150
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1705
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-11 23:29
文章分类

全部博文(150)

文章存档

2011年(9)

2010年(25)

2009年(94)

2008年(22)

我的朋友

分类: LINUX

2011-02-10 13:17:20

IMemory接口

在createTrack的过程中,AudioFlinger会根据传入的frameCount参数,申请一块内存,AudioTrack可以通过IAudioTrack接口的getCblk()函数获得指向该内存块的IMemory接口,然后AudioTrack通过该IMemory接口的pointer()函数获得指向该内存块的指针,这块内存的开始部分就是audio_track_cblk_t结构,紧接着是大小为frameSize的FIFO内存。

IMemory->pointer() ---->|_______________________________________________________

                                     |__audio_track_cblk_t__|_______buffer of FIFO(size==frameCount)____|

看看AudioTrack的createTrack()的代码就明白了:

  1. sp track = audioFlinger->createTrack(getpid(),  
  2.                                                       streamType,  
  3.                                                       sampleRate,  
  4.                                                       format,  
  5.                                                       channelCount,  
  6.                                                       frameCount,  
  7.                                                       ((uint16_t)flags) << 16,  
  8.                                                       sharedBuffer,  
  9.                                                       output,  
  10.                                                       &status);  
  11.     // 得到IMemory接口  
  12.     sp cblk = track->getCblk();                         
  13.     mAudioTrack.clear();  
  14.     mAudioTrack = track;  
  15.     mCblkMemory.clear();  
  16.     mCblkMemory = cblk;  
  17.     // 得到audio_track_cblk_t结构  
  18.     mCblk = static_cast(cblk->pointer());   
  19.     // 该FIFO用于输出      
  20.     mCblk->out = 1;                                              
  21.     // Update buffer size in case it has been limited by AudioFlinger during track creation  
  22.     mFrameCount = mCblk->frameCount;  
  23.     if (sharedBuffer == 0) {  
  24.        // 给FIFO的起始地址赋值  
  25.         mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t);  
  26.     } else {  
  27.         ..........          
  28.    
阅读(2670) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~