MCPcopy Create free account
hub / github.com/cinder/Cinder / loadBuffer

Method loadBuffer

src/cinder/audio/Source.cpp:150–185  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

148}
149
150BufferRef SourceFile::loadBuffer()
151{
152 seek( 0 );
153
154 BufferRef result = make_shared<Buffer>( mNumFrames, getNumChannels() );
155
156 if( mConverter ) {
157 // TODO: need BufferView's in order to reduce number of copies
158 Buffer converterDestBuffer( mConverter->getDestMaxFramesPerBlock(), getNumChannels() );
159 size_t readCount = 0;
160 while( true ) {
161 size_t framesNeeded = std::min( getMaxFramesPerRead(), mFileNumFrames - readCount );
162 if( framesNeeded == 0 )
163 break;
164
165 // make sourceBuffer num frames match outNumFrames so that Converter doesn't think it has more
166 if( framesNeeded != mConverterReadBuffer.getNumFrames() )
167 mConverterReadBuffer.setNumFrames( framesNeeded );
168
169 size_t outNumFrames = performRead( &mConverterReadBuffer, 0, framesNeeded );
170 CI_ASSERT( outNumFrames == framesNeeded );
171
172 pair<size_t, size_t> count = mConverter->convert( &mConverterReadBuffer, &converterDestBuffer );
173 result->copyOffset( converterDestBuffer, count.second, mReadPos, 0 );
174
175 readCount += outNumFrames;
176 mReadPos += count.second;
177 }
178 }
179 else {
180 size_t readCount = performRead( result.get(), 0, mNumFrames );
181 mReadPos = readCount;
182 }
183
184 return result;
185}
186
187void SourceFile::seek( size_t readPositionFrames )
188{

Callers

nothing calls this directly

Calls 8

getMaxFramesPerReadFunction · 0.85
copyOffsetMethod · 0.80
getNumChannelsFunction · 0.50
minFunction · 0.50
getNumFramesMethod · 0.45
setNumFramesMethod · 0.45
convertMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected