当与音频重放工作我用以下模式:哪个线程用于音频解码?
- 一个磁盘(或网络)螺纹,其从磁盘读取(或网络)的数据,并填充一个ringbuffer
- 一个声音线程,其读取从ringbuffer数据,可能执行DSP,并写入音频硬件 (拉或推API)
这工作得很好,而且也有,比如说,WAV文件工作时没有问题。
现在,如果源数据以Vorbis或MP3等压缩格式编码,则解码需要一些时间。
而且在磁盘/网络线程中执行解码似乎很常见。
但是这不是错误的设计?当磁盘或网络访问被阻塞时,一些CPU时间可用于解码,但是如果解码发生在同一线程中则会浪费时间。
在我看来,如果网络变慢,那么如果解码顺序发生,那么缓冲区欠载的风险就会更高。
那么,不应该在音频线程中执行解码?
在我的情况下,我宁愿避免添加专用的解码线程。它适用于移动平台,SMP现在非常罕见。但是请告诉您一个专用的解码线程是否真的对您有意义。
你说得对,在2线程的情况下,解码应该在网络线程中执行。我在写完后意识到,由于音频解码是基于数据包的,因此它可能会在每N个音频周期阻塞很长时间,这会导致xrun。也就是说,专用解码线程对我来说越来越有吸引力,特别是对于网络(或慢速磁盘/存储)流。 – olivierg 2011-05-09 20:24:48