[SNDREC32]
[reactos.git] / reactos / base / applications / sndrec32 / audio_resampler_acm.cpp
index 32b7b4f..ddca7db 100644 (file)
  * PROGRAMMERS:     Marco Pagliaricci (irc: rendar)
  */
 
-
 #include "stdafx.h"
 #include "audio_resampler_acm.hpp"
-//#include <stdio.h>
-
-
 
 _AUDIO_NAMESPACE_START_
 
-
-/////////////////////////////////////////
-///////     Private Functions    ////////
-/////////////////////////////////////////
-
+/* Private Functions */
 
 void
-audio_resampler_acm::init_( void )
+audio_resampler_acm::init_(void)
 {
+    /* Zeroing structures */
+    ZeroMemory(&acm_header, sizeof(ACMSTREAMHEADER));
+    ZeroMemory(&wformat_src, sizeof(WAVEFORMATEX));
+    ZeroMemory(&wformat_dst, sizeof(WAVEFORMATEX));
 
+    /* Setting structures sizes */
+    acm_header.cbStruct = sizeof(ACMSTREAMHEADER);
+    wformat_src.cbSize = sizeof(WAVEFORMATEX);
+    wformat_dst.cbSize = sizeof(WAVEFORMATEX);
 
-
-    //
-    // Zeroing structures
-    //
-
-    ZeroMemory( &acm_header, sizeof( ACMSTREAMHEADER ));
-    ZeroMemory( &wformat_src, sizeof( WAVEFORMATEX ));
-    ZeroMemory( &wformat_dst, sizeof( WAVEFORMATEX ));
-
-
-    
-    
-    //
-    // Setting structures sizes
-    //
-
-    acm_header.cbStruct = sizeof( ACMSTREAMHEADER );
-    wformat_src.cbSize = sizeof( WAVEFORMATEX );
-    wformat_dst.cbSize = sizeof( WAVEFORMATEX );
-
-
-
-
-    //
-    // Setting WAVEFORMATEX structure parameters
-    // according to `audio_format' in/out classes
-    //
+    /* Setting WAVEFORMATEX structure parameters 
+       according to `audio_format' in/out classes */
 
     wformat_src.wFormatTag = WAVE_FORMAT_PCM;
     wformat_src.nSamplesPerSec = audfmt_in.sample_rate();
     wformat_src.nChannels = audfmt_in.channels();
     wformat_src.wBitsPerSample = audfmt_in.bits();
-    wformat_src.nAvgBytesPerSec =  audfmt_in.byte_rate();
+    wformat_src.nAvgBytesPerSec = audfmt_in.byte_rate();
     wformat_src.nBlockAlign = audfmt_in.block_align();
 
-
     wformat_dst.wFormatTag = WAVE_FORMAT_PCM;
     wformat_dst.nSamplesPerSec = audfmt_out.sample_rate();
     wformat_dst.nChannels = audfmt_out.channels();
     wformat_dst.wBitsPerSample = audfmt_out.bits();
-    wformat_dst.nAvgBytesPerSec =  audfmt_out.byte_rate();
+    wformat_dst.nAvgBytesPerSec = audfmt_out.byte_rate();
     wformat_dst.nBlockAlign = audfmt_out.block_align();
 
-
-
-    //
-    // Init acm structures completed successfull
-    //
+    /* Init acm structures completed successful */
 }
 
-
-
-
-
-
-
-
-
-
-
-/////////////////////////////////////////
-///////     Public Functions     ////////
-/////////////////////////////////////////
-
-
-
+/* Public Functions */
 
 void
-audio_resampler_acm::open( void )
+audio_resampler_acm::open(void)
 {
-
-
     MMRESULT err;
 
+    /* Opens ACM stream */
+    err = acmStreamOpen(&acm_stream,
+                        0,
+                        &wformat_src,
+                        &wformat_dst,
+                        0, 0, 0,
+                        ACM_STREAMOPENF_NONREALTIME);
 
-    //
-    // Opens ACM stream
-    //
-
-    err = acmStreamOpen( &acm_stream, 0, &wformat_src, &wformat_dst, 
-                    0, 0, 0, ACM_STREAMOPENF_NONREALTIME );
-
-
-    if ( err != MMSYSERR_NOERROR )
+    if (err != MMSYSERR_NOERROR)
     {
-        //TODO: throw error
-        MessageBox( 0, _T("acmOpen error: %i"), _T("ERROR"), MB_ICONERROR );
-
+        /* TODO: throw error */
+        MessageBox(0, _T("acmOpen error: %i"), _T("ERROR"), MB_ICONERROR);
     }
 
+    /* Calcs source buffer length */
+    src_buflen = (unsigned int)((float)audfmt_in.byte_rate() * (float)buf_secs);
 
+    /* Calcs destination source buffer length with help of ACM apis */
+    err = acmStreamSize(acm_stream,
+                        src_buflen,
+                        &dst_buflen,
+                        ACM_STREAMSIZEF_SOURCE);
 
-    //
-    // Calcs source buffer length
-    //
-
-    src_buflen = ( unsigned int )
-        (( float )audfmt_in.byte_rate() * ( float )buf_secs );
-
-
-    
-    
-    
-    
-    //
-    // Calcs destination source buffer length
-    // with help of ACM apis
-    //
-
-    err = acmStreamSize( acm_stream, 
-        src_buflen, &dst_buflen, ACM_STREAMSIZEF_SOURCE );
-    
-
-    if ( err != MMSYSERR_NOERROR )
+    if (err != MMSYSERR_NOERROR)
     {
-        //TODO: throw error
-        MessageBox( 0, _T("acmStreamSize error"), _T("ERROR"), MB_ICONERROR );
-
-
+        /* TODO: throw error */
+        MessageBox(0, _T("acmStreamSize error"), _T("ERROR"), MB_ICONERROR);
     }
 
-
-
-    //
-    // Initialize ACMSTREAMHEADER structure,
-    // and alloc memory for source and destination
-    // buffers.
-    //
+    /* Initialize ACMSTREAMHEADER structure,
+       and alloc memory for source and destination buffers */
 
     acm_header.fdwStatus = 0;
     acm_header.dwUser = 0;
 
-    
-    acm_header.pbSrc = ( LPBYTE ) new BYTE [ src_buflen ];
+    acm_header.pbSrc = (LPBYTE) new BYTE[src_buflen];
     acm_header.cbSrcLength = src_buflen;
     acm_header.cbSrcLengthUsed = 0;
     acm_header.dwSrcUser = src_buflen;
 
-
-    acm_header.pbDst = ( LPBYTE ) new BYTE [ dst_buflen ];
+    acm_header.pbDst = (LPBYTE) new BYTE[dst_buflen];
     acm_header.cbDstLength = dst_buflen;
     acm_header.cbDstLengthUsed = 0;
     acm_header.dwDstUser = dst_buflen;
 
-
-
-
-    //
-    // Give ACMSTREAMHEADER initialized correctly to the
-    // driver.
-    //
-
-    err = acmStreamPrepareHeader( acm_stream, &acm_header, 0L );
-
-    if ( err != MMSYSERR_NOERROR )
+    /* Give ACMSTREAMHEADER initialized correctly to the driver */
+    err = acmStreamPrepareHeader(acm_stream, &acm_header, 0L);
+    if (err != MMSYSERR_NOERROR)
     {
-        //TODO: throw error
-        MessageBox( 0, _T("acmStreamPrepareHeader error"), _T("ERROR"), MB_ICONERROR );
-
-
+        /* TODO: throw error */
+        MessageBox(0, _T("acmStreamPrepareHeader error"), _T("ERROR"), MB_ICONERROR);
     }
 
-
-
-
-    //
-    // ACM stream successfully opened.
-    //
-
+    /* ACM stream successfully opened */
     stream_opened = true;
-
 }
 
-
-
-
 void
-audio_resampler_acm::close( void )
+audio_resampler_acm::close(void)
 {
-
-
     MMRESULT err;
 
-
-    if ( acm_stream )
+    if (acm_stream)
     {
-
-        if ( acm_header.fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED )
+        if (acm_header.fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED)
         {
-
             acm_header.cbSrcLength = src_buflen;
             acm_header.cbDstLength = dst_buflen;
 
-            err = acmStreamUnprepareHeader( acm_stream, &acm_header, 0L );
-
-        
-            if ( err != MMSYSERR_NOERROR )
+            err = acmStreamUnprepareHeader(acm_stream, &acm_header, 0L);
+            if (err != MMSYSERR_NOERROR)
             {
-            
-                //
-                // Free buffer memory
-                //
-
-                if ( acm_header.pbSrc != 0 )
+                /* Free buffer memory */
+                if (acm_header.pbSrc != 0)
+                {
                     delete[] acm_header.pbSrc;
+                    acm_header.pbSrc = 0;
+                }
 
-                if ( acm_header.pbDst != 0 )
+                if (acm_header.pbDst != 0)
+                {
                     delete[] acm_header.pbDst;
+                    acm_header.pbDst = 0;
+                }
 
-
-                //
-                // Re-init structures
-                //
-
+                /* Re-init structures */
                 init_();
-
-                //
-                // Updating status
-                //
-
+                /* Updating status */
                 stream_opened = false;
-
-
-                //TODO: throw error
-                MessageBox( 0, _T("acmStreamUnPrepareHeader error"), _T("ERROR"), MB_ICONERROR );
-
-            
+                /* TODO: throw error */
+                MessageBox(0, _T("acmStreamUnPrepareHeader error"), _T("ERROR"), MB_ICONERROR);
             }
         }
 
-
-        err = acmStreamClose( acm_stream, 0 );
+        err = acmStreamClose(acm_stream, 0);
         acm_stream = 0;
 
-        if ( err != MMSYSERR_NOERROR )
+        if (err != MMSYSERR_NOERROR)
         {
-
-            //
-            // Free buffer memory
-            //
-
-            if ( acm_header.pbSrc != 0 )
+            /* Free buffer memory */
+            if (acm_header.pbSrc != 0)
+            {
                 delete[] acm_header.pbSrc;
+                acm_header.pbSrc = 0;
+            }
 
-            if ( acm_header.pbDst != 0 )
+            if (acm_header.pbDst != 0)
+            {
                 delete[] acm_header.pbDst;
+                acm_header.pbDst = 0;
+            }
 
-
-            //
-            // Re-init structures
-            //
-
+            /* Re-init structures */
             init_();
-
-
-            //
-            // Updating status
-            //
-
+            /* Updating status */
             stream_opened = false;
-
-
-            //TODO: throw error!
-
-            MessageBox( 0, _T("acmStreamClose error"), _T("ERROR"), MB_ICONERROR );
-
-
+            /* TODO: throw error! */
+            MessageBox(0, _T("acmStreamClose error"), _T("ERROR"), MB_ICONERROR);
         }
 
+    } /* if acm_stream != 0 */
 
-    }//if acm_stream != 0
-
-
-
-
-
-
-    //
-    // Free buffer memory
-    //
-
-    if ( acm_header.pbSrc != 0 )
+    /* Free buffer memory */
+    if (acm_header.pbSrc != 0)
         delete[] acm_header.pbSrc;
 
-    if ( acm_header.pbDst != 0 )
+    if (acm_header.pbDst != 0)
         delete[] acm_header.pbDst;
 
-
-    //
-    // Re-init structures
-    //
-
+    /* Re-init structures */
     init_();
-
-
-    //
-    // Updating status
-    //
-
+    /* Updating status */
     stream_opened = false;
 
-
-
-    //
-    // ACM sream successfully closed.
-    //
-
-
+    /* ACM sream successfully closed */
 }
 
-
-
-
 void 
-audio_resampler_acm::audio_receive( unsigned char * data, unsigned int size )
+audio_resampler_acm::audio_receive(unsigned char *data, unsigned int size)
 {
-
     MMRESULT err;
 
-    //
-    // Checking for acm stream opened
-    //
-
-    if ( stream_opened )
+    /* Checking for acm stream opened */
+    if (stream_opened)
     {
-
-        
-        //
-        // Copy audio data from extern to
-        // internal source buffer
-        //
-
-        memcpy( acm_header.pbSrc, data, size );
-
+        /* Copy audio data from extern to internal source buffer */
+        memcpy(acm_header.pbSrc, data, size);
 
         acm_header.cbSrcLength = size;
         acm_header.cbDstLengthUsed = 0;
 
-        err = acmStreamConvert( acm_stream, &acm_header, ACM_STREAMCONVERTF_BLOCKALIGN );
+        err = acmStreamConvert(acm_stream, &acm_header, ACM_STREAMCONVERTF_BLOCKALIGN);
 
-        if ( err != MMSYSERR_NOERROR )
+        if (err != MMSYSERR_NOERROR)
         {
-            //TODO: throw error
-            MessageBox( 0, _T("acmStreamConvert error"), _T("ERROR"), MB_ICONERROR );
-
-
+            /* TODO: throw error */
+            MessageBox(0, _T("acmStreamConvert error"), _T("ERROR"), MB_ICONERROR);
         }
 
+        /* Wait for sound conversion */
+        while ((ACMSTREAMHEADER_STATUSF_DONE & acm_header.fdwStatus) == 0);
 
-        //
-        // Wait for sound conversion
-        //
-
-        while(( ACMSTREAMHEADER_STATUSF_DONE & acm_header.fdwStatus ) == 0 );
-    
-
-        
-
-
-        //
-        // Copy resampled audio, to destination buffer.
-        //
-
-        //memcpy( pbOutputData, acm_header.pbDst, acm_header.cbDstLengthUsed );
-
-
+        /* Copy resampled audio, to destination buffer */
+        //memcpy(pbOutputData, acm_header.pbDst, acm_header.cbDstLengthUsed);
     }
-
 }
 
-
-
-
-
-
-
-
-
-
 _AUDIO_NAMESPACE_END_