[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [10997] branches/soc-2007-hcube/intern/ tinySND/samplerate/SND_FXSRC.cpp: Added more implemetation.

Csaba Hruska csaba.hruska at gmail.com
Thu Jun 21 14:15:14 CEST 2007


Revision: 10997
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=10997
Author:   hcube
Date:     2007-06-21 14:15:14 +0200 (Thu, 21 Jun 2007)

Log Message:
-----------
Added more implemetation.

Modified Paths:
--------------
    branches/soc-2007-hcube/intern/tinySND/samplerate/SND_FXSRC.cpp

Modified: branches/soc-2007-hcube/intern/tinySND/samplerate/SND_FXSRC.cpp
===================================================================
--- branches/soc-2007-hcube/intern/tinySND/samplerate/SND_FXSRC.cpp	2007-06-21 12:14:10 UTC (rev 10996)
+++ branches/soc-2007-hcube/intern/tinySND/samplerate/SND_FXSRC.cpp	2007-06-21 12:15:14 UTC (rev 10997)
@@ -14,87 +14,87 @@
 
 SND_FXSRC::SND_FXSRC(void)
 {
-    int result;
-    mSRC_State = src_new( SRC_SINC_MEDIUM_QUALITY, 1, &result );
-    mConverterType = SRC_SINC_MEDIUM_QUALITY;
+	int result;
+	mSRC_State = src_new( SRC_SINC_MEDIUM_QUALITY, 1, &result );
+	mConverterType = SRC_SINC_MEDIUM_QUALITY;
     
-    // assign mix buffer
-    mBuffer = new float[ SND_MIX_BUFFER_SIZE ];
-    mBufferSize = SND_MIX_BUFFER_SIZE;
+	// assign mix buffer
+	mBuffer = new float[ SND_MIX_BUFFER_SIZE ];
+	mBufferSize = SND_MIX_BUFFER_SIZE;
 }
 
 SND_FXSRC::~SND_FXSRC(void)
 {
-    if( mSRC_State != 0 )
-    {
-	src_delete( mSRC_State );
-    }
-    delete mBuffer;
+	if( mSRC_State != 0 )
+	{
+		src_delete( mSRC_State );
+	}
+	delete mBuffer;
 }
 
 void SND_FXSRC::setGain( float gain )
 {
-    mGain = gain;
+	mGain = gain;
 }
 
 float SND_FXSRC::getGain(void)
 {
-    return mGain;
+	return mGain;
 }
 
 void SND_FXSRC::setMute( bool isMuted )
 {
-    mIsMuted = isMuted;
+	mIsMuted = isMuted;
 }
 
 bool SND_FXSRC::isMuted(void)
 {
-    return mIsMuted;
+	return mIsMuted;
 }
 
 void SND_FXSRC::setInput( SND_SoundInterface *input )
 {
-    mInput = input;
+	mInput = input;
 }
 
 SND_SoundInterface *SND_FXSRC::getInput(void)
 {
-    return mInput;
+	return mInput;
 }
 
 void SND_FXSRC::setSampleRate( float sampleRate )
 {
-    mSampleRate = sampleRate;
+	mSampleRate = sampleRate;
 }
 
 float SND_FXSRC::getSampleRate(void)
 {
-    return mSampleRate;
+	return mSampleRate;
 }
 
 void SND_FXSRC::setConverterType( int converterType )
 {
-    assert( mSRC_State != 0 );
-    
-    if( mConverterType == converterType )
-    {
-    	return;
-    }
-    mConverterType = converterType;
-    // close old converter and open a new one
-    src_delete( mSRC_State );
-    int result;
-    mSRC_State = src_new( mConverterType, 1, &result );
+	assert( mSRC_State != 0 );
+
+	if( mConverterType == converterType )
+	{
+		return;
+	}
+	mConverterType = converterType;
+	// close old converter and open a new one
+	src_delete( mSRC_State );
+	int result;
+	mSRC_State = src_new( mConverterType, 1, &result );
 }
 
 int SND_FXSRC::getConverterType(void)
 {
-    return mConverterType;
+	return mConverterType;
 }
 
 bool SND_FXSRC::isDataAvailable()
 {
-    return !mIsMuted && mGain!=0 && mInput!=0 && mInput->isDataAvailable();
+	return !mIsMuted && mGain!=0 && mInput!=0 && mInput->isDataAvailable();
 }
 
 float *SND_FXSRC::getPCMDataPtr( int framesNum )
@@ -111,14 +111,28 @@
 	double	src_ratio ;
 } SRC_DATA ;
 */
-    assert( mSRC_State != 0 );
-    assert( mInput != 0 );
-    
-    // assign own buffer if we have not enought space
-    // calculate how many samples src need and get it from the input
-    mSRC_Data.src_ratio = mSampleRate / mInput->getSampleRate();
-    src_process( mSRC_State, &mSRC_Data );
+	assert( mSRC_State != 0 );
+	assert( mInput != 0 );
 
-    return mBuffer;
+	// assign own buffer if we have not enought space
+	// !!!! UNIMPLEMENTED YET !!!!!!!!!
+	
+	mSRC_Data.src_ratio = mSampleRate / mInput->getSampleRate();
+	
+	if( mSRC_Data.src_ratio == 1.0 )
+	{
+		// no work is needed, data is in proper format
+		return mInput->getPCMDataPtr( framesNum );
+	}
+
+	mSRC_Data.output_frames = framesNum;
+	mSRC_Data.data_out = mBuffer;
+	mSRC_Data.input_frames = (long)(((float)framesNum) / mSRC_Data.src_ratio);
+	mSRC_Data.data_in = mInput->getPCMDataPtr( mSRC_Data.input_frames );
+	mSRC_Data.end_of_input = mSRC_Data.input_frames;
+
+	src_process( mSRC_State, &mSRC_Data );
+	
+	return mBuffer;
 }
 





More information about the Bf-blender-cvs mailing list