[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