diff options
author | Markus Pfau <pfau@peak3d.de> | 2018-06-21 13:07:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-21 13:07:40 +0200 |
commit | 4c0a23e914c68cd5cebf924ae3590249a5182d39 (patch) | |
tree | 72c62cc6ca5d500468ee97aeaa51f2d00a218a73 | |
parent | 95de5f5bdaadb9df5a7019163dc15034c5aefeb9 (diff) | |
parent | d68c07fe2ca805e4df2433833ae848deea70d9d4 (diff) |
Merge pull request #14081 from peak3d/audiotrack18.0a2-Leia
Implement SDK21 AudioTrack constructor
-rw-r--r-- | tools/depends/target/libandroidjni/Makefile | 2 | ||||
-rw-r--r-- | xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp | 58 | ||||
-rw-r--r-- | xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h | 2 |
3 files changed, 32 insertions, 30 deletions
diff --git a/tools/depends/target/libandroidjni/Makefile b/tools/depends/target/libandroidjni/Makefile index 4c200919d3..6948c06dfd 100644 --- a/tools/depends/target/libandroidjni/Makefile +++ b/tools/depends/target/libandroidjni/Makefile @@ -3,7 +3,7 @@ DEPS= ../../Makefile.include Makefile # lib name, version LIBNAME=libandroidjni -VERSION=3c0e79e4f1fd497434bf8cfda520c10af9009ce5 +VERSION=bfe01d03cfcef423ffbf3cd9aafef4a5a3539201 SOURCE=archive ARCHIVE=$(VERSION).tar.gz GIT_BASE_URL=https://github.com/xbmc diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp index 2fc92e54fe..8885830c7e 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp +++ b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp @@ -35,8 +35,6 @@ #include "utils/AMLUtils.h" -//#define DEBUG_VERBOSE 1 - // This is an alternative to the linear weighted delay smoothing // advantages: only one history value needs to be stored // in tests the linear weighted average smoother yield better results @@ -181,16 +179,35 @@ static int AEChannelMapToAUDIOTRACKChannelMask(CAEChannelInfo info) jni::CJNIAudioTrack *CAESinkAUDIOTRACK::CreateAudioTrack(int stream, int sampleRate, int channelMask, int encoding, int bufferSize) { jni::CJNIAudioTrack *jniAt = NULL; - m_jniAudioFormat = encoding; try { - jniAt = new CJNIAudioTrack(stream, - sampleRate, - channelMask, - encoding, - bufferSize, - CJNIAudioTrack::MODE_STREAM); + if (CJNIBase::GetSDKVersion() >= 21) + { + CJNIAudioAttributesBuilder attrBuilder; + attrBuilder.setUsage(CJNIAudioAttributes::USAGE_MEDIA); + attrBuilder.setFlags(CJNIAudioAttributes::FLAG_AUDIBILITY_ENFORCED); + + CJNIAudioFormatBuilder fmtBuilder; + fmtBuilder.setChannelMask(channelMask); + fmtBuilder.setEncoding(encoding); + fmtBuilder.setSampleRate(sampleRate); + + jniAt = new CJNIAudioTrack(attrBuilder.build(), + fmtBuilder.build(), + bufferSize, + CJNIAudioTrack::MODE_STREAM, + CJNIAudioManager::AUDIO_SESSION_ID_GENERATE); + } + else + { + jniAt = new CJNIAudioTrack(stream, + sampleRate, + channelMask, + encoding, + bufferSize, + CJNIAudioTrack::MODE_STREAM); + } } catch (const std::invalid_argument& e) { @@ -282,22 +299,7 @@ bool CAESinkAUDIOTRACK::VerifySinkConfiguration(int sampleRate, int channelMask, if (minBufferSize < 0) return false; - // Try to construct a jniSink - jni::CJNIAudioTrack *jniAt = NULL; - - try - { - jniAt = new CJNIAudioTrack(CJNIAudioManager::STREAM_MUSIC, - sampleRate, - channelMask, - encoding, - minBufferSize, - CJNIAudioTrack::MODE_STREAM); - } - catch (const std::invalid_argument& e) - { - CLog::Log(LOGINFO, "AESinkAUDIOTRACK - AudioTrack creation faild: Encoding: %d ChannelMask: %d Error: %s", encoding, channelMask, e.what()); - } + jni::CJNIAudioTrack *jniAt = CreateAudioTrack(CJNIAudioManager::STREAM_MUSIC, sampleRate, channelMask, encoding, minBufferSize); bool success = (jniAt && jniAt->getState() == CJNIAudioTrack::STATE_INITIALIZED); @@ -423,7 +425,7 @@ bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device) while (!m_at_jni) { - CLog::Log(LOGNOTICE, "Trying to open: %u samplerate %d channelMask %d encoding", m_sink_sampleRate, atChannelMask, m_encoding); + CLog::Log(LOGNOTICE, "Trying to open: samplerate: %u, channelMask: %d, encoding: %d", m_sink_sampleRate, atChannelMask, m_encoding); int min_buffer = CJNIAudioTrack::getMinBufferSize(m_sink_sampleRate, atChannelMask, m_encoding); @@ -529,6 +531,7 @@ bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device) CLog::Log(LOGDEBUG, "Created Audiotrackbuffer with playing time of %lf ms min buffer size: %u bytes", m_audiotrackbuffer_sec * 1000, m_min_buffer_size); + m_jniAudioFormat = m_encoding; m_at_jni = CreateAudioTrack(stream, m_sink_sampleRate, atChannelMask, m_encoding, m_min_buffer_size); @@ -574,9 +577,8 @@ bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device) void CAESinkAUDIOTRACK::Deinitialize() { -#ifdef DEBUG_VERBOSE CLog::Log(LOGDEBUG, "CAESinkAUDIOTRACK::Deinitialize"); -#endif + // Restore volume if (m_volume != -1) { diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h index 2f28d1e269..87e1defab3 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h +++ b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h @@ -54,7 +54,7 @@ public: static IAESink* Create(std::string &device, AEAudioFormat &desiredFormat); protected: - jni::CJNIAudioTrack *CreateAudioTrack(int stream, int sampleRate, int channelMask, int encoding, int bufferSize); + static jni::CJNIAudioTrack *CreateAudioTrack(int stream, int sampleRate, int channelMask, int encoding, int bufferSize); static bool IsSupported(int sampleRateInHz, int channelConfig, int audioFormat); static bool VerifySinkConfiguration(int sampleRate, int channelMask, int encoding); static bool HasAmlHD(); |