From b4931e72988e6a0f1bb15bbac9ea28c2df85b994 Mon Sep 17 00:00:00 2001 From: rossb Date: Wed, 2 Feb 2011 18:58:17 +0000 Subject: [PATCH] removed/cleaned up doxygen @todo items. moved to TRAC --- src/common/pa_front.c | 20 ++++------------ src/common/pa_process.c | 37 ++-------------------------- src/common/pa_util.h | 3 --- src/hostapi/dsound/pa_win_ds.c | 28 ---------------------- src/hostapi/wmme/pa_win_wmme.c | 44 +++++----------------------------- src/os/win/pa_win_hostapis.c | 3 --- src/os/win/pa_win_util.c | 18 +++++++------- 7 files changed, 22 insertions(+), 131 deletions(-) diff --git a/src/common/pa_front.c b/src/common/pa_front.c index 22a7fda..8dfa27d 100644 --- a/src/common/pa_front.c +++ b/src/common/pa_front.c @@ -59,18 +59,6 @@ All PortAudio API functions can be conditionally compiled with logging code. To compile with logging, define the PA_LOG_API_CALLS precompiler symbol. - - @todo Consider adding host API specific error text in Pa_GetErrorText() for - paUnanticipatedHostError - - @todo Consider adding a new error code for when (inputParameters == NULL) - && (outputParameters == NULL) - - @todo review whether Pa_CloseStream() should call the interface's - CloseStream function if aborting the stream returns an error code. - - @todo Create new error codes if a NULL buffer pointer, or a - zero frame count is passed to Pa_ReadStream or Pa_WriteStream. */ @@ -381,7 +369,7 @@ const char *Pa_GetErrorText( PaError errorCode ) { case paNoError: result = "Success"; break; case paNotInitialized: result = "PortAudio not initialized"; break; - /** @todo could catenate the last host error text to result in the case of paUnanticipatedHostError */ + /** @todo could catenate the last host error text to result in the case of paUnanticipatedHostError. see: http://www.portaudio.com/trac/ticket/114 */ case paUnanticipatedHostError: result = "Unanticipated host error"; break; case paInvalidChannelCount: result = "Invalid number of channels"; break; case paInvalidSampleRate: result = "Invalid sample rate"; break; @@ -1343,7 +1331,7 @@ PaError Pa_CloseStream( PaStream* stream ) else if( result == 0 ) result = interface->Abort( stream ); - if( result == paNoError ) /** @todo REVIEW: shouldn't we close anyway? */ + if( result == paNoError ) /** @todo REVIEW: shouldn't we close anyway? see: http://www.portaudio.com/trac/ticket/115 */ result = interface->Close( stream ); } @@ -1601,7 +1589,7 @@ PaError Pa_ReadStream( PaStream* stream, { if( frames == 0 ) { - /* XXX: Should we not allow the implementation to signal any overflow condition? */ + /* @todo Should we not allow the implementation to signal any overflow condition? see: http://www.portaudio.com/trac/ticket/116*/ result = paNoError; } else if( buffer == 0 ) @@ -1641,7 +1629,7 @@ PaError Pa_WriteStream( PaStream* stream, { if( frames == 0 ) { - /* XXX: Should we not allow the implementation to signal any underflow condition? */ + /* @todo Should we not allow the implementation to signal any underflow condition? see: http://www.portaudio.com/trac/ticket/116*/ result = paNoError; } else if( buffer == 0 ) diff --git a/src/common/pa_process.c b/src/common/pa_process.c index 86995a7..8d0500d 100644 --- a/src/common/pa_process.c +++ b/src/common/pa_process.c @@ -41,41 +41,6 @@ @ingroup common_src @brief Buffer Processor implementation. - - The code in this file is not optimised yet - although it's not clear that - it needs to be. there may appear to be redundancies - that could be factored into common functions, but the redundanceis are left - intentionally as each appearance may have different optimisation possibilities. - - The optimisations which are planned involve only converting data in-place - where possible, rather than copying to the temp buffer(s). - - Note that in the extreme case of being able to convert in-place, and there - being no conversion necessary there should be some code which short-circuits - the operation. - - @todo Consider cache tilings for intereave<->deinterleave. - - @todo specify and implement some kind of logical policy for handling the - underflow and overflow stream flags when the underflow/overflow overlaps - multiple user buffers/callbacks. - - @todo provide support for priming the buffers with data from the callback. - The client interface is now implemented through PaUtil_SetNoInput() - which sets bp->hostInputChannels[0][0].data to zero. However this is - currently only implemented in NonAdaptingProcess(). It shouldn't be - needed for AdaptingInputOnlyProcess() (no priming should ever be - requested for AdaptingInputOnlyProcess()). - Not sure if additional work should be required to make it work with - AdaptingOutputOnlyProcess, but it definitely is required for - AdaptingProcess. - - @todo implement PaUtil_SetNoOutput for AdaptingProcess - - @todo don't allocate temp buffers for blocking streams unless they are - needed. At the moment they are needed, but perhaps for host APIs - where the implementation passes a buffer to the host they could be - used. */ @@ -603,6 +568,8 @@ void PaUtil_SetNoOutput( PaUtilBufferProcessor* bp ) assert( bp->outputChannelCount > 0 ); bp->hostOutputChannels[0][0].data = 0; + + /* note that only NonAdaptingProcess is able to deal with no output at this stage. not implemented for AdaptingProcess */ } diff --git a/src/common/pa_util.h b/src/common/pa_util.h index 97028d8..ad5dac5 100644 --- a/src/common/pa_util.h +++ b/src/common/pa_util.h @@ -46,9 +46,6 @@ Some functions declared here are defined in pa_front.c while others are implemented separately for each platform. - - @todo Document and adhere to the alignment guarantees provided by - PaUtil_AllocateMemory(). */ diff --git a/src/hostapi/dsound/pa_win_ds.c b/src/hostapi/dsound/pa_win_ds.c index c54f980..464ccfb 100644 --- a/src/hostapi/dsound/pa_win_ds.c +++ b/src/hostapi/dsound/pa_win_ds.c @@ -39,34 +39,6 @@ /** @file @ingroup hostapi_src - - @todo implement paInputOverflow callback status flag - - @todo implement paNeverDropInput. - - @todo implement host api specific extension to set i/o buffer sizes in frames - - @todo implement initialisation of PaDeviceInfo default*Latency fields (currently set to 0.) - - @todo implement ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable - - @todo audit handling of DirectSound result codes - in many cases we could convert a HRESULT into - a native portaudio error code. Standard DirectSound result codes are documented at msdn. - - @todo implement IsFormatSupported - - @todo call PaUtil_SetLastHostErrorInfo with a specific error string (currently just "DSound error"). - - @todo make sure all buffers have been played before stopping the stream - when the stream callback returns paComplete - - @todo retrieve default devices using the DRVM_MAPPER_PREFERRED_GET functions used in the wmme api - these wave device ids can be aligned with the directsound devices either by retrieving - the system interface device name using DRV_QUERYDEVICEINTERFACE or by using the wave device - id retrieved in KsPropertySetEnumerateCallback. - - old TODOs from phil, need to work out if these have been done: - O- fix "patest_stop.c" */ diff --git a/src/hostapi/wmme/pa_win_wmme.c b/src/hostapi/wmme/pa_win_wmme.c index 758c3a9..2979940 100644 --- a/src/hostapi/wmme/pa_win_wmme.c +++ b/src/hostapi/wmme/pa_win_wmme.c @@ -65,35 +65,6 @@ @ingroup hostapi_src @brief Win32 host API implementation for the Windows MultiMedia Extensions (WMME) audio API. - - @todo Fix buffer catch up code, can sometimes get stuck (perhaps fixed now, - needs to be reviewed and tested.) - - @todo implement paInputUnderflow, paOutputOverflow streamCallback statusFlags, paNeverDropInput. - - @todo BUG: PA_MME_SET_LAST_WAVEIN/OUT_ERROR is used in functions which may - be called asynchronously from the callback thread. this is bad. - - @todo implement inputBufferAdcTime in callback thread - - @todo review/fix error recovery and cleanup in marked functions - - @todo implement timeInfo for stream priming - - @todo handle the case where the callback returns paAbort or paComplete during stream priming. - - @todo review input overflow and output underflow handling in ReadStream and WriteStream - -Non-critical stuff for the future: - - @todo Investigate supporting host buffer formats > 16 bits - - @todo define UNICODE and _UNICODE in the project settings and see what breaks - - @todo refactor conversion of MMSYSTEM errors into PA arrors into a single function. - - @todo cleanup WAVEFORMATEXTENSIBLE retry in InitializeWaveHandles to not use a for loop - */ /* @@ -102,7 +73,7 @@ Non-critical stuff for the future: For both callback and blocking read/write streams we open the MME devices in CALLBACK_EVENT mode. In this mode, MME signals an Event object whenever it has finished with a buffer (either filled it for input, or played it - for output). Where necessary we block waiting for Event objects using + for output). Where necessary, we block waiting for Event objects using WaitMultipleObjects(). When implementing a PA callback stream, we set up a high priority thread @@ -2839,7 +2810,7 @@ PA_THREAD_FUNC ProcessingThreadProc( void *pArg ) if( waitResult == WAIT_FAILED ) { result = paUnanticipatedHostError; - /** @todo FIXME/REVIEW: can't return host error info from an asyncronous thread */ + /** @todo FIXME/REVIEW: can't return host error info from an asyncronous thread. see http://www.portaudio.com/trac/ticket/143 */ done = 1; } else if( waitResult == WAIT_TIMEOUT ) @@ -2892,7 +2863,7 @@ PA_THREAD_FUNC ProcessingThreadProc( void *pArg ) we discard all but the most recent. This is an input buffer overflow. FIXME: these buffers should be passed to the callback in a paNeverDropInput - stream. + stream. http://www.portaudio.com/trac/ticket/142 note that it is also possible for an input overflow to happen while the callback is processing a buffer. @@ -3051,7 +3022,9 @@ PA_THREAD_FUNC ProcessingThreadProc( void *pArg ) { stream->abortProcessing = 1; done = 1; - /** @todo FIXME: should probably reset the output device immediately once the callback returns paAbort */ + /** @todo FIXME: should probably reset the output device immediately once the callback returns paAbort + see: http://www.portaudio.com/trac/ticket/141 + */ result = paNoError; } else @@ -4004,8 +3977,3 @@ HWAVEOUT PaWinMME_GetStreamOutputHandle( PaStream* s, int handleIndex ) else return 0; } - - - - - diff --git a/src/os/win/pa_win_hostapis.c b/src/os/win/pa_win_hostapis.c index 916403b..13d6c6f 100644 --- a/src/os/win/pa_win_hostapis.c +++ b/src/os/win/pa_win_hostapis.c @@ -40,9 +40,6 @@ @ingroup win_src @brief Win32 host API initialization function table. - - @todo Consider using PA_USE_WMME etc instead of PA_NO_WMME. This is what - the Unix version does, we should consider being consistent. */ diff --git a/src/os/win/pa_win_util.c b/src/os/win/pa_win_util.c index a91521d..1e965ac 100644 --- a/src/os/win/pa_win_util.c +++ b/src/os/win/pa_win_util.c @@ -41,9 +41,6 @@ @ingroup win_src @brief Win32 implementation of platform-specific PaUtil support functions. - - @todo Implement workaround for QueryPerformanceCounter() skipping forward - bug. (see msdn kb Q274323). */ #include @@ -129,13 +126,18 @@ double PaUtil_GetTime( void ) if( usePerformanceCounter_ ) { - /* FIXME: - according to this knowledge-base article, QueryPerformanceCounter - can skip forward by seconds! + /* + Note: QueryPerformanceCounter has a known issue where it can skip forward + by a few seconds (!) due to a hardware bug on some PCI-ISA bridge hardware. + This is documented here: http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q274323& - it may be better to use the rtdsc instruction using inline asm, - however then a method is needed to calculate a ticks/seconds ratio. + The work-arounds are not very paletable and involve querying GetTickCount + at every time step. + + Using rdtsc is not a good option on multi-core systems. + + For now we just use QueryPerformanceCounter(). It's good, most of the time. */ QueryPerformanceCounter( &time ); return time.QuadPart * secondsPerTick_; -- 2.43.0