Prerolling a stream allows the source stream handlers to start and fill the buffers. An application can then start the streams for better real-time response and initial synchronization of streams. This is accomplished by the SpiStartStream function with the SPI_START_PREROLL flag.
However, if a stream is already paused (STOP_PAUSED), the stream is already cued so there is no need to call SpiStartStream to refill the buffers. The following example illustrates how to check to see if a stream is in a paused state.
/************************************ * If the stream is paused, there is no * sense in cueing it since the buffers * are full anyway **************************************/ if ( STRMSTATE == MCI_PAUSE || STRMSTATE == STOP_PAUSED ) { /*********************************************** ** If the stream is going the right way ** then we have the ability to avoid the cue ** since the buffers have been filled up before ** we did the pause **********************************************/ if ( AMPMIX.ulOperation == OPERATION_RECORD && fCueInput ) { ulpInstance->ulCreateFlag = PREROLL_STATE; STRMSTATE = CUERECD_STATE; return ( MCIERR_SUCCESS ); } /************************************************* * If the current stream is cued for playback and * we have a cue_output request, our work is done **************************************************/ else if ( AMPMIX.ulOperation == OPERATION_PLAY && fCueOutput ) { ulpInstance->ulCreateFlag = PREROLL_STATE; STRMSTATE = CUEPLAY_STATE; return ( MCIERR_SUCCESS ); } } /* If the stream may be in cue state */