Merge "Camera: Lazy load sound files to speed up camera startup"

am: 2b65dca6e1

Change-Id: I6c91b217baff1d8fb299b5eee675bac417ada057
gugelfrei
username 5 years ago committed by android-build-merger
commit 2e6ed61d17

@ -2027,31 +2027,37 @@ sp<MediaPlayer> CameraService::newMediaPlayer(const char *file) {
return mp;
}
void CameraService::loadSound() {
ATRACE_CALL();
void CameraService::increaseSoundRef() {
Mutex::Autolock lock(mSoundLock);
LOG1("CameraService::loadSound ref=%d", mSoundRef);
if (mSoundRef++) return;
mSoundRef++;
}
mSoundPlayer[SOUND_SHUTTER] = newMediaPlayer("/product/media/audio/ui/camera_click.ogg");
if (mSoundPlayer[SOUND_SHUTTER] == nullptr) {
mSoundPlayer[SOUND_SHUTTER] = newMediaPlayer("/system/media/audio/ui/camera_click.ogg");
}
mSoundPlayer[SOUND_RECORDING_START] = newMediaPlayer("/product/media/audio/ui/VideoRecord.ogg");
if (mSoundPlayer[SOUND_RECORDING_START] == nullptr) {
mSoundPlayer[SOUND_RECORDING_START] =
void CameraService::loadSoundLocked(sound_kind kind) {
ATRACE_CALL();
LOG1("CameraService::loadSoundLocked ref=%d", mSoundRef);
if (SOUND_SHUTTER == kind && mSoundPlayer[SOUND_SHUTTER] == NULL) {
mSoundPlayer[SOUND_SHUTTER] = newMediaPlayer("/product/media/audio/ui/camera_click.ogg");
if (mSoundPlayer[SOUND_SHUTTER] == nullptr) {
mSoundPlayer[SOUND_SHUTTER] = newMediaPlayer("/system/media/audio/ui/camera_click.ogg");
}
} else if (SOUND_RECORDING_START == kind && mSoundPlayer[SOUND_RECORDING_START] == NULL) {
mSoundPlayer[SOUND_RECORDING_START] = newMediaPlayer("/product/media/audio/ui/VideoRecord.ogg");
if (mSoundPlayer[SOUND_RECORDING_START] == nullptr) {
mSoundPlayer[SOUND_RECORDING_START] =
newMediaPlayer("/system/media/audio/ui/VideoRecord.ogg");
}
mSoundPlayer[SOUND_RECORDING_STOP] = newMediaPlayer("/product/media/audio/ui/VideoStop.ogg");
if (mSoundPlayer[SOUND_RECORDING_STOP] == nullptr) {
mSoundPlayer[SOUND_RECORDING_STOP] = newMediaPlayer("/system/media/audio/ui/VideoStop.ogg");
}
} else if (SOUND_RECORDING_STOP == kind && mSoundPlayer[SOUND_RECORDING_STOP] == NULL) {
mSoundPlayer[SOUND_RECORDING_STOP] = newMediaPlayer("/product/media/audio/ui/VideoStop.ogg");
if (mSoundPlayer[SOUND_RECORDING_STOP] == nullptr) {
mSoundPlayer[SOUND_RECORDING_STOP] = newMediaPlayer("/system/media/audio/ui/VideoStop.ogg");
}
}
}
void CameraService::releaseSound() {
void CameraService::decreaseSoundRef() {
Mutex::Autolock lock(mSoundLock);
LOG1("CameraService::releaseSound ref=%d", mSoundRef);
LOG1("CameraService::decreaseSoundRef ref=%d", mSoundRef);
if (--mSoundRef) return;
for (int i = 0; i < NUM_SOUNDS; i++) {
@ -2067,6 +2073,7 @@ void CameraService::playSound(sound_kind kind) {
LOG1("playSound(%d)", kind);
Mutex::Autolock lock(mSoundLock);
loadSoundLocked(kind);
sp<MediaPlayer> player = mSoundPlayer[kind];
if (player != 0) {
player->seekTo(0);
@ -2096,7 +2103,7 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
mRemoteCallback = cameraClient;
cameraService->loadSound();
cameraService->increaseSoundRef();
LOG1("Client::Client X (pid %d, id %d)", callingPid, mCameraId);
}
@ -2106,7 +2113,7 @@ CameraService::Client::~Client() {
ALOGV("~Client");
mDestructionStarted = true;
sCameraService->releaseSound();
sCameraService->decreaseSoundRef();
// unconditionally disconnect. function is idempotent
Client::disconnect();
}

@ -177,10 +177,10 @@ public:
NUM_SOUNDS
};
void loadSound();
void playSound(sound_kind kind);
void releaseSound();
void loadSoundLocked(sound_kind kind);
void decreaseSoundRef();
void increaseSoundRef();
/**
* Update the state of a given camera device (open/close/active/idle) with
* the camera proxy service in the system service

Loading…
Cancel
Save