mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-11-04 13:44:50 +00:00 
			
		
		
		
	Update audio testautomation: more coverage; added SDL_PauseAudio test /w callback coverage
This commit is contained in:
		
							parent
							
								
									d23d9c88e5
								
							
						
					
					
						commit
						962c9911ce
					
				| 
						 | 
				
			
			@ -3,6 +3,9 @@
 | 
			
		|||
 * New/updated tests: aschiffler at ferzkopp dot net
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* quiet windows compiler warnings */
 | 
			
		||||
#define _CRT_SECURE_NO_WARNINGS
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,11 +28,29 @@ _audioSetUp(void *arg)
 | 
			
		|||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_audioTearDown(void *arg)
 | 
			
		||||
{
 | 
			
		||||
    /* Remove a possibly created file from SDL disk writer audio driver; ignore errors */
 | 
			
		||||
    remove("sdlaudio.raw");
 | 
			
		||||
 | 
			
		||||
    SDLTest_AssertPass("Cleanup of test files completed");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Global counter for callback invocation */
 | 
			
		||||
int _audio_testCallbackCounter;
 | 
			
		||||
 | 
			
		||||
/* Global accumulator for total callback length */
 | 
			
		||||
int _audio_testCallbackLength;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Test callback function */
 | 
			
		||||
void _audio_testCallback(void *userdata, Uint8 *stream, int len)
 | 
			
		||||
{
 | 
			
		||||
   /* TODO: add tracking if callback was called */
 | 
			
		||||
   /* track that callback was called */
 | 
			
		||||
   _audio_testCallbackCounter++;
 | 
			
		||||
   _audio_testCallbackLength += len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,8 +59,8 @@ void _audio_testCallback(void *userdata, Uint8 *stream, int len)
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Stop and restart audio subsystem
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_QuitSubSystem
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_InitSubSystem
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_QuitSubSystem
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_InitSubSystem
 | 
			
		||||
 */
 | 
			
		||||
int audio_quitInitAudioSubSystem()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -56,8 +77,8 @@ int audio_quitInitAudioSubSystem()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Start and stop audio directly
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_InitAudio
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_QuitAudio
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_InitAudio
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_QuitAudio
 | 
			
		||||
 */
 | 
			
		||||
int audio_initQuitAudio()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -110,15 +131,104 @@ int audio_initQuitAudio()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Start, open, close and stop audio
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_InitAudio
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_OpenAudio
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_CloseAudio
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_QuitAudio
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_InitAudio
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_OpenAudio
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_CloseAudio
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_QuitAudio
 | 
			
		||||
 */
 | 
			
		||||
int audio_initOpenCloseQuitAudio()
 | 
			
		||||
{
 | 
			
		||||
    int result, expectedResult;
 | 
			
		||||
    int i, iMax, j, k;
 | 
			
		||||
    const char* audioDriver;
 | 
			
		||||
    SDL_AudioSpec desired;
 | 
			
		||||
 | 
			
		||||
    /* Stop SDL audio subsystem */
 | 
			
		||||
    SDL_QuitSubSystem( SDL_INIT_AUDIO );
 | 
			
		||||
        SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)");
 | 
			
		||||
 | 
			
		||||
        /* Loop over all available audio drivers */
 | 
			
		||||
        iMax = SDL_GetNumAudioDrivers();
 | 
			
		||||
        SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers");
 | 
			
		||||
        SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax);
 | 
			
		||||
        for (i = 0; i < iMax; i++) {
 | 
			
		||||
            audioDriver = SDL_GetAudioDriver(i);
 | 
			
		||||
            SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i);
 | 
			
		||||
            SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL");
 | 
			
		||||
            SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver);
 | 
			
		||||
 | 
			
		||||
            /* Change specs */
 | 
			
		||||
            for (j = 0; j < 2; j++) {
 | 
			
		||||
 | 
			
		||||
                /* Call Init */
 | 
			
		||||
                result = SDL_AudioInit(audioDriver);
 | 
			
		||||
                SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver);
 | 
			
		||||
                SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result);
 | 
			
		||||
 | 
			
		||||
                /* Set spec */
 | 
			
		||||
                SDL_memset(&desired, 0, sizeof(desired));
 | 
			
		||||
                switch (j) {
 | 
			
		||||
                    case 0:
 | 
			
		||||
                    /* Set standard desired spec */
 | 
			
		||||
                    desired.freq = 22050;
 | 
			
		||||
                    desired.format = AUDIO_S16SYS;
 | 
			
		||||
                    desired.channels = 2;
 | 
			
		||||
                    desired.samples = 4096;
 | 
			
		||||
                    desired.callback = _audio_testCallback;
 | 
			
		||||
                    desired.userdata = NULL;
 | 
			
		||||
 | 
			
		||||
                    case 1:
 | 
			
		||||
                    /* Set custom desired spec */
 | 
			
		||||
                    desired.freq = 48000;
 | 
			
		||||
                    desired.format = AUDIO_F32SYS;
 | 
			
		||||
                    desired.channels = 2;
 | 
			
		||||
                    desired.samples = 2048;
 | 
			
		||||
                    desired.callback = _audio_testCallback;
 | 
			
		||||
                    desired.userdata = NULL;
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Call Open (maybe multiple times) */
 | 
			
		||||
            for (k=0; k <= j; k++) {
 | 
			
		||||
                result = SDL_OpenAudio(&desired, NULL);
 | 
			
		||||
                SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL), call %d", j, k+1);
 | 
			
		||||
                expectedResult = (k==0) ? 0 : -1;
 | 
			
		||||
                SDLTest_AssertCheck(result == expectedResult, "Verify return value; expected: %d, got: %d", expectedResult, result);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Call Close (maybe multiple times) */
 | 
			
		||||
            for (k=0; k <= j; k++) {
 | 
			
		||||
                SDL_CloseAudio();
 | 
			
		||||
                SDLTest_AssertPass("Call to SDL_CloseAudio(), call %d", k+1);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Call Quit (maybe multiple times) */
 | 
			
		||||
            for (k=0; k <= j; k++) {
 | 
			
		||||
                SDL_AudioQuit();
 | 
			
		||||
                SDLTest_AssertPass("Call to SDL_AudioQuit(), call %d", k+1);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } /* spec loop */
 | 
			
		||||
    } /* driver loop */
 | 
			
		||||
 | 
			
		||||
        /* Restart audio again */
 | 
			
		||||
        _audioSetUp(NULL);
 | 
			
		||||
 | 
			
		||||
    return TEST_COMPLETED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief Pause and unpause audio
 | 
			
		||||
 *
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_PauseAudio
 | 
			
		||||
 */
 | 
			
		||||
int audio_pauseUnpauseAudio()
 | 
			
		||||
{
 | 
			
		||||
    int result;
 | 
			
		||||
    int i, iMax, j;
 | 
			
		||||
    int i, iMax, j, k, l;
 | 
			
		||||
    int totalDelay;
 | 
			
		||||
    int pause_on;
 | 
			
		||||
    int originalCounter;
 | 
			
		||||
    const char* audioDriver;
 | 
			
		||||
    SDL_AudioSpec desired;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -172,9 +282,47 @@ int audio_initOpenCloseQuitAudio()
 | 
			
		|||
            SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL)", j);
 | 
			
		||||
            SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0 got: %d", result);
 | 
			
		||||
 | 
			
		||||
            /* Start and stop audio multiple times */
 | 
			
		||||
            for (l=0; l<3; l++) {
 | 
			
		||||
                SDLTest_Log("Pause/Unpause iteration: %d", l+1);
 | 
			
		||||
            
 | 
			
		||||
                /* Reset callback counters */
 | 
			
		||||
                _audio_testCallbackCounter = 0;
 | 
			
		||||
                _audio_testCallbackLength = 0;
 | 
			
		||||
 | 
			
		||||
                /* Un-pause audio to start playing (maybe multiple times) */
 | 
			
		||||
                pause_on = 0;
 | 
			
		||||
                for (k=0; k <= j; k++) {
 | 
			
		||||
                    SDL_PauseAudio(pause_on);
 | 
			
		||||
                    SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1);
 | 
			
		||||
                }
 | 
			
		||||
            
 | 
			
		||||
                /* Wait for callback */
 | 
			
		||||
                totalDelay = 0;
 | 
			
		||||
                do {
 | 
			
		||||
                    SDL_Delay(10);
 | 
			
		||||
                    totalDelay += 10;
 | 
			
		||||
                } 
 | 
			
		||||
                while (_audio_testCallbackCounter == 0 && totalDelay < 1000);
 | 
			
		||||
                SDLTest_AssertCheck(_audio_testCallbackCounter > 0, "Verify callback counter; expected: >0 got: %d", _audio_testCallbackCounter);
 | 
			
		||||
                SDLTest_AssertCheck(_audio_testCallbackLength > 0, "Verify callback length; expected: >0 got: %d", _audio_testCallbackLength);
 | 
			
		||||
 | 
			
		||||
                /* Pause audio to stop playing (maybe multiple times) */
 | 
			
		||||
                for (k=0; k <= j; k++) {
 | 
			
		||||
                    pause_on = (k==0) ? 1 : SDLTest_RandomIntegerInRange(99, 9999);
 | 
			
		||||
                    SDL_PauseAudio(pause_on);
 | 
			
		||||
                    SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1);
 | 
			
		||||
                }
 | 
			
		||||
            
 | 
			
		||||
                /* Ensure callback is not called again */
 | 
			
		||||
                originalCounter = _audio_testCallbackCounter;
 | 
			
		||||
                SDL_Delay(totalDelay + 10);
 | 
			
		||||
                SDLTest_AssertCheck(originalCounter == _audio_testCallbackCounter, "Verify callback counter; expected: %d, got: %d", originalCounter, _audio_testCallbackCounter);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Call Close */
 | 
			
		||||
                    SDL_CloseAudio();
 | 
			
		||||
                    SDLTest_AssertPass("Call to SDL_CloseAudio()");
 | 
			
		||||
            SDL_CloseAudio();
 | 
			
		||||
            SDLTest_AssertPass("Call to SDL_CloseAudio()");
 | 
			
		||||
 | 
			
		||||
            /* Call Quit */
 | 
			
		||||
            SDL_AudioQuit();
 | 
			
		||||
| 
						 | 
				
			
			@ -183,8 +331,8 @@ int audio_initOpenCloseQuitAudio()
 | 
			
		|||
        } /* spec loop */
 | 
			
		||||
    } /* driver loop */
 | 
			
		||||
 | 
			
		||||
        /* Restart audio again */
 | 
			
		||||
        _audioSetUp(NULL);
 | 
			
		||||
    /* Restart audio again */
 | 
			
		||||
    _audioSetUp(NULL);
 | 
			
		||||
 | 
			
		||||
    return TEST_COMPLETED;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -192,8 +340,8 @@ int audio_initOpenCloseQuitAudio()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Enumerate and name available audio devices (output and capture).
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetNumAudioDevices
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetAudioDeviceName
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetNumAudioDevices
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetAudioDeviceName
 | 
			
		||||
 */
 | 
			
		||||
int audio_enumerateAndNameAudioDevices()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -250,8 +398,8 @@ int audio_enumerateAndNameAudioDevices()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Negative tests around enumeration and naming of audio devices.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetNumAudioDevices
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetAudioDeviceName
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetNumAudioDevices
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetAudioDeviceName
 | 
			
		||||
 */
 | 
			
		||||
int audio_enumerateAndNameAudioDevicesNegativeTests()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -297,8 +445,8 @@ int audio_enumerateAndNameAudioDevicesNegativeTests()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Checks available audio driver names.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetNumAudioDrivers
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetAudioDriver
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetNumAudioDrivers
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetAudioDriver
 | 
			
		||||
 */
 | 
			
		||||
int audio_printAudioDrivers()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -330,7 +478,7 @@ int audio_printAudioDrivers()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Checks current audio driver name with initialized audio.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetCurrentAudioDriver
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetCurrentAudioDriver
 | 
			
		||||
 */
 | 
			
		||||
int audio_printCurrentAudioDriver()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -362,7 +510,7 @@ int _audioFrequencies[] = { 11025, 22050, 44100, 48000 };
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Builds various audio conversion structures
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_BuildAudioCVT
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT
 | 
			
		||||
 */
 | 
			
		||||
int audio_buildAudioCVT()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -426,7 +574,7 @@ int audio_buildAudioCVT()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Checkes calls with invalid input to SDL_BuildAudioCVT
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_BuildAudioCVT
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT
 | 
			
		||||
 */
 | 
			
		||||
int audio_buildAudioCVTNegative()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -521,7 +669,7 @@ int audio_buildAudioCVTNegative()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Checks current audio status.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetAudioStatus
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetAudioStatus
 | 
			
		||||
 */
 | 
			
		||||
int audio_getAudioStatus()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -542,7 +690,7 @@ int audio_getAudioStatus()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Opens, checks current audio status, and closes a device.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_GetAudioStatus
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_GetAudioStatus
 | 
			
		||||
 */
 | 
			
		||||
int audio_openCloseAndGetAudioStatus()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -600,8 +748,8 @@ int audio_openCloseAndGetAudioStatus()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Locks and unlocks open audio device.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_LockAudioDevice
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_UnlockAudioDevice
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_LockAudioDevice
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_UnlockAudioDevice
 | 
			
		||||
 */
 | 
			
		||||
int audio_lockUnlockOpenAudioDevice()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -663,8 +811,8 @@ int audio_lockUnlockOpenAudioDevice()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Convert audio using various conversion structures
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_BuildAudioCVT
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_ConvertAudio
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_ConvertAudio
 | 
			
		||||
 */
 | 
			
		||||
int audio_convertAudio()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -762,7 +910,7 @@ int audio_convertAudio()
 | 
			
		|||
/**
 | 
			
		||||
 * \brief Opens, checks current connected status, and closes a device.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_AudioDeviceConnected
 | 
			
		||||
 * \sa https://wiki.libsdl.org/SDL_AudioDeviceConnected
 | 
			
		||||
 */
 | 
			
		||||
int audio_openCloseAudioDeviceConnected()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -871,11 +1019,14 @@ static const SDLTest_TestCaseReference audioTest13 =
 | 
			
		|||
static const SDLTest_TestCaseReference audioTest14 =
 | 
			
		||||
        { (SDLTest_TestCaseFp)audio_initOpenCloseQuitAudio, "audio_initOpenCloseQuitAudio", "Cycle through init, open, close and quit with various audio specs.", TEST_ENABLED };
 | 
			
		||||
 | 
			
		||||
static const SDLTest_TestCaseReference audioTest15 =
 | 
			
		||||
        { (SDLTest_TestCaseFp)audio_pauseUnpauseAudio, "audio_pauseUnpauseAudio", "Pause and Unpause audio for various audio specs while testing callback.", TEST_ENABLED };
 | 
			
		||||
 | 
			
		||||
/* Sequence of Audio test cases */
 | 
			
		||||
static const SDLTest_TestCaseReference *audioTests[] =  {
 | 
			
		||||
    &audioTest1, &audioTest2, &audioTest3, &audioTest4, &audioTest5, &audioTest6,
 | 
			
		||||
    &audioTest7, &audioTest8, &audioTest9, &audioTest10, &audioTest11,
 | 
			
		||||
    &audioTest12, &audioTest13, &audioTest14, NULL
 | 
			
		||||
    &audioTest12, &audioTest13, &audioTest14, &audioTest15, NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Audio test suite (global) */
 | 
			
		||||
| 
						 | 
				
			
			@ -883,5 +1034,5 @@ SDLTest_TestSuiteReference audioTestSuite = {
 | 
			
		|||
    "Audio",
 | 
			
		||||
    _audioSetUp,
 | 
			
		||||
    audioTests,
 | 
			
		||||
    NULL
 | 
			
		||||
    _audioTearDown
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue