Cuando se trabaja con la reproducción de audio que estoy acostumbrado a la siguiente distribución:¿Qué hilo usar para la decodificación de audio?
- un disco (o red) hilo que lee datos desde el disco (o la red) y llena un buffer circular
- un hilo de audio que lee datos del buffer circular, posiblemente realiza DSP, y escribe en hardware de audio (tirar o empujar API)
Esto funciona bien, y no hay ningún problema cuando se trabaja con, por ejemplo, un archivo WAV.
Ahora, si los datos de origen están codificados en un formato comprimido, como Vorbis o MP3, la decodificación lleva algo de tiempo.
Y parece que es bastante común realizar decodificación en el hilo de disco/red.
¿Pero no es este diseño incorrecto? Mientras que el disco o los bloques de acceso a la red, hay tiempo de CPU disponible para la decodificación, pero se desperdicia si la decodificación ocurre en el mismo hilo.
Me parece que si las redes se vuelven lentas, los riesgos de subutilización de memoria intermedia son mayores si la decodificación se realiza de forma secuencial.
Entonces, ¿no debería realizarse la decodificación en el hilo de audio?
En mi contexto, preferiría evitar agregar un hilo de descodificación dedicado. Es para plataformas móviles y SMP es bastante raro en este momento. Pero por favor, dígame si un hilo de descodificación dedicado realmente tiene sentido para usted.
Tiene razón, en el caso de 2 hilos, la decodificación debe realizarse en el hilo de la red. Me di cuenta después de escribir que dado que la decodificación de audio se basa en paquetes, puede bloquear durante un largo tiempo cada N ciclos de audio, y eso causará un xrun. Dicho esto, el hilo de decodificación dedicado se está volviendo cada vez más atractivo para mí, especialmente para transmisiones en red (o discos lentos/almacenamiento). – olivierg