Commit d8210c39 authored by Damien Fouilleul's avatar Damien Fouilleul

- fix for problem reported in...

- fix for problem reported in http://forum.videolan.org/viewtopic.php?t=19804&sid=d4ec4d6ac1bcdc8074d8d2855d734d29
parent f9d80e5a
...@@ -1283,45 +1283,48 @@ static size_t EnumDeviceCaps( vlc_object_t *p_this, IBaseFilter *p_filter, ...@@ -1283,45 +1283,48 @@ static size_t EnumDeviceCaps( vlc_object_t *p_this, IBaseFilter *p_filter,
if( i_current_fourcc && (WAVE_FORMAT_PCM == pWfx->wFormatTag) ) if( i_current_fourcc && (WAVE_FORMAT_PCM == pWfx->wFormatTag) )
{ {
if( ! i_channels ) int val = i_channels;
i_channels = 2; if( ! val )
val = 2;
if( i_channels % pASCC->ChannelsGranularity if( val % pASCC->ChannelsGranularity
|| (unsigned int)i_channels < pASCC->MinimumChannels || (unsigned int)val < pASCC->MinimumChannels
|| (unsigned int)i_channels > pASCC->MaximumChannels ) || (unsigned int)val > pASCC->MaximumChannels )
{ {
// required number channels not available, try next media type // required number channels not available, try next media type
FreeMediaType( *p_mt ); FreeMediaType( *p_mt );
CoTaskMemFree( (PVOID)p_mt ); CoTaskMemFree( (PVOID)p_mt );
continue; continue;
} }
pWfx->nChannels = i_channels; pWfx->nChannels = val;
if( ! i_samplespersec ) val = i_samplespersec;
i_samplespersec = 44100; if( ! val )
val = 44100;
if( i_samplespersec % pASCC->SampleFrequencyGranularity if( val % pASCC->SampleFrequencyGranularity
|| (unsigned int)i_samplespersec < pASCC->MinimumSampleFrequency || (unsigned int)val < pASCC->MinimumSampleFrequency
|| (unsigned int)i_samplespersec > pASCC->MaximumSampleFrequency ) || (unsigned int)val > pASCC->MaximumSampleFrequency )
{ {
// required sampling rate not available, try next media type // required sampling rate not available, try next media type
FreeMediaType( *p_mt ); FreeMediaType( *p_mt );
CoTaskMemFree( (PVOID)p_mt ); CoTaskMemFree( (PVOID)p_mt );
continue; continue;
} }
pWfx->nSamplesPerSec = i_samplespersec; pWfx->nSamplesPerSec = val;
if( !i_bitspersample ) val = i_bitspersample;
if( ! val )
{ {
if( VLC_FOURCC('f', 'l', '3', '2') == i_current_fourcc ) if( VLC_FOURCC('f', 'l', '3', '2') == i_current_fourcc )
i_bitspersample = 32; val = 32;
else else
i_bitspersample = 16; val = 16;
} }
if( i_bitspersample % pASCC->BitsPerSampleGranularity if( val % pASCC->BitsPerSampleGranularity
|| (unsigned int)i_bitspersample < pASCC->MinimumBitsPerSample || (unsigned int)val < pASCC->MinimumBitsPerSample
|| (unsigned int)i_bitspersample > pASCC->MaximumBitsPerSample ) || (unsigned int)val > pASCC->MaximumBitsPerSample )
{ {
// required sample size not available, try next media type // required sample size not available, try next media type
FreeMediaType( *p_mt ); FreeMediaType( *p_mt );
...@@ -1329,7 +1332,7 @@ static size_t EnumDeviceCaps( vlc_object_t *p_this, IBaseFilter *p_filter, ...@@ -1329,7 +1332,7 @@ static size_t EnumDeviceCaps( vlc_object_t *p_this, IBaseFilter *p_filter,
continue; continue;
} }
pWfx->wBitsPerSample = i_bitspersample; pWfx->wBitsPerSample = val;
pWfx->nBlockAlign = (pWfx->wBitsPerSample * pWfx->nChannels)/8; pWfx->nBlockAlign = (pWfx->wBitsPerSample * pWfx->nChannels)/8;
pWfx->nAvgBytesPerSec = pWfx->nSamplesPerSec * pWfx->nBlockAlign; pWfx->nAvgBytesPerSec = pWfx->nSamplesPerSec * pWfx->nBlockAlign;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment