[Scummvm-cvs-logs] CVS: scummvm/sound mididrv.cpp,1.15,1.16

Max Horn fingolfin at users.sourceforge.net
Sun Apr 28 14:31:19 CEST 2002


Update of /cvsroot/scummvm/scummvm/sound
In directory usw-pr-cvs1:/tmp/cvs-serv18230

Modified Files:
	mididrv.cpp 
Log Message:
cleanup; implemented close() for CoreAudio driver

Index: mididrv.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mididrv.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** mididrv.cpp	27 Apr 2002 14:44:07 -0000	1.15
--- mididrv.cpp	28 Apr 2002 00:32:00 -0000	1.16
***************
*** 639,642 ****
--- 639,644 ----
  class MidiDriver_CORE : public MidiDriver {
  public:
+ 	MidiDriver_CORE() : au_MusicDevice(NULL), au_output(NULL) {}
+ 
  	int open(int mode);
  	void close();
***************
*** 647,656 ****
  private:
  	AudioUnit au_MusicDevice;
  
  	StreamCallback *_stream_proc;
! 	void  *_stream_param;
! 	int 	 _mode;
  };
  
  void MidiDriver_CORE::set_stream_callback(void *param, StreamCallback *sc) {
  	_stream_param = param;
--- 649,660 ----
  private:
  	AudioUnit au_MusicDevice;
+ 	AudioUnit au_output;
  
  	StreamCallback *_stream_proc;
! 	void *_stream_param;
! 	int _mode;
  };
  
+ 
  void MidiDriver_CORE::set_stream_callback(void *param, StreamCallback *sc) {
  	_stream_param = param;
***************
*** 659,666 ****
  
  int MidiDriver_CORE::open(int mode) {
  	_mode = mode;
  	
- 	AudioUnit au_output;
- 	
  	int err;
  	struct AudioUnitConnection	auconnect;
--- 663,672 ----
  
  int MidiDriver_CORE::open(int mode) {
+ 
+ 	if (au_output != NULL)
+ 		return MERR_ALREADY_OPEN;
+ 
  	_mode = mode;
  	
  	int err;
  	struct AudioUnitConnection	auconnect;
***************
*** 668,692 ****
  	Component compid;
  	
! 	au_MusicDevice=au_output=NULL;
! 	
! 	//Open the Music Device
! 	compdesc.componentType=kAudioUnitComponentType;
! 	compdesc.componentSubType=kAudioUnitSubType_MusicDevice;
! 	compdesc.componentManufacturer=kAudioUnitID_DLSSynth;
! 	compdesc.componentFlags=0;
! 	compdesc.componentFlagsMask=0;
! 	compid=FindNextComponent(NULL,&compdesc);
! 	au_MusicDevice=(AudioUnit)OpenComponent(compid);
  	
  	// open the output unit
! 	au_output=(AudioUnit)OpenDefaultComponent(kAudioUnitComponentType,kAudioUnitSubType_Output);
  	// connect the units
! 	auconnect.sourceAudioUnit=au_MusicDevice;
! 	auconnect.sourceOutputNumber=0;
! 	auconnect.destInputNumber=0;
! 	err=AudioUnitSetProperty(au_output,kAudioUnitProperty_MakeConnection,kAudioUnitScope_Input,0,(void*)&auconnect,sizeof(struct AudioUnitConnection));
  	// initialize the units
  	AudioUnitInitialize(au_MusicDevice);
  	AudioUnitInitialize(au_output);
  	// start the output
  	AudioOutputUnitStart(au_output);
--- 674,699 ----
  	Component compid;
  	
! 	// Open the Music Device
! 	compdesc.componentType = kAudioUnitComponentType;
! 	compdesc.componentSubType = kAudioUnitSubType_MusicDevice;
! 	compdesc.componentManufacturer = kAudioUnitID_DLSSynth;
! 	compdesc.componentFlags = 0;
! 	compdesc.componentFlagsMask = 0;
! 	compid = FindNextComponent(NULL,&compdesc);
! 	au_MusicDevice = (AudioUnit)OpenComponent(compid);
  	
  	// open the output unit
! 	au_output = (AudioUnit)OpenDefaultComponent(kAudioUnitComponentType,kAudioUnitSubType_Output);
! 
  	// connect the units
! 	auconnect.sourceAudioUnit = au_MusicDevice;
! 	auconnect.sourceOutputNumber = 0;
! 	auconnect.destInputNumber = 0;
! 	err = AudioUnitSetProperty(au_output,kAudioUnitProperty_MakeConnection,kAudioUnitScope_Input,0,(void*)&auconnect,sizeof(struct AudioUnitConnection));
! 
  	// initialize the units
  	AudioUnitInitialize(au_MusicDevice);
  	AudioUnitInitialize(au_output);
+ 	
  	// start the output
  	AudioOutputUnitStart(au_output);
***************
*** 696,699 ****
--- 703,714 ----
  
  void MidiDriver_CORE::close() {
+ 
+ 	// Stop the output
+ 	AudioOutputUnitStop(au_output);
+ 	
+ 	// Cleanup
+ 	CloseComponent(au_output);
+ 	CloseComponent(au_MusicDevice);
+ 
  	_mode = 0;
  }





More information about the Scummvm-git-logs mailing list