Merge changes from topic "bring-rm-uptodate"
* changes:
drm: refactor resourcemanager death handling
resourcemanager: refactor death notification
media: update on concurrent codec usage
resourcemanagerservice: make a copy of client config
implementing concurrent codec metrics
diff --git a/media/libaudioclient/AidlConversion.cpp b/media/libaudioclient/AidlConversion.cpp
index bd10e44..2377fc8 100644
--- a/media/libaudioclient/AidlConversion.cpp
+++ b/media/libaudioclient/AidlConversion.cpp
@@ -528,7 +528,7 @@
ConversionResult<media::AudioTimestampInternal>
legacy2aidl_AudioTimestamp_AudioTimestampInternal(const AudioTimestamp& legacy) {
media::AudioTimestampInternal aidl;
- aidl.position = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.mPosition));
+ aidl.position = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.mPosition));
aidl.sec = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.mTime.tv_sec));
aidl.nsec = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.mTime.tv_nsec));
return aidl;
diff --git a/media/libaudioclient/aidl/android/media/AudioTimestampInternal.aidl b/media/libaudioclient/aidl/android/media/AudioTimestampInternal.aidl
index 8bbfb57..1f16525 100644
--- a/media/libaudioclient/aidl/android/media/AudioTimestampInternal.aidl
+++ b/media/libaudioclient/aidl/android/media/AudioTimestampInternal.aidl
@@ -22,8 +22,11 @@
* {@hide}
*/
parcelable AudioTimestampInternal {
- /** A frame position in AudioTrack::getPosition() units. */
- int position;
+ /**
+ * A frame position in AudioTrack::getPosition() units. Use 'long' to accommodate
+ * all values from 'uint32_t'.
+ */
+ long position;
/** corresponding CLOCK_MONOTONIC when frame is expected to present. */
long sec;
int nsec;
diff --git a/media/libmediaplayerservice/Android.bp b/media/libmediaplayerservice/Android.bp
index 266cb17..44e78d6 100644
--- a/media/libmediaplayerservice/Android.bp
+++ b/media/libmediaplayerservice/Android.bp
@@ -17,7 +17,8 @@
],
}
-cc_library {
+filegroup {
+ name: "libmediaplayerservice_sources",
srcs: [
"ActivityManager.cpp",
@@ -30,6 +31,14 @@
"StagefrightRecorder.cpp",
"TestPlayerStub.cpp",
],
+}
+
+cc_defaults {
+ name: "libmediaplayerservice_defaults",
+
+ srcs: [
+ ":libmediaplayerservice_sources",
+ ],
shared_libs: [
"android.hardware.media.c2@1.0",
@@ -83,6 +92,24 @@
"framework-permission-aidl-cpp",
],
+ cflags: [
+ "-Werror",
+ "-Wno-error=deprecated-declarations",
+ "-Wall",
+ ],
+
+ sanitize: {
+ cfi: true,
+ },
+}
+
+cc_library {
+ name: "libmediaplayerservice",
+
+ defaults: [
+ "libmediaplayerservice_defaults",
+ ],
+
export_shared_lib_headers: [
"libmedia",
"framework-permission-aidl-cpp",
@@ -92,22 +119,9 @@
"libmediautils_headers",
],
- local_include_dirs: ["include"],
-
export_include_dirs: [
".",
],
- cflags: [
- "-Werror",
- "-Wno-error=deprecated-declarations",
- "-Wall",
- ],
-
- name: "libmediaplayerservice",
-
- sanitize: {
- cfi: true,
- },
-
+ local_include_dirs: ["include"],
}
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index e5f9789..261973e 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -3038,4 +3038,11 @@
}
return NO_ERROR;
}
+
+#ifdef FUZZ_MODE_MEDIA_PLAYER_SERVICE
+sp<MediaPlayerService> MediaPlayerService::createForFuzzTesting() {
+ return sp<MediaPlayerService>::make();
+}
+#endif // FUZZ_MODE_MEDIA_PLAYER_SERVICE
+
} // namespace android
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index 86be3fe..d4ee8e5 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -505,6 +505,12 @@
SortedVector< wp<Client> > mClients;
SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients;
int32_t mNextConnId;
+
+#ifdef FUZZ_MODE_MEDIA_PLAYER_SERVICE
+public:
+ friend class sp<MediaPlayerService>;
+ static sp<MediaPlayerService> createForFuzzTesting();
+#endif // FUZZ_MODE_MEDIA_PLAYER_SERVICE
};
// ----------------------------------------------------------------------------
diff --git a/media/libmediaplayerservice/fuzzer/Android.bp b/media/libmediaplayerservice/fuzzer/Android.bp
index 91216cb..f564efa 100644
--- a/media/libmediaplayerservice/fuzzer/Android.bp
+++ b/media/libmediaplayerservice/fuzzer/Android.bp
@@ -139,3 +139,26 @@
"libstagefright_httplive",
],
}
+
+cc_fuzz {
+ name: "media_player_service_fuzzer",
+ defaults: [
+ "service_fuzzer_defaults",
+ "libmediaplayerservice_defaults",
+ "fuzzer_disable_leaks",
+ ],
+ srcs: [
+ "media_player_service_fuzzer.cpp",
+ ],
+ fuzz_config: {
+ cc: [
+ "kyslov@google.com",
+ "ibaker@google.com",
+ ],
+ triage_assignee: "waghpawan@google.com",
+ },
+ cflags: [
+ "-DFUZZ_MODE_MEDIA_PLAYER_SERVICE",
+ ],
+ include_dirs: ["frameworks/av/media/libmediaplayerservice/"],
+}
diff --git a/media/libmediaplayerservice/fuzzer/media_player_service_fuzzer.cpp b/media/libmediaplayerservice/fuzzer/media_player_service_fuzzer.cpp
new file mode 100644
index 0000000..4e3b0fe
--- /dev/null
+++ b/media/libmediaplayerservice/fuzzer/media_player_service_fuzzer.cpp
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <fuzzbinder/libbinder_driver.h>
+#include <fuzzer/FuzzedDataProvider.h>
+
+#include <MediaPlayerService.h>
+
+using android::fuzzService;
+using android::MediaPlayerService;
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ auto service = MediaPlayerService::createForFuzzTesting();
+ fuzzService(service, FuzzedDataProvider(data, size));
+ return 0;
+}
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
index 7dde268..ad02959 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
@@ -127,7 +127,7 @@
size_t getUHRMaxJpegBufferSize(camera3::Size uhrMaxJpegSize,
camera3::Size defaultMaxJpegSize, size_t defaultMaxJpegBufferSize) {
- return (uhrMaxJpegSize.width * uhrMaxJpegSize.height) /
+ return ((float)uhrMaxJpegSize.width * uhrMaxJpegSize.height) /
(defaultMaxJpegSize.width * defaultMaxJpegSize.height) * defaultMaxJpegBufferSize;
}