当前位置:  技术问答>linux和unix

关于音频缓冲区的设置问题,请教高手!

    来源: 互联网  发布时间:2016-07-18

    本文导语:      以下代码是来自s3c2410_uda1314.c 我的问题是: 代码中 已经用kmalloc(sizeof(audio_buf_t) * s->nbfrags, GFP_KERNEL);分配了内存空间,为什么还要用 consistent_alloc(GFP_KERNEL|GFP_DMA, dmasize, &dmaphys);呢? 是不是在分配音频缓冲区...

    以下代码是来自s3c2410_uda1314.c
我的问题是:
代码中 已经用kmalloc(sizeof(audio_buf_t) * s->nbfrags, GFP_KERNEL);分配了内存空间,为什么还要用
consistent_alloc(GFP_KERNEL|GFP_DMA, dmasize, &dmaphys);呢?
是不是在分配音频缓冲区的时候必须是先分配一段内存,接着再设置具体的内容。
这个consistent_alloc函数是用来设置dma的吗?

static int audio_setup_buf(audio_stream_t * s)
{
int frag;
int dmasize = 0;
char *dmabuf = 0;
dma_addr_t dmaphys = 0;  //dma总线地址

if (s->buffers)
return -EBUSY;

s->nbfrags = audio_nbfrags;   //片段的数量
s->fragsize = audio_fragsize; //片段的大小
  
s->buffers = (audio_buf_t *)  
    kmalloc(sizeof(audio_buf_t) * s->nbfrags, GFP_KERNEL);
if (!s->buffers)//分配失败,跳出
goto err;
    //给分配的区域清零
memset(s->buffers, 0, sizeof(audio_buf_t) * s->nbfrags);
    
for (frag = 0; frag nbfrags; frag++) {
audio_buf_t *b = &s->buffers[frag];

if (!dmasize) {
dmasize = (s->nbfrags - frag) * s->fragsize;
do {
              
dmabuf = consistent_alloc(GFP_KERNEL|GFP_DMA,
  dmasize, &dmaphys);
if (!dmabuf) 
     dmasize -= s->fragsize;
} while (!dmabuf && dmasize);
if (!dmabuf)
goto err;
b->master = dmasize;
}

b->start = dmabuf;      
b->dma_addr = dmaphys;  
sema_init(&b->sem, 1);
DPRINTK("buf %d: start %p dma %dn", frag, b->start, b->dma_addr);

dmabuf += s->fragsize;
dmaphys += s->fragsize;
dmasize -= s->fragsize;
}

s->buf_idx = 0;
s->buf = &s->buffers[0];

return 0;

      err:
printk(AUDIO_NAME ": unable to allocate audio memoryn ");
audio_clear_buf(s);
return -ENOMEM;
}


|
恭喜楼主,希望楼主说说是怎么解决的!

|
啊,这么快。分析原因贴出来呗

|
那就告诉我吧 我也想知道

|
自问自答?

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教传输音频数据问题
  • 请教HDMI音频输出问题
  • 请教各位可以用read函数读取.wav音频文件数据吗
  • 请教在linux上怎么编程操作音频设备
  • 请教音频文件破音(滤波)处理方法
  • win ce 音频和 linux 音频
  • linux 音频编程 ioctrl怎样控制音频的输出通道
  • java音频播放示例分享(java如何播放音频)
  • 虚拟音频处理系统 VAPS
  • 音频流记录器 DarkIce
  • 音频处理软件 Gold Wave Editor
  • 高级音频API Dancer.js
  • 多声道音频处理包 Ecasound
  • 音频转换器 Gnac
  • win ce 音频和 linux 音频 iis7站长之家
  • 音频编码解码插件 FLAC
  • 多音频格式编码工具 winLAME
  • 音频混合器 sGmixer
  • 音频和视频数据处理库 Gavl
  • 音频和MIDI音序器 Rosegarden
  • 数字音频工作站 Ardour
  • 跨平台音频库 PortAudio
  • linux下有什么可以录制播放器播放的音频的软件吗?
  • PXA270下利用IIS通道实现音频,重复启动死机问题求解
  • 操作HTML5音频标签的JS库 Buzz


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3