Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@ Subject: [PATCH 1/9] (hybris) Add support for get and list of properties.

Change-Id: I089a2a146c06d8ad0c234f0a9a4b5aa07beaeed5
---
libc/include/sys/_system_properties.h | 2 ++
libc/include/sys/system_properties.h | 2 ++
1 file changed, 2 insertions(+)

diff --git a/libc/include/sys/_system_properties.h b/libc/include/sys/_system_properties.h
index 078e857..95fa58f 100644
--- a/libc/include/sys/_system_properties.h
+++ b/libc/include/sys/_system_properties.h
@@ -45,6 +45,8 @@ __BEGIN_DECLS
#define PROP_DIRNAME "/dev/__properties__"
diff --git a/libc/include/sys/system_properties.h b/libc/include/sys/system_properties.h
index 1303079..7bbcf0b 100644
--- a/libc/include/sys/system_properties.h
+++ b/libc/include/sys/system_properties.h
@@ -185,6 +185,8 @@ int __system_properties_init(void);

// Messages sent to init.
#define PROP_MSG_SETPROP 1
+#define PROP_MSG_GETPROP 2
+#define PROP_MSG_LISTPROP 3
#define PROP_MSG_SETPROP2 0x00020001

#define PROP_SUCCESS 0
// Status codes returned by init (but not passed from libc to the caller).
--
2.45.2

Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,20 @@ Signed-off-by: Simonas Leleiva <simonas.leleiva@meramo.co.uk>
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/bionic/locale.cpp b/libc/bionic/locale.cpp
index 2f4d206..feb4e45 100644
index a1d6909..49d3e95 100644
--- a/libc/bionic/locale.cpp
+++ b/libc/bionic/locale.cpp
@@ -37,11 +37,11 @@
@@ -167,7 +167,9 @@ char* setlocale(int category, const char* locale_name) {
}

#include "platform/bionic/macros.h"
static locale_t* get_current_locale_ptr() {
- return &__get_bionic_tls().locale;
+ //return &__get_bionic_tls().locale;
+ static thread_local locale_t g_current_locale;
+ return &g_current_locale;
}

-#if defined(__BIONIC_BUILD_FOR_ANDROID_SUPPORT)
+//#if defined(__BIONIC_BUILD_FOR_ANDROID_SUPPORT)
#define USE_TLS_SLOT 0
-#else
-#define USE_TLS_SLOT 1
-#endif
+//#else
+//#define USE_TLS_SLOT 1
+//#endif

#if USE_TLS_SLOT
#include "bionic/pthread_internal.h"
locale_t uselocale(locale_t new_locale) {
--
2.45.2

Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@ Change-Id: I24486873be638a1a8cd123705ba2e51ec7414b94
create mode 100644 libc/platform/bionic/tls_internal.h

diff --git a/libc/Android.bp b/libc/Android.bp
index fd14aea..990c8bc 100644
index 74e29aa..eff1734 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -1038,6 +1038,7 @@ cc_library_static {
@@ -1064,6 +1064,7 @@ cc_library_static {
"stdio/stdio_ext.cpp",
"stdio/vfscanf.cpp",
"stdio/vfwscanf.cpp",
+ "hybris_support.c",
],

// TODO: why isn't this in a static-libc-only module?
// This contains a weak stub implementation of __find_icu_symbol for wctype.cpp,
arch: {
diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp
index b15a317..824982a 100644
--- a/libc/bionic/ndk_cruft.cpp
Expand Down Expand Up @@ -71,11 +71,11 @@ index b15a317..824982a 100644
+} // extern "C"
\ No newline at end of file
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index 091f711..90b43ea 100644
index cbaa9a6..6c6f6a4 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -211,16 +211,16 @@ __LIBC_HIDDEN__ void __pthread_internal_remove_and_free(pthread_internal_t* thre
__LIBC_HIDDEN__ void __find_main_stack_limits(uintptr_t* low, uintptr_t* high);
@@ -219,16 +219,16 @@ __LIBC_HIDDEN__ void* __allocate_stack_mte_ringbuffer(size_t n, pthread_internal
#endif

static inline __always_inline bionic_tcb* __get_bionic_tcb() {
- return reinterpret_cast<bionic_tcb*>(&__get_tls()[MIN_TLS_SLOT]);
Expand Down Expand Up @@ -114,7 +114,7 @@ index 2c8ec07..73dc54c 100644
__fwritable; # introduced=23
+ __get_tls_hooks; # arm arm64 x86 introduced=21
__get_h_errno;
__getcpu; # arm x86 introduced-arm=12 introduced-x86=12
__getcpu; # arm x86
__getcwd; # arm x86
diff --git a/libc/platform/bionic/tls.h b/libc/platform/bionic/tls.h
index e01eccd..7bb292a 100644
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,48 +80,48 @@ index a1e1702..44817b5 100644
int32_t getState() const { return mCblk->mState; }
uint32_t getBufferSizeInFrames() const { return mBufferSizeInFrames; }
diff --git a/media/libaudioclient/Android.bp b/media/libaudioclient/Android.bp
index 90910a1..5ade32f 100644
index 5785537..7d9eeb4 100644
--- a/media/libaudioclient/Android.bp
+++ b/media/libaudioclient/Android.bp
@@ -75,6 +75,9 @@ cc_library {
@@ -76,6 +76,9 @@ cc_library {
cflags: [
"-Werror",
"-Wall",
"-Werror",
+ "-Wno-error=unused-variable",
+ "-Wno-error=unused-parameter",
+ "-Wno-error=unused-private-field",
],
include_dirs: ["system/media/audio_utils/include"],
export_include_dirs: ["include"],
@@ -117,6 +120,9 @@ cc_library {
"PlayerBase.cpp",
@@ -118,6 +121,9 @@ cc_library {
"RecordingActivityTracker.cpp",
"ToneGenerator.cpp",
"TrackPlayerBase.cpp",
+ "record_thread.cpp",
+ "record_track.cpp",
+ "camera_record_service.cpp",
],
defaults: [
"latest_android_media_audio_common_types_cpp_shared",
@@ -144,6 +150,7 @@ cc_library {
@@ -146,6 +152,7 @@ cc_library {
"libmediametrics",
"libmediautils",
"libnblog",
+ "libpowermanager",
"libprocessgroup",
"libshmemcompat",
"libutils",
@@ -161,6 +168,8 @@ cc_library {
@@ -163,6 +170,8 @@ cc_library {

include_dirs: [
"frameworks/av/media/libnbaio/include_mono/",
+ "vendor/halium/libhybris/hybris/include",
+ "vendor/halium/libhybris/compat/media",
],
local_include_dirs: [
"include/media",
"aidl",
diff --git a/media/libaudioclient/AudioRecord.cpp b/media/libaudioclient/AudioRecord.cpp
index 91bc700..7ced30a 100644
index 9a4b45d..8d0fb43 100644
--- a/media/libaudioclient/AudioRecord.cpp
+++ b/media/libaudioclient/AudioRecord.cpp
@@ -16,7 +16,7 @@
Expand All @@ -141,22 +141,21 @@ index 91bc700..7ced30a 100644

#define WAIT_PERIOD_MS 10

@@ -776,7 +777,6 @@ const char * AudioRecord::convertTransferToText(transfer_type transferType) {
@@ -825,7 +826,6 @@ const char * AudioRecord::convertTransferToText(transfer_type transferType) {
status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch)
{
const int64_t beginNs = systemTime();
- const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
IAudioFlinger::CreateRecordInput input;
IAudioFlinger::CreateRecordOutput output;
[[maybe_unused]] audio_session_t originalSessionId;
@@ -787,10 +787,11 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch)
@@ -835,9 +835,11 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch)
static const int32_t kMaxCreateAttempts = 3;
int32_t remainingAttempts = kMaxCreateAttempts;
std::string errorMessage;

- if (audioFlinger == 0) {
- errorMessage = StringPrintf("%s(%d): Could not get audioflinger", __func__, mPortId);
- status = NO_INIT;
- goto exit;
- return logIfErrorAndReturnStatus(
- NO_INIT, StringPrintf("%s(%d): Could not get audioflinger", __func__, mPortId), "");
+ // Get an instance of the CameraRecordInstance over Binder
+ const sp<ICameraRecordService>& recordService = AudioSystem::get_camera_record_service();
+ if (recordService == 0) {
Expand All @@ -165,22 +164,47 @@ index 91bc700..7ced30a 100644
}

// mFlags (not mOrigFlags) is modified depending on whether fast request is accepted.
@@ -846,26 +847,25 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch)
@@ -893,44 +895,25 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch)
originalSessionId = mSessionId;
input.maxSharedAudioHistoryMs = mMaxSharedAudioHistoryMs;

- do {
- media::CreateRecordResponse response;
- status = audioFlinger->createRecord(VALUE_OR_FATAL(input.toAidl()), response);
- output = VALUE_OR_FATAL(IAudioFlinger::CreateRecordOutput::fromAidl(response));
- auto aidlInput = input.toAidl();
- if (!aidlInput.ok()) {
- return logIfErrorAndReturnStatus(
- BAD_VALUE,
- StringPrintf("%s(%d): Could not create record due to invalid input", __func__,
- mPortId),
- "");
- }
- status = audioFlinger->createRecord(aidlInput.value(), response);
+ // Initialize the input reader RecordThread:
+ status = recordService->initRecord(input.config.sample_rate, input.config.format,
+ input.config.channel_mask);
+ if (status != NO_ERROR) {
+ ALOGE("Failed to initialize RecordThread: %s", strerror(status));
+ return status;
+ }

- auto recordOutput = IAudioFlinger::CreateRecordOutput::fromAidl(response);
- if (!recordOutput.ok()) {
- return logIfErrorAndReturnStatus(
- BAD_VALUE,
- StringPrintf("%s(%d): Could not create record output due to invalid response",
- __func__, mPortId),
- "");
- }
- output = recordOutput.value();
- if (status == NO_ERROR) {
- break;
- }
- if (status != FAILED_TRANSACTION || --remainingAttempts <= 0) {
- errorMessage = StringPrintf(
- "%s(%d): AudioFlinger could not create record track, status: %d",
- __func__, mPortId, status);
- goto exit;
- return logIfErrorAndReturnStatus(
- status,
- StringPrintf("%s(%d): AudioFlinger could not create record track, status: %d",
- __func__, mPortId, status),
- "");
- }
- // FAILED_TRANSACTION happens under very specific conditions causing a state mismatch
- // between audio policy manager and audio flinger during the input stream open sequence
Expand All @@ -189,14 +213,6 @@ index 91bc700..7ced30a 100644
- // to reduce the probability of concurrent retries in locked steps.
- usleep((20 + rand() % 30) * 10000);
- } while (1);
+ // Initialize the input reader RecordThread:
+ status = recordService->initRecord(input.config.sample_rate, input.config.format,
+ input.config.channel_mask);
+ if (status != NO_ERROR) {
+ ALOGE("Failed to initialize RecordThread: %s", strerror(status));
+ return status;
+ }
+
+ output.audioRecord = recordService->openRecord(input.config.sample_rate, input.config.format,
+ input.config.channel_mask,
+ input.frameCount,
Expand All @@ -206,43 +222,46 @@ index 91bc700..7ced30a 100644
+
+ if (output.audioRecord == 0 || status != NO_ERROR) {
+ ALOGE("CameraRecordService could not create record track, status: %d", status);
+ goto exit;
+ return status;
+ }

ALOG_ASSERT(output.audioRecord != 0);

diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp
index d1b1849..aa2ea71 100644
index 1430913..c200dc7 100644
--- a/media/libaudioclient/AudioSystem.cpp
+++ b/media/libaudioclient/AudioSystem.cpp
@@ -26,14 +26,17 @@
@@ -26,17 +26,20 @@
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
+#include <cutils/bitops.h>
#include <cutils/properties.h>
#include <media/AidlConversion.h>
#include <media/AudioResamplerPublic.h>
#include <media/AudioSystem.h>
#include <media/IAudioFlinger.h>
#include <media/PolicyAidlConversion.h>
+#include <media/camera_record_service.h>
#include <media/TypeConverter.h>
#include <mediautils/ServiceSingleton.h>
#include <math.h>
#include <private/android_filesystem_config.h>

+#include "cutils/atomic.h"
#include <system/audio.h>
#include <android/media/GetInputForAttrResponse.h>
#include <android/media/AudioMixerAttributesInternal.h>
@@ -77,6 +80,7 @@ std::set<audio_error_callback> AudioSystem::gAudioErrorCallbacks;
@@ -80,6 +83,7 @@ std::set<audio_error_callback> AudioSystem::gAudioErrorCallbacks;

std::mutex AudioSystem::gSoundTriggerMutex;
sp<CaptureStateListenerImpl> AudioSystem::gSoundTriggerCaptureStateListener;
+sp<ICameraRecordService> AudioSystem::gCameraRecord;

// Sets the Binder for the AudioFlinger service, passed to this client process
// from the system server.
@@ -224,6 +228,26 @@ sp<IAudioFlinger> AudioSystem::get_audio_flinger() {
return gAudioFlingerServiceHandler.getService();
// ----------------------------

@@ -312,6 +316,26 @@ sp<AudioSystem::AudioFlingerClient> AudioSystem::getAudioFlingerClient() {
return AudioFlingerServiceTraits::getClient();
}

+const sp<ICameraRecordService>& AudioSystem::get_camera_record_service()
Expand All @@ -265,19 +284,19 @@ index d1b1849..aa2ea71 100644
+ return gCameraRecord;
+}
+
sp<IAudioFlinger> AudioSystem::get_audio_flinger_for_fuzzer() {
return gAudioFlingerServiceHandler.getService(false /* canStartThreadPool */);
void AudioSystem::setAudioFlingerBinder(const sp<IBinder>& audioFlinger) {
AudioFlingerServiceTraits::setBinder(audioFlinger);
}
@@ -264,7 +288,7 @@ sp<AudioIoDescriptor> AudioSystem::getIoDescriptor(audio_io_handle_t ioHandle) {
@@ -337,7 +361,7 @@ sp<AudioIoDescriptor> AudioSystem::getIoDescriptor(audio_io_handle_t ioHandle) {
// FIXME Declare in binder opcode order, similarly to IAudioFlinger.h and IAudioFlinger.cpp

status_t AudioSystem::muteMicrophone(bool state) {
- const sp<IAudioFlinger> af = get_audio_flinger();
+ const sp<IAudioFlinger> af = nullptr; /*get_audio_flinger();*/
if (af == 0) return PERMISSION_DENIED;
if (af == nullptr) return AudioFlingerServiceTraits::getError();
return af->setMicMute(state);
}
@@ -522,13 +546,71 @@ status_t AudioSystem::getLatency(audio_io_handle_t output,
@@ -591,13 +615,71 @@ status_t AudioSystem::getLatency(audio_io_handle_t output,
return NO_ERROR;
}

Expand Down Expand Up @@ -351,7 +370,7 @@ index d1b1849..aa2ea71 100644
}

status_t AudioSystem::setVoiceVolume(float value) {
@@ -555,11 +637,17 @@ uint32_t AudioSystem::getInputFramesLost(audio_io_handle_t ioHandle) {
@@ -624,11 +706,17 @@ uint32_t AudioSystem::getInputFramesLost(audio_io_handle_t ioHandle) {
return result;
}

Expand All @@ -361,7 +380,7 @@ index d1b1849..aa2ea71 100644
// Must not use AF as IDs will re-roll on audioserver restart, b/130369529.
+ /*
const sp<IAudioFlinger> af = get_audio_flinger();
if (af == 0) return AUDIO_UNIQUE_ID_ALLOCATE;
if (af == nullptr) return AUDIO_UNIQUE_ID_ALLOCATE;
return af->newAudioUniqueId(use);
+ */
+ (void) use;
Expand Down Expand Up @@ -696,7 +715,7 @@ index 0000000..10fbb62
+
+} // namespace android
diff --git a/media/libaudioclient/include/media/AudioSystem.h b/media/libaudioclient/include/media/AudioSystem.h
index 338534d..5b0e454 100644
index 9cfd540..c863c8a 100644
--- a/media/libaudioclient/include/media/AudioSystem.h
+++ b/media/libaudioclient/include/media/AudioSystem.h
@@ -89,6 +89,7 @@ typedef void (*vol_range_init_req_callback)();
Expand All @@ -707,17 +726,17 @@ index 338534d..5b0e454 100644
class String8;

namespace media {
@@ -189,6 +190,9 @@ public:
@@ -188,6 +189,9 @@ public:
// helper function to obtain AudioFlinger service handle
static sp<IAudioFlinger> get_audio_flinger();
static sp<IAudioFlinger> get_audio_flinger_for_fuzzer();

+ // helper function to obtain CameraRecordService service handle
+ static const sp<ICameraRecordService>& get_camera_record_service();
+
static float linearToLog(int volume);
static int logToLinear(float volume);
static size_t calculateMinFrameCount(
@@ -922,6 +926,11 @@ public:
// function to disable creation of thread pool (Used for testing).
// This should be called before get_audio_flinger() or get_audio_policy_service().
static void disableThreadPool();
@@ -929,6 +933,11 @@ public:
[[clang::no_destroy]] static std::mutex gSoundTriggerMutex;
[[clang::no_destroy]] static sp<CaptureStateListenerImpl> gSoundTriggerCaptureStateListener
GUARDED_BY(gSoundTriggerMutex);
Expand Down
Loading