Path: blob/master/platform/android/audio_driver_opensl.h
10277 views
/**************************************************************************/1/* audio_driver_opensl.h */2/**************************************************************************/3/* This file is part of: */4/* GODOT ENGINE */5/* https://godotengine.org */6/**************************************************************************/7/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */8/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */9/* */10/* Permission is hereby granted, free of charge, to any person obtaining */11/* a copy of this software and associated documentation files (the */12/* "Software"), to deal in the Software without restriction, including */13/* without limitation the rights to use, copy, modify, merge, publish, */14/* distribute, sublicense, and/or sell copies of the Software, and to */15/* permit persons to whom the Software is furnished to do so, subject to */16/* the following conditions: */17/* */18/* The above copyright notice and this permission notice shall be */19/* included in all copies or substantial portions of the Software. */20/* */21/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */22/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */23/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */24/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */25/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */26/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */27/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */28/**************************************************************************/2930#pragma once3132#include "core/os/mutex.h"33#include "servers/audio_server.h"3435#include <SLES/OpenSLES.h>36#include <SLES/OpenSLES_Android.h>3738class AudioDriverOpenSL : public AudioDriver {39bool active = false;40Mutex mutex;4142enum {43BUFFER_COUNT = 244};4546bool pause = false;4748uint32_t buffer_size = 0;49int16_t *buffers[BUFFER_COUNT] = {};50int32_t *mixdown_buffer = nullptr;51int last_free = 0;5253Vector<int16_t> rec_buffer;5455SLPlayItf playItf = nullptr;56SLRecordItf recordItf = nullptr;57SLObjectItf sl = nullptr;58SLEngineItf EngineItf = nullptr;59SLObjectItf OutputMix = nullptr;60SLObjectItf player = nullptr;61SLObjectItf recorder = nullptr;62SLAndroidSimpleBufferQueueItf bufferQueueItf = nullptr;63SLAndroidSimpleBufferQueueItf recordBufferQueueItf = nullptr;64SLDataSource audioSource;65SLDataFormat_PCM pcm;66SLDataSink audioSink;67SLDataLocator_OutputMix locator_outputmix;6869static AudioDriverOpenSL *s_ad;7071void _buffer_callback(72SLAndroidSimpleBufferQueueItf queueItf);7374static void _buffer_callbacks(75SLAndroidSimpleBufferQueueItf queueItf,76void *pContext);7778void _record_buffer_callback(79SLAndroidSimpleBufferQueueItf queueItf);8081static void _record_buffer_callbacks(82SLAndroidSimpleBufferQueueItf queueItf,83void *pContext);8485Error init_input_device();8687public:88virtual const char *get_name() const override {89return "Android";90}9192virtual Error init() override;93virtual void start() override;94virtual int get_mix_rate() const override;95virtual SpeakerMode get_speaker_mode() const override;9697virtual void lock() override;98virtual void unlock() override;99virtual void finish() override;100101virtual Error input_start() override;102virtual Error input_stop() override;103104void set_pause(bool p_pause);105106AudioDriverOpenSL();107};108109110