Какой поток использовать для декодирования звука?

При работе с воспроизведением звука я привык к следующему шаблону:

  • один дисковый (или сетевой) поток, который считывает данные с диска (или сети) и заполняет кольцевой буфер
  • один аудиопоток, который считывает данные из кольцевого буфера, возможно, выполняет DSP и записывает в аудиооборудование. (pull или push API)

Это работает нормально, и нет проблем при работе, скажем, с файлом WAV.

Теперь, если исходные данные закодированы в сжатом формате, таком как Vorbis или MP3, для декодирования требуется некоторое время.

И, похоже, довольно часто выполняется декодирование в дисковом / сетевом потоке.

Но разве это не неправильный дизайн? В то время как доступ к диску или сети блокируется, некоторое время ЦП доступно для декодирования, но оно тратится впустую, если декодирование происходит в том же потоке.

Мне кажется, что если сеть становится медленной, то риски опустошения буфера выше, если декодирование происходит последовательно.

Итак, не следует ли выполнять декодирование в аудиопотоке?

В моем контексте я бы предпочел избегать добавления выделенного потока декодирования. Это для мобильных платформ, а SMP сейчас довольно редко. Но скажите, пожалуйста, есть ли смысл в выделенном потоке декодирования для вас.

5
задан olivierg 9 May 2011 в 19:17
поделиться