Creating SoundStream addon

So I want to use the Microsoft Media Framework and am writing an addon but I am not sure I fully understand how the audio calls work within the openframeworks app. I looked at this thread but his setup is obviously different since he is just passing the pointer to the output buffer into a different class to handle filling the buffer.

I took a look at the rtAudioSoundStream setup to get a feel for where to look and from what I can tell during the setup it calls this:

audio ->openStream( (nOutputChannels>0)?&outputParameters:NULL, (nInputChannels>0)?&inputParameters:NULL, RTAUDIO_FLOAT32, sampleRate, &bufferFrames, &rtAudioCallback, this, &options);

which is a class within rtaudio that basically sets up everything and then tells it to poll the function rtAudioCallback to get the input and output buffers. I think this is where I get confused at how things are handled. Is it constantly polling that function to fill the buffers that are then passed into rtaudio or does it call it once just to setup the pointers accordingly? I am pretty sure it is the former just because there is a warning for buffer over/under running but the function looks like this:

int ofRtAudioSoundStream::rtAudioCallback(void *outputBuffer, void *inputBuffer, unsigned int bufferSize, double streamTime, RtAudioStreamStatus status, void *data){
	ofRtAudioSoundStream * rtStreamPtr = (ofRtAudioSoundStream *)data;
	
	if ( status ) {
		ofLogWarning("ofRtAudioSoundStream") << "stream over/underflow detected";
	}

	// 	rtAudio uses a system by which the audio
	// 	can be of different formats
	// 	char, float, etc.
	// 	we choose float
	float * fPtrOut = (float *)outputBuffer;
	float * fPtrIn  = (float *)inputBuffer;
	// [zach] memset output to zero before output call
	// this is because of how rtAudio works: duplex w/ one callback
	// you need to cut in the middle. if the simpleApp
	// doesn't produce audio, we pass silence instead of duplex...
	
	int nInputChannels = rtStreamPtr->getNumInputChannels();
	int nOutputChannels = rtStreamPtr->getNumOutputChannels();

	if(nInputChannels > 0){
		if( rtStreamPtr->soundInputPtr != NULL ){
			rtStreamPtr->soundInputPtr->audioIn((float*)inputBuffer, bufferSize, nInputChannels, rtStreamPtr->inDeviceID, rtStreamPtr->tickCount);
		}
		memset(fPtrIn, 0, bufferSize * nInputChannels * sizeof(float));
	}

	if (nOutputChannels > 0) {
		memset(fPtrOut, 0, sizeof(float) * bufferSize * nOutputChannels);
		if( rtStreamPtr->soundOutputPtr != NULL ){
			rtStreamPtr->soundOutputPtr->audioOut((float*)outputBuffer, bufferSize, nOutputChannels, rtStreamPtr->outDeviceID, rtStreamPtr->tickCount);
		}
	}
	
	// increment tick count
	rtStreamPtr->tickCount++;

	return 0;
}

This may just be the way rtaudio handles it because what I can tell from the Microsoft Media Foundation documentation, is once a stream is initiated and started it will just get whatever is sent into the buffer that was passed into the start function. I guess my question is, if I were to just call this method once

soundOutputPtr->audioOut((float*)outputBuffer, bufferSize, nOutputChannels, rtStreamPtr->outDeviceID, rtStreamPtr->tickCount);

and for the output buffer just pass along a pointer to the renderbuffer will the ofApp call audioOut(float *outputBuffer, buffersize, nChannels) continuously and will the pointer that is passed in as outoutBuffer always be the same thing if it is declared only once.

Sorry to be redundant but I just want to be sure in the way things are called so:

RenderBuffer->* OutputBuffer -> audioOut(OutputBuffer)->ofApp::audioOut(*outputBuffer=RenderBuffer). Does this method require a callback then or does it inherit the pointer which will be filled every time audioOut is called during the ofApps existence.