From dafe8ac64be2afdf19ca2aa993b89623ad10b93f Mon Sep 17 00:00:00 2001 From: Jason Sams <> Date: Tue, 24 Mar 2009 20:21:49 -0700 Subject: [PATCH] Automated import from //branches/master/...@141471,141471 --- camera/libcameraservice/Android.mk | 3 ++- camera/libcameraservice/CameraService.cpp | 30 ++++++++++++++++++++++ camera/libcameraservice/CameraService.h | 5 ++++ data/sounds/AudioPackage2.mk | 2 ++ data/sounds/OriginalAudio.mk | 1 + data/sounds/effects/camera_click.ogg | Bin 0 -> 5593 bytes 6 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 data/sounds/effects/camera_click.ogg diff --git a/camera/libcameraservice/Android.mk b/camera/libcameraservice/Android.mk index 2dfe659a2e042..96cc512dc5d63 100644 --- a/camera/libcameraservice/Android.mk +++ b/camera/libcameraservice/Android.mk @@ -42,7 +42,8 @@ LOCAL_SRC_FILES:= \ LOCAL_SHARED_LIBRARIES:= \ libui \ libutils \ - libcutils + libcutils \ + libmedia LOCAL_MODULE:= libcameraservice diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index 15e3b21aeaa03..851b2132f648b 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -28,6 +28,8 @@ #include #include +#include +#include #include "CameraService.h" namespace android { @@ -151,6 +153,19 @@ void CameraService::removeClient(const sp& cameraClient) } } +static sp newMediaPlayer(const char *file) +{ + sp mp = new MediaPlayer(); + if (mp->setDataSource(file) == NO_ERROR) { + mp->setAudioStreamType(AudioSystem::ALARM); + mp->prepare(); + } else { + mp.clear(); + LOGE("Failed to load CameraService sounds."); + } + return mp; +} + CameraService::Client::Client(const sp& cameraService, const sp& cameraClient, pid_t clientPid) { @@ -161,6 +176,9 @@ CameraService::Client::Client(const sp& cameraService, mHardware = openCameraHardware(); mUseOverlay = mHardware->useOverlay(); + mMediaPlayerClick = newMediaPlayer("/system/media/audio/ui/camera_click.ogg"); + mMediaPlayerBeep = newMediaPlayer("/system/media/audio/ui/VideoRecord.ogg"); + // Callback is disabled by default mPreviewCallbackFlag = FRAME_CALLBACK_FLAG_NOOP; LOGD("Client X constructor"); @@ -265,6 +283,9 @@ CameraService::Client::~Client() #endif } + mMediaPlayerBeep.clear(); + mMediaPlayerClick.clear(); + // make sure we tear down the hardware mClientPid = IPCThreadState::self()->getCallingPid(); disconnect(); @@ -464,6 +485,9 @@ status_t CameraService::Client::startPreview() status_t CameraService::Client::startRecording() { + if (mMediaPlayerBeep.get() != NULL) { + mMediaPlayerBeep->start(); + } return startCameraMode(CAMERA_RECORDING_MODE); } @@ -502,6 +526,9 @@ void CameraService::Client::stopRecording() return; } + if (mMediaPlayerBeep.get() != NULL) { + mMediaPlayerBeep->start(); + } mHardware->stopRecording(); LOGV("stopRecording(), hardware stopped OK"); mPreviewBuffer.clear(); @@ -684,6 +711,9 @@ status_t CameraService::Client::takePicture() return INVALID_OPERATION; } + if (mMediaPlayerClick.get() != NULL) { + mMediaPlayerClick->start(); + } return mHardware->takePicture(shutterCallback, yuvPictureCallback, jpegPictureCallback, diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h index d9b79276a72a8..6752f265dabbf 100644 --- a/camera/libcameraservice/CameraService.h +++ b/camera/libcameraservice/CameraService.h @@ -27,6 +27,8 @@ class android::MemoryHeapBase; namespace android { +class MediaPlayer; + // ---------------------------------------------------------------------------- #define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) @@ -178,6 +180,9 @@ private: sp mPreviewBuffer; int mPreviewCallbackFlag; + sp mMediaPlayerClick; + sp mMediaPlayerBeep; + // these are immutable once the object is created, // they don't need to be protected by a lock sp mCameraClient; diff --git a/data/sounds/AudioPackage2.mk b/data/sounds/AudioPackage2.mk index adf785791c619..f2bf76ef35886 100644 --- a/data/sounds/AudioPackage2.mk +++ b/data/sounds/AudioPackage2.mk @@ -45,6 +45,8 @@ PRODUCT_COPY_FILES += \ $(local_path)/effects/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \ $(local_path)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \ $(local_path)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ + $(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ + $(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(local_path)/newwavelabs/Big_Easy.ogg:system/media/audio/ringtones/Big_Easy.ogg \ $(local_path)/newwavelabs/Bollywood.ogg:system/media/audio/ringtones/Bollywood.ogg \ $(local_path)/newwavelabs/Cairo.ogg:system/media/audio/ringtones/Cairo.ogg \ diff --git a/data/sounds/OriginalAudio.mk b/data/sounds/OriginalAudio.mk index dbd6ad372deb1..291f0b6b997e1 100644 --- a/data/sounds/OriginalAudio.mk +++ b/data/sounds/OriginalAudio.mk @@ -65,5 +65,6 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \ $(LOCAL_PATH)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ + $(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/newwavelabs/CrazyDream.ogg:system/media/audio/ringtones/CrazyDream.ogg \ $(LOCAL_PATH)/newwavelabs/DreamTheme.ogg:system/media/audio/ringtones/DreamTheme.ogg diff --git a/data/sounds/effects/camera_click.ogg b/data/sounds/effects/camera_click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0a769ff9146470af8a492da7e4f6b3030a30ac47 GIT binary patch literal 5593 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 JTxMko{tuJrch>*_ literal 0 HcmV?d00001