an attempted fix for bug 1368
- don't close and reopen an audioOutput when it has a fixed output format, and closing and reopening the device is unneccessary when the input audio format changes git-svn-id: https://svn.musicpd.org/mpd/trunk@4908 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
e1d1a703f1
commit
e9f51778ef
@ -155,33 +155,38 @@ int initAudioOutput(AudioOutput *ao, ConfigParam * param)
|
||||
|
||||
int openAudioOutput(AudioOutput * audioOutput, AudioFormat * audioFormat)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
if (audioOutput->open) {
|
||||
if (cmpAudioFormat(audioFormat, &audioOutput->inAudioFormat)
|
||||
== 0) {
|
||||
if (audioOutput->open)
|
||||
{
|
||||
if (0==cmpAudioFormat(audioFormat, &audioOutput->inAudioFormat))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
closeAudioOutput(audioOutput);
|
||||
}
|
||||
|
||||
copyAudioFormat(&audioOutput->inAudioFormat, audioFormat);
|
||||
|
||||
if (audioOutput->convertAudioFormat) {
|
||||
if (audioOutput->convertAudioFormat)
|
||||
{
|
||||
copyAudioFormat(&audioOutput->outAudioFormat,
|
||||
&audioOutput->reqAudioFormat);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
copyAudioFormat(&audioOutput->outAudioFormat,
|
||||
&audioOutput->inAudioFormat);
|
||||
if (audioOutput->open) closeAudioOutput(audioOutput);
|
||||
}
|
||||
|
||||
if (!audioOutput->open)
|
||||
{
|
||||
ret = audioOutput->openDeviceFunc(audioOutput);
|
||||
}
|
||||
|
||||
if (cmpAudioFormat(&audioOutput->inAudioFormat,
|
||||
&audioOutput->outAudioFormat) == 0) {
|
||||
audioOutput->sameInAndOutFormats = 1;
|
||||
} else
|
||||
audioOutput->sameInAndOutFormats = 0;
|
||||
audioOutput->sameInAndOutFormats =
|
||||
!cmpAudioFormat(&audioOutput->inAudioFormat,
|
||||
&audioOutput->outAudioFormat);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -190,9 +195,8 @@ static void convertAudioFormat(AudioOutput * audioOutput, char **chunkArgPtr,
|
||||
int *sizeArgPtr)
|
||||
{
|
||||
int size =
|
||||
pcm_sizeOfOutputBufferForAudioFormatConversion(&
|
||||
(audioOutput->
|
||||
inAudioFormat),
|
||||
pcm_sizeOfOutputBufferForAudioFormatConversion(
|
||||
&(audioOutput->inAudioFormat),
|
||||
*sizeArgPtr,
|
||||
&(audioOutput->outAudioFormat));
|
||||
|
||||
@ -202,8 +206,10 @@ static void convertAudioFormat(AudioOutput * audioOutput, char **chunkArgPtr,
|
||||
audioOutput->convBufferLen = size;
|
||||
}
|
||||
|
||||
pcm_convertAudioFormat(&(audioOutput->inAudioFormat), *chunkArgPtr,
|
||||
*sizeArgPtr, &(audioOutput->outAudioFormat),
|
||||
pcm_convertAudioFormat(&(audioOutput->inAudioFormat),
|
||||
*chunkArgPtr,
|
||||
*sizeArgPtr,
|
||||
&(audioOutput->outAudioFormat),
|
||||
audioOutput->convBuffer);
|
||||
|
||||
*sizeArgPtr = size;
|
||||
|
Loading…
Reference in New Issue
Block a user