From d8210c3978acca959bacf7d6d7569875c6685259 Mon Sep 17 00:00:00 2001
From: Damien Fouilleul <damienf@videolan.org>
Date: Thu, 27 Apr 2006 15:47:53 +0000
Subject: [PATCH] - fix for problem reported in
 http://forum.videolan.org/viewtopic.php?t=19804&sid=d4ec4d6ac1bcdc8074d8d2855d734d29

---
 modules/access/dshow/dshow.cpp | 41 ++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/modules/access/dshow/dshow.cpp b/modules/access/dshow/dshow.cpp
index d6806b3114..9e5113133e 100644
--- a/modules/access/dshow/dshow.cpp
+++ b/modules/access/dshow/dshow.cpp
@@ -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_channels )
-                                        i_channels = 2;
+                                    int val = i_channels;
+                                    if( ! val )
+                                        val = 2;
 
-                                    if( i_channels % pASCC->ChannelsGranularity
-                                     || (unsigned int)i_channels < pASCC->MinimumChannels
-                                     || (unsigned int)i_channels > pASCC->MaximumChannels )
+                                    if( val % pASCC->ChannelsGranularity
+                                     || (unsigned int)val < pASCC->MinimumChannels
+                                     || (unsigned int)val > pASCC->MaximumChannels )
                                     {
                                         // required number channels not available, try next media type
                                         FreeMediaType( *p_mt );
                                         CoTaskMemFree( (PVOID)p_mt );
                                         continue;
                                     }
-                                    pWfx->nChannels = i_channels;
+                                    pWfx->nChannels = val;
 
-                                    if( ! i_samplespersec )
-                                        i_samplespersec = 44100;
+                                    val = i_samplespersec;
+                                    if( ! val )
+                                        val = 44100;
 
-                                    if( i_samplespersec % pASCC->SampleFrequencyGranularity
-                                     || (unsigned int)i_samplespersec < pASCC->MinimumSampleFrequency
-                                     || (unsigned int)i_samplespersec > pASCC->MaximumSampleFrequency )
+                                    if( val % pASCC->SampleFrequencyGranularity
+                                     || (unsigned int)val < pASCC->MinimumSampleFrequency
+                                     || (unsigned int)val > pASCC->MaximumSampleFrequency )
                                     {
                                         // required sampling rate not available, try next media type
                                         FreeMediaType( *p_mt );
                                         CoTaskMemFree( (PVOID)p_mt );
                                         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 )
-                                            i_bitspersample = 32;
+                                            val = 32;
                                         else
-                                            i_bitspersample = 16;
+                                            val = 16;
                                     }
 
-                                    if( i_bitspersample % pASCC->BitsPerSampleGranularity
-                                     || (unsigned int)i_bitspersample < pASCC->MinimumBitsPerSample
-                                     || (unsigned int)i_bitspersample > pASCC->MaximumBitsPerSample )
+                                    if( val % pASCC->BitsPerSampleGranularity
+                                     || (unsigned int)val < pASCC->MinimumBitsPerSample
+                                     || (unsigned int)val > pASCC->MaximumBitsPerSample )
                                     {
                                         // required sample size not available, try next media type
                                         FreeMediaType( *p_mt );
@@ -1329,7 +1332,7 @@ static size_t EnumDeviceCaps( vlc_object_t *p_this, IBaseFilter *p_filter,
                                         continue;
                                     }
 
-                                    pWfx->wBitsPerSample = i_bitspersample;
+                                    pWfx->wBitsPerSample = val;
                                     pWfx->nBlockAlign = (pWfx->wBitsPerSample * pWfx->nChannels)/8;
                                     pWfx->nAvgBytesPerSec = pWfx->nSamplesPerSec * pWfx->nBlockAlign;
 
-- 
2.25.4