Loading core/jni/android_media_AudioTrack.cpp +26 −26 Original line number Diff line number Diff line Loading @@ -19,18 +19,18 @@ #include "android_media_AudioTrack.h" #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedUtfChars.h> #include "core_jni_helpers.h" #include <utils/Log.h> #include <android-base/macros.h> #include <android_os_Parcel.h> #include <binder/MemoryBase.h> #include <binder/MemoryHeapBase.h> #include <media/AudioParameter.h> #include <media/AudioSystem.h> #include <media/AudioTrack.h> #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedUtfChars.h> #include <utils/Log.h> #include <android-base/macros.h> #include <binder/MemoryHeapBase.h> #include <binder/MemoryBase.h> #include <cinttypes> #include "android_media_AudioAttributes.h" #include "android_media_AudioErrors.h" Loading @@ -41,8 +41,7 @@ #include "android_media_MediaMetricsJNI.h" #include "android_media_PlaybackParams.h" #include "android_media_VolumeShaper.h" #include <cinttypes> #include "core_jni_helpers.h" // ---------------------------------------------------------------------------- Loading Loading @@ -245,9 +244,10 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we jobject jaa, jintArray jSampleRate, jint channelPositionMask, jint channelIndexMask, jint audioFormat, jint buffSizeInBytes, jint memoryMode, jintArray jSession, jlong nativeAudioTrack, jboolean offload, jint encapsulationMode, jobject tunerConfiguration, jstring opPackageName) { jintArray jSession, jobject jAttributionSource, jlong nativeAudioTrack, jboolean offload, jint encapsulationMode, jobject tunerConfiguration, jstring opPackageName) { ALOGV("sampleRates=%p, channel mask=%x, index mask=%x, audioFormat(Java)=%d, buffSize=%d," " nativeAudioTrack=0x%" PRIX64 ", offload=%d encapsulationMode=%d tuner=%p", jSampleRate, channelPositionMask, channelIndexMask, audioFormat, buffSizeInBytes, Loading Loading @@ -323,10 +323,9 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we // create the native AudioTrack object ScopedUtfChars opPackageNameStr(env, opPackageName); // TODO b/182469354: make consistent with AudioRecord AttributionSourceState attributionSource; attributionSource.packageName = std::string(opPackageNameStr.c_str()); attributionSource.token = sp<BBinder>::make(); android::content::AttributionSourceState attributionSource; attributionSource.readFromParcel(parcelForJavaObject(env, jAttributionSource)); lpTrack = sp<AudioTrack>::make(attributionSource); // read the AudioAttributes values Loading Loading @@ -382,7 +381,7 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we offload ? AudioTrack::TRANSFER_SYNC_NOTIF_CALLBACK : AudioTrack::TRANSFER_SYNC, (offload || encapsulationMode) ? &offloadInfo : NULL, AttributionSourceState(), // default uid, pid values attributionSource, // Passed from Java paa.get()); break; Loading @@ -408,7 +407,7 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we sessionId, // audio session ID AudioTrack::TRANSFER_SHARED, nullptr, // default offloadInfo AttributionSourceState(), // default uid, pid values attributionSource, // Passed from Java paa.get()); break; } Loading Loading @@ -1456,7 +1455,8 @@ static const JNINativeMethod gMethods[] = { {"native_pause", "()V", (void *)android_media_AudioTrack_pause}, {"native_flush", "()V", (void *)android_media_AudioTrack_flush}, {"native_setup", "(Ljava/lang/Object;Ljava/lang/Object;[IIIIII[IJZILjava/lang/Object;Ljava/lang/String;)I", "(Ljava/lang/Object;Ljava/lang/Object;[IIIIII[ILandroid/os/Parcel;" "JZILjava/lang/Object;Ljava/lang/String;)I", (void *)android_media_AudioTrack_setup}, {"native_finalize", "()V", (void *)android_media_AudioTrack_finalize}, {"native_release", "()V", (void *)android_media_AudioTrack_release}, Loading media/java/android/media/AudioTrack.java +40 −28 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.content.AttributionSource; import android.content.AttributionSource.ScopedParcelState; import android.content.Context; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioMixingRule; Loading @@ -39,6 +41,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.Parcel; import android.os.PersistableBundle; import android.util.ArrayMap; import android.util.Log; Loading Loading @@ -822,16 +825,21 @@ public class AudioTrack extends PlayerBase int[] session = new int[1]; session[0] = resolvePlaybackSessionId(context, sessionId); AttributionSource attributionSource = context == null ? AttributionSource.myAttributionSource() : context.getAttributionSource(); // native initialization try (ScopedParcelState attributionSourceState = attributionSource.asScopedParcelState()) { int initResult = native_setup(new WeakReference<AudioTrack>(this), mAttributes, sampleRate, mChannelMask, mChannelIndexMask, mAudioFormat, mNativeBufferSizeInBytes, mDataLoadMode, session, 0 /*nativeTrackInJavaObj*/, offload, encapsulationMode, tunerConfiguration, getCurrentOpPackageName()); mNativeBufferSizeInBytes, mDataLoadMode, session, attributionSourceState.getParcel(), 0 /*nativeTrackInJavaObj*/, offload, encapsulationMode, tunerConfiguration, getCurrentOpPackageName()); if (initResult != SUCCESS) { loge("Error code " + initResult + " when initializing AudioTrack."); return; // with mState == STATE_UNINITIALIZED } } mSampleRate = sampleRate[0]; mSessionId = session[0]; Loading Loading @@ -902,6 +910,8 @@ public class AudioTrack extends PlayerBase // *Native* AudioTrack, so the attributes parameters to native_setup() are ignored. int[] session = { 0 }; int[] rates = { 0 }; try (ScopedParcelState attributionSourceState = AttributionSource.myAttributionSource().asScopedParcelState()) { int initResult = native_setup(new WeakReference<AudioTrack>(this), null /*mAttributes - NA*/, rates /*sampleRate - NA*/, Loading @@ -911,6 +921,7 @@ public class AudioTrack extends PlayerBase 0 /*mNativeBufferSizeInBytes - NA*/, 0 /*mDataLoadMode - NA*/, session, attributionSourceState.getParcel(), nativeTrackInJavaObj, false /*offload*/, ENCAPSULATION_MODE_NONE, Loading @@ -920,6 +931,7 @@ public class AudioTrack extends PlayerBase loge("Error code " + initResult + " when initializing AudioTrack."); return; // with mState == STATE_UNINITIALIZED } } mSessionId = session[0]; Loading Loading @@ -4371,9 +4383,9 @@ public class AudioTrack extends PlayerBase private native final int native_setup(Object /*WeakReference<AudioTrack>*/ audiotrack_this, Object /*AudioAttributes*/ attributes, int[] sampleRate, int channelMask, int channelIndexMask, int audioFormat, int buffSizeInBytes, int mode, int[] sessionId, long nativeAudioTrack, boolean offload, int encapsulationMode, Object tunerConfiguration, @NonNull String opPackageName); int buffSizeInBytes, int mode, int[] sessionId, @NonNull Parcel attributionSource, long nativeAudioTrack, boolean offload, int encapsulationMode, Object tunerConfiguration, @NonNull String opPackageName); private native final void native_finalize(); Loading Loading
core/jni/android_media_AudioTrack.cpp +26 −26 Original line number Diff line number Diff line Loading @@ -19,18 +19,18 @@ #include "android_media_AudioTrack.h" #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedUtfChars.h> #include "core_jni_helpers.h" #include <utils/Log.h> #include <android-base/macros.h> #include <android_os_Parcel.h> #include <binder/MemoryBase.h> #include <binder/MemoryHeapBase.h> #include <media/AudioParameter.h> #include <media/AudioSystem.h> #include <media/AudioTrack.h> #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedUtfChars.h> #include <utils/Log.h> #include <android-base/macros.h> #include <binder/MemoryHeapBase.h> #include <binder/MemoryBase.h> #include <cinttypes> #include "android_media_AudioAttributes.h" #include "android_media_AudioErrors.h" Loading @@ -41,8 +41,7 @@ #include "android_media_MediaMetricsJNI.h" #include "android_media_PlaybackParams.h" #include "android_media_VolumeShaper.h" #include <cinttypes> #include "core_jni_helpers.h" // ---------------------------------------------------------------------------- Loading Loading @@ -245,9 +244,10 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we jobject jaa, jintArray jSampleRate, jint channelPositionMask, jint channelIndexMask, jint audioFormat, jint buffSizeInBytes, jint memoryMode, jintArray jSession, jlong nativeAudioTrack, jboolean offload, jint encapsulationMode, jobject tunerConfiguration, jstring opPackageName) { jintArray jSession, jobject jAttributionSource, jlong nativeAudioTrack, jboolean offload, jint encapsulationMode, jobject tunerConfiguration, jstring opPackageName) { ALOGV("sampleRates=%p, channel mask=%x, index mask=%x, audioFormat(Java)=%d, buffSize=%d," " nativeAudioTrack=0x%" PRIX64 ", offload=%d encapsulationMode=%d tuner=%p", jSampleRate, channelPositionMask, channelIndexMask, audioFormat, buffSizeInBytes, Loading Loading @@ -323,10 +323,9 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we // create the native AudioTrack object ScopedUtfChars opPackageNameStr(env, opPackageName); // TODO b/182469354: make consistent with AudioRecord AttributionSourceState attributionSource; attributionSource.packageName = std::string(opPackageNameStr.c_str()); attributionSource.token = sp<BBinder>::make(); android::content::AttributionSourceState attributionSource; attributionSource.readFromParcel(parcelForJavaObject(env, jAttributionSource)); lpTrack = sp<AudioTrack>::make(attributionSource); // read the AudioAttributes values Loading Loading @@ -382,7 +381,7 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we offload ? AudioTrack::TRANSFER_SYNC_NOTIF_CALLBACK : AudioTrack::TRANSFER_SYNC, (offload || encapsulationMode) ? &offloadInfo : NULL, AttributionSourceState(), // default uid, pid values attributionSource, // Passed from Java paa.get()); break; Loading @@ -408,7 +407,7 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we sessionId, // audio session ID AudioTrack::TRANSFER_SHARED, nullptr, // default offloadInfo AttributionSourceState(), // default uid, pid values attributionSource, // Passed from Java paa.get()); break; } Loading Loading @@ -1456,7 +1455,8 @@ static const JNINativeMethod gMethods[] = { {"native_pause", "()V", (void *)android_media_AudioTrack_pause}, {"native_flush", "()V", (void *)android_media_AudioTrack_flush}, {"native_setup", "(Ljava/lang/Object;Ljava/lang/Object;[IIIIII[IJZILjava/lang/Object;Ljava/lang/String;)I", "(Ljava/lang/Object;Ljava/lang/Object;[IIIIII[ILandroid/os/Parcel;" "JZILjava/lang/Object;Ljava/lang/String;)I", (void *)android_media_AudioTrack_setup}, {"native_finalize", "()V", (void *)android_media_AudioTrack_finalize}, {"native_release", "()V", (void *)android_media_AudioTrack_release}, Loading
media/java/android/media/AudioTrack.java +40 −28 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.content.AttributionSource; import android.content.AttributionSource.ScopedParcelState; import android.content.Context; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioMixingRule; Loading @@ -39,6 +41,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.Parcel; import android.os.PersistableBundle; import android.util.ArrayMap; import android.util.Log; Loading Loading @@ -822,16 +825,21 @@ public class AudioTrack extends PlayerBase int[] session = new int[1]; session[0] = resolvePlaybackSessionId(context, sessionId); AttributionSource attributionSource = context == null ? AttributionSource.myAttributionSource() : context.getAttributionSource(); // native initialization try (ScopedParcelState attributionSourceState = attributionSource.asScopedParcelState()) { int initResult = native_setup(new WeakReference<AudioTrack>(this), mAttributes, sampleRate, mChannelMask, mChannelIndexMask, mAudioFormat, mNativeBufferSizeInBytes, mDataLoadMode, session, 0 /*nativeTrackInJavaObj*/, offload, encapsulationMode, tunerConfiguration, getCurrentOpPackageName()); mNativeBufferSizeInBytes, mDataLoadMode, session, attributionSourceState.getParcel(), 0 /*nativeTrackInJavaObj*/, offload, encapsulationMode, tunerConfiguration, getCurrentOpPackageName()); if (initResult != SUCCESS) { loge("Error code " + initResult + " when initializing AudioTrack."); return; // with mState == STATE_UNINITIALIZED } } mSampleRate = sampleRate[0]; mSessionId = session[0]; Loading Loading @@ -902,6 +910,8 @@ public class AudioTrack extends PlayerBase // *Native* AudioTrack, so the attributes parameters to native_setup() are ignored. int[] session = { 0 }; int[] rates = { 0 }; try (ScopedParcelState attributionSourceState = AttributionSource.myAttributionSource().asScopedParcelState()) { int initResult = native_setup(new WeakReference<AudioTrack>(this), null /*mAttributes - NA*/, rates /*sampleRate - NA*/, Loading @@ -911,6 +921,7 @@ public class AudioTrack extends PlayerBase 0 /*mNativeBufferSizeInBytes - NA*/, 0 /*mDataLoadMode - NA*/, session, attributionSourceState.getParcel(), nativeTrackInJavaObj, false /*offload*/, ENCAPSULATION_MODE_NONE, Loading @@ -920,6 +931,7 @@ public class AudioTrack extends PlayerBase loge("Error code " + initResult + " when initializing AudioTrack."); return; // with mState == STATE_UNINITIALIZED } } mSessionId = session[0]; Loading Loading @@ -4371,9 +4383,9 @@ public class AudioTrack extends PlayerBase private native final int native_setup(Object /*WeakReference<AudioTrack>*/ audiotrack_this, Object /*AudioAttributes*/ attributes, int[] sampleRate, int channelMask, int channelIndexMask, int audioFormat, int buffSizeInBytes, int mode, int[] sessionId, long nativeAudioTrack, boolean offload, int encapsulationMode, Object tunerConfiguration, @NonNull String opPackageName); int buffSizeInBytes, int mode, int[] sessionId, @NonNull Parcel attributionSource, long nativeAudioTrack, boolean offload, int encapsulationMode, Object tunerConfiguration, @NonNull String opPackageName); private native final void native_finalize(); Loading