diff options
Diffstat (limited to 'media')
-rwxr-xr-x | media/java/android/media/AudioManager.java | 23 | ||||
-rw-r--r-- | media/java/android/media/AudioTrack.java | 10 | ||||
-rwxr-xr-x | media/java/android/media/IAudioService.aidl | 6 | ||||
-rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 6 |
4 files changed, 34 insertions, 11 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 7dff0c2b9380..d22e97c231fd 100755 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -5434,8 +5434,12 @@ public class AudioManager { public boolean setAdditionalOutputDeviceDelay( @NonNull AudioDeviceInfo device, @IntRange(from = 0) long delayMillis) { Objects.requireNonNull(device); - // Implement the setter in r-dev or r-tv-dev as needed. - return false; + try { + return getService().setAdditionalOutputDeviceDelay( + new AudioDeviceAttributes(device), delayMillis); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } } /** @@ -5450,8 +5454,11 @@ public class AudioManager { @IntRange(from = 0) public long getAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) { Objects.requireNonNull(device); - // Implement the getter in r-dev or r-tv-dev as needed. - return 0; + try { + return getService().getAdditionalOutputDeviceDelay(new AudioDeviceAttributes(device)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } } /** @@ -5468,8 +5475,12 @@ public class AudioManager { @IntRange(from = 0) public long getMaxAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) { Objects.requireNonNull(device); - // Implement the getter in r-dev or r-tv-dev as needed. - return 0; + try { + return getService().getMaxAdditionalOutputDeviceDelay( + new AudioDeviceAttributes(device)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } } /** diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index b2c2c4b1bbb4..d7ef4549ca3f 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -1269,10 +1269,12 @@ public class AudioTrack extends PlayerBase // native code figure out the minimum buffer size. if (mMode == MODE_STREAM && mBufferSizeInBytes == 0) { int bytesPerSample = 1; - try { - bytesPerSample = mFormat.getBytesPerSample(mFormat.getEncoding()); - } catch (IllegalArgumentException e) { - // do nothing + if (AudioFormat.isEncodingLinearFrames(mFormat.getEncoding())) { + try { + bytesPerSample = mFormat.getBytesPerSample(mFormat.getEncoding()); + } catch (IllegalArgumentException e) { + // do nothing + } } mBufferSizeInBytes = mFormat.getChannelCount() * bytesPerSample; } diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index ebaa3162d0e4..ed48b569b166 100755 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -330,4 +330,10 @@ interface IAudioService { oneway void unregisterCommunicationDeviceDispatcher( ICommunicationDeviceDispatcher dispatcher); + + boolean setAdditionalOutputDeviceDelay(in AudioDeviceAttributes device, long delayMillis); + + long getAdditionalOutputDeviceDelay(in AudioDeviceAttributes device); + + long getMaxAdditionalOutputDeviceDelay(in AudioDeviceAttributes device); } diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 5daf8b0f88f8..694b93919cde 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -169,8 +169,9 @@ static fields_t gFields; static int IP_V4_LENGTH = 4; static int IP_V6_LENGTH = 16; -void DestroyCallback(const C2Buffer * /* buf */, void *arg) { +void DestroyCallback(const C2Buffer * buf, void *arg) { android::sp<android::MediaEvent> event = (android::MediaEvent *)arg; + android::Mutex::Autolock autoLock(event->mLock); if (event->mLinearBlockObj != NULL) { JNIEnv *env = android::AndroidRuntime::getJNIEnv(); env->DeleteWeakGlobalRef(event->mLinearBlockObj); @@ -179,6 +180,7 @@ void DestroyCallback(const C2Buffer * /* buf */, void *arg) { event->mAvHandleRefCnt--; event->finalize(); + event->decStrong(buf); } namespace android { @@ -369,6 +371,7 @@ jobject MediaEvent::getLinearBlock() { pC2Buffer->setInfo(info); } pC2Buffer->registerOnDestroyNotify(&DestroyCallback, this); + incStrong(pC2Buffer.get()); jobject linearBlock = env->NewObject( env->FindClass("android/media/MediaCodec$LinearBlock"), @@ -3646,6 +3649,7 @@ static jobject android_media_tv_Tuner_media_event_get_linear_block( ALOGD("Failed get MediaEvent"); return NULL; } + android::Mutex::Autolock autoLock(mediaEventSp->mLock); return mediaEventSp->getLinearBlock(); } |