Merge from amd64-branch:
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 25 Mar 2010 01:59:02 +0000 (01:59 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 25 Mar 2010 01:59:02 +0000 (01:59 +0000)
44036 (sserapion)
Seems that windows cares about manifests and a mismatched processor architecture is not good. Fix amd64 paint in windows.

44772 (sserapion)
Fix warning cast to 'unsigned int' loses precision.

svn path=/trunk/; revision=46419

1  2 
reactos/base/applications/paint/rsrc.rc
reactos/base/applications/sndrec32/audio_wavein.hpp
reactos/base/applications/sndrec32/audio_waveout.hpp

index 0288ea6,0000000..7f9285b
mode 100644,000000..100644
--- /dev/null
@@@ -1,328 -1,0 +1,328 @@@
-                svalue = (unsigned int)(( unsigned char * ) *(main_buffer + aud_info.bytes_in_samples( nsamp )));
 +/* PROJECT:         ReactOS sndrec32
 + * LICENSE:         GPL - See COPYING in the top level directory
 + * FILE:            base/applications/sndrec32/audio_wavein.hpp
 + * PURPOSE:         Windows MM wave in abstraction
 + * PROGRAMMERS:     Marco Pagliaricci (irc: rendar)
 + */
 +
 +
 +#ifndef _AUDIOWAVEIN_H_
 +#define _AUDIOWAVEIN_H_
 +
 +
 +
 +#include "audio_def.hpp"
 +#include "audio_format.hpp"
 +#include "audio_receiver.hpp"
 +
 +
 +
 +_AUDIO_NAMESPACE_START_
 +
 +
 +
 +
 +enum audio_wavein_status { WAVEIN_NOTREADY, WAVEIN_READY, 
 +                           WAVEIN_RECORDING, WAVEIN_ERR,
 +                           WAVEIN_STOP, WAVEIN_FLUSHING
 +                        
 +                          };
 +
 +
 +
 +
 +
 +class audio_wavein
 +{
 +    private:
 +
 +
 +
 +        //
 +        // The new recording thread sends message to this procedure
 +        // about open recording, close, and sound data recorded
 +        //
 +
 +        static DWORD WINAPI recording_procedure( LPVOID );
 +
 +        //
 +        // When this event is signaled, then the previsiously created
 +        // recording thread will wake up and start recording audio
 +        // and will pass audio data to an `audio_receiver' object.
 +        //
 +
 +        HANDLE wakeup_recthread;
 +        HANDLE data_flushed_event;
 +
 +
 +
 +
 +    protected:
 +
 +
 +//TODO: puts these structs in private?!
 +
 +
 +
 +
 +        //
 +        // Audio wavein device stuff
 +        //
 +
 +        WAVEFORMATEX   wave_format;
 +        WAVEHDR        * wave_headers;
 +        HWAVEIN        wavein_handle;
 +
 +
 +
 +    
 +
 +        audio_format aud_info;
 +        
 +        audio_receiver & audio_rcvd;
 +
 +
 +        
 +        //
 +        // Audio Recorder Thread id
 +        //
 +
 +        DWORD     recthread_id;
 +
 +
 +        
 +
 +        //
 +        // Object status
 +        //
 +
 +        audio_wavein_status status;
 +
 +
 +
 +
 +
 +
 +
 +        //
 +        // How many seconds of audio
 +        // can record the internal buffer
 +        // before flushing audio data 
 +        // to the `audio_receiver' class?
 +        //
 +
 +        float buf_secs;
 +
 +
 +        //
 +        // The temporary buffers for the audio
 +        // data incoming from the wavein device
 +        // and its size, and its total number.
 +        //
 +
 +        BYTE * main_buffer;
 +        unsigned int mb_size;
 +
 +        unsigned int buffers;
 +
 +
 +
 +
 +
 +        //
 +        // Protected Functions
 +        //
 +
 +
 +        //initialize all structures and variables.
 +        void init_( void );
 +
 +        void alloc_buffers_mem_( unsigned int, float );
 +        void free_buffers_mem_( void );
 +
 +        void init_headers_( void );
 +        void prep_headers_( void );
 +        void unprep_headers_( void );
 +        void add_buffers_to_driver_( void );
 +
 +
 +
 +
 +
 +
 +
 +    public:
 +
 +
 +        //
 +        // Ctors
 +        //
 +
 +        audio_wavein(
 +            const audio_format & a_info, audio_receiver & a_receiver )
 +
 +            : wave_headers( 0 ),
 +            aud_info( a_info ), audio_rcvd( a_receiver ), 
 +            status( WAVEIN_NOTREADY ), main_buffer( 0 ), mb_size( 0 ),
 +            buffers( _AUDIO_DEFAULT_WAVEINBUFFERS )
 +        {
 +
 +            //
 +            // Initializing internal wavein data
 +            //
 +            
 +            
 +            init_();
 +
 +            aud_info = a_info;
 +        }
 +
 +
 +
 +
 +
 +
 +
 +        //
 +        // Dtor
 +        //
 +
 +        ~audio_wavein( void )
 +        {
 +            
 +            //close(); TODO!
 +
 +        }
 +
 +
 +
 +        //
 +        // Public functions
 +        //
 +
 +        void open( void );
 +        void close ( void );
 +
 +
 +        void start_recording( void );
 +        void stop_recording( void );
 +
 +
 +
 +        audio_wavein_status current_status ( void ) const
 +        {
 +            return status;
 +        }
 +
 +        float buffer_secs( void ) const
 +        { return buf_secs; }
 +
 +
 +        void buffer_secs( float bsecs )
 +        { 
 +            //
 +            // Some checking
 +            //
 +
 +            if ( bsecs <= 0 )
 +                return;
 +
 +
 +            //
 +            // Set seconds lenght for each
 +            // buffer.
 +            //
 +
 +            buf_secs = bsecs; 
 +        }
 +
 +
 +        unsigned int total_buffers( void ) const
 +        { return buffers; }
 +
 +
 +
 +        void total_buffers( unsigned int tot_bufs )
 +        {
 +
 +            //
 +            // Some checking
 +            //
 +
 +            if ( tot_bufs == 0 )
 +                return;
 +
 +            
 +            //
 +            // Sets the number of total buffers.
 +            //
 +
 +            buffers = tot_bufs;
 +        }
 +
 +
 +        audio_format format( void ) const
 +        { return aud_info; }
 +
 +
 +
 +        
 +        BYTE * buf( void ) { return main_buffer; }
 +        unsigned int bufsz( void ) { return mb_size; }
 +
 +
 +        unsigned int samplevalue_max( void )
 +        {
 +
 +            if ( aud_info.bits() == 16 )
 +                return (unsigned int )65535;
 +
 +            else if ( aud_info.bits() == 8 )
 +                return (unsigned int)255;
 +
 +            else 
 +                return 0;
 +        }
 +
 +
 +        unsigned tot_samples_buf( void )
 +        {
 +
 +
 +            return aud_info.samples_in_bytes( mb_size );
 +
 +
 +        }
 +
 +        unsigned int nsample ( unsigned int nsamp )
 +        {
 +
 +
 +            unsigned int svalue;
 +
 +
 +
 +            if ( aud_info.bits() == 16 )
 +                svalue = ( unsigned int )  abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp ))));
 +            else if ( aud_info.bits() == 8 )
++               svalue = (unsigned int)(( ptrdiff_t ) *(main_buffer + aud_info.bytes_in_samples( nsamp )));
 +
 +            else 
 +                svalue = 0;
 +
 +            return svalue;
 +
 +        }
 +
 +    
 +};
 +
 +
 +
 +
 +_AUDIO_NAMESPACE_END_
 +
 +
 +
 +
 +#endif //ifdef _AUDIOWAVEIN_H_
index a36518d,0000000..0e22afd
mode 100644,000000..100644
--- /dev/null
@@@ -1,251 -1,0 +1,251 @@@
-                svalue = (unsigned int)(( unsigned char * ) *(main_buffer + aud_info.bytes_in_samples( nsamp )));
 +/* PROJECT:         ReactOS sndrec32
 + * LICENSE:         GPL - See COPYING in the top level directory
 + * FILE:            base/applications/sndrec32/audio_waveout.hpp
 + * PURPOSE:         Windows MM wave out abstraction
 + * PROGRAMMERS:     Marco Pagliaricci (irc: rendar)
 + */
 +
 +
 +
 +
 +#ifndef _AUDIOWAVEOUT__H_
 +#define _AUDIOWAVEOUT__H_
 +
 +
 +#include "audio_def.hpp"
 +#include "audio_format.hpp"
 +
 +
 +#include "audio_producer.hpp"
 +
 +
 +
 +_AUDIO_NAMESPACE_START_
 +
 +
 +
 +
 +
 +enum audio_waveout_status { WAVEOUT_NOTREADY, WAVEOUT_READY, 
 +                            WAVEOUT_PLAYING, WAVEOUT_FLUSHING,
 +                            WAVEOUT_PAUSED, WAVEOUT_STOP,
 +                            WAVEOUT_ERR,
 +                
 +                           };
 +
 +
 +
 +
 +
 +class audio_waveout
 +{
 +
 +    friend class audio_buffer;
 +
 +
 +
 +    private:
 +
 +
 +        static DWORD WINAPI 
 +            playing_procedure( LPVOID );
 +
 +
 +        
 +        HANDLE wakeup_playthread;
 +
 +        
 +
 +
 +    protected:
 +
 +        
 +        WAVEFORMATEX   wave_format;
 +        WAVEHDR        * wave_headers;
 +        HWAVEOUT       waveout_handle;
 +
 +        
 +        
 +
 +        
 +        const audio_format & aud_info;
 +        audio_producer & audio_buf;
 +
 +
 +        
 +
 +
 +
 +        //
 +        // Audio Playing Thread id
 +        //
 +
 +        DWORD     playthread_id;
 +
 +
 +
 +
 +
 +        audio_waveout_status status;
 +
 +
 +
 +
 +        float buf_secs;
 +
 +
 +
 +        //
 +        // The temporary buffers for the audio
 +        // data outgoing to the waveout device
 +        // and its size, and its total number.
 +        //
 +
 +
 +        //base address for entire memory
 +        BYTE * main_buffer;
 +
 +        //size in bytes for the entire memory
 +        unsigned int mb_size;
 +
 +        //number of little buffers
 +        unsigned int buffers;
 +
 +
 +        
 +
 +
 +
 +        //
 +        // Protected Functions
 +        //
 +
 +        void init_( void );
 +        void alloc_buffers_mem_( unsigned int, float );
 +        void free_buffers_mem_( void );
 +
 +
 +        void init_headers_( void );
 +        void prep_headers_( void );
 +        void unprep_headers_( void );
 +
 +
 +
 +        
 +
 +
 +
 +    public:
 +
 +        //
 +        // Ctors
 +        //
 +
 +        audio_waveout( const audio_format & aud_fmt,
 +                                audio_producer & a_buf )
 +
 +            : wave_headers( 0 ), aud_info( aud_fmt ),
 +            audio_buf( a_buf ),  status( WAVEOUT_NOTREADY ), 
 +            main_buffer( 0 ), mb_size( 0 ),
 +            buffers( _AUDIO_DEFAULT_WAVEOUTBUFFERS )
 +        {
 +
 +            //
 +            // Initializing internal wavein data
 +            //
 +            
 +            
 +            init_();
 +
 +        }
 +
 +        
 +
 +
 +
 +        
 +        //
 +        // Dtor
 +        //
 +
 +        ~audio_waveout( void )
 +        {  }
 +
 +
 +
 +
 +        //
 +        // Public Functions
 +        //
 +
 +        void open  ( void );
 +        void play  ( void );
 +        void pause ( void );
 +        void stop  ( void );
 +        void close ( void );
 +
 +
 +        audio_waveout_status current_status( void )
 +        { return status; }
 +
 +
 +
 +
 +        BYTE * buf( void ) { return main_buffer; }
 +        unsigned int bufsz( void ) { return mb_size; }
 +
 +
 +        unsigned int samplevalue_max( void )
 +        {
 +
 +            if ( aud_info.bits() == 16 )
 +                return (unsigned int )65535;
 +
 +            else if ( aud_info.bits() == 8 )
 +                return (unsigned int)255;
 +
 +            else 
 +                return 0;
 +        }
 +
 +
 +        unsigned tot_samples_buf( void )
 +        {
 +
 +
 +            return aud_info.samples_in_bytes( mb_size );
 +
 +
 +        }
 +
 +        unsigned int nsample ( unsigned int nsamp )
 +        {
 +
 +
 +            unsigned int svalue;
 +
 +
 +
 +            if ( aud_info.bits() == 16 )
 +                svalue = ( unsigned int )  abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp ))));
 +            else if ( aud_info.bits() == 8 )
++               svalue = (unsigned int)(( ptrdiff_t ) *(main_buffer + aud_info.bytes_in_samples( nsamp )));
 +
 +            else 
 +                svalue = 0;
 +
 +            return svalue;
 +
 +        }
 +
 +
 +};
 +
 +
 +
 +_AUDIO_NAMESPACE_END_
 +
 +
 +
 +
 +#endif //ifdef _AUDIOWAVEOUT__H_