diff options
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/Threads.cpp | 4 | ||||
-rw-r--r-- | services/audiopolicy/AudioPolicyService.cpp | 14 | ||||
-rw-r--r-- | services/audiopolicy/AudioPolicyService.h | 23 | ||||
-rw-r--r-- | services/camera/libcameraservice/CameraService.cpp | 20 |
4 files changed, 48 insertions, 13 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index ae3dd8b..be37436 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -1343,7 +1343,7 @@ sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrac switch (mType) { case DIRECT: - if ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM) { + if (audio_is_linear_pcm(format)) { if (sampleRate != mSampleRate || format != mFormat || channelMask != mChannelMask) { ALOGE("createTrack_l() Bad parameter: sampleRate %u format %#x, channelMask 0x%08x " "for output %p with format %#x", @@ -1365,7 +1365,7 @@ sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrac break; default: - if ((format & AUDIO_FORMAT_MAIN_MASK) != AUDIO_FORMAT_PCM) { + if (!audio_is_linear_pcm(format)) { ALOGE("createTrack_l() Bad parameter: format %#x \"" "for output %p with format %#x", format, mOutput, mFormat); diff --git a/services/audiopolicy/AudioPolicyService.cpp b/services/audiopolicy/AudioPolicyService.cpp index 4a708a0..918c25c 100644 --- a/services/audiopolicy/AudioPolicyService.cpp +++ b/services/audiopolicy/AudioPolicyService.cpp @@ -270,6 +270,10 @@ AudioPolicyService::AudioCommandThread::~AudioCommandThread() if (!mAudioCommands.isEmpty()) { release_wake_lock(mName.string()); } + for (size_t k=0; k < mAudioCommands.size(); k++) { + delete mAudioCommands[k]->mParam; + delete mAudioCommands[k]; + } mAudioCommands.clear(); delete mpToneGenerator; } @@ -441,7 +445,7 @@ void AudioPolicyService::AudioCommandThread::startToneCommand(ToneGenerator::ton ToneData *data = new ToneData(); data->mType = type; data->mStream = stream; - command->mParam = (void *)data; + command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding tone start type %d, stream %d", type, stream); @@ -542,7 +546,7 @@ void AudioPolicyService::AudioCommandThread::stopOutputCommand(audio_io_handle_t data->mIO = output; data->mStream = stream; data->mSession = session; - command->mParam = (void *)data; + command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding stop output %d", output); @@ -555,7 +559,7 @@ void AudioPolicyService::AudioCommandThread::releaseOutputCommand(audio_io_handl command->mCommand = RELEASE_OUTPUT; ReleaseOutputData *data = new ReleaseOutputData(); data->mIO = output; - command->mParam = (void *)data; + command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding release output %d", output); @@ -644,6 +648,10 @@ void AudioPolicyService::AudioCommandThread::insertCommand_l(AudioCommand *comma for (size_t k = i + 1; k < mAudioCommands.size(); k++) { if (mAudioCommands[k] == removedCommands[j]) { ALOGV("suppressing command: %d", mAudioCommands[k]->mCommand); + // for commands that are not filtered, + // command->mParam is deleted in threadLoop + delete mAudioCommands[k]->mParam; + delete mAudioCommands[k]; mAudioCommands.removeAt(k); break; } diff --git a/services/audiopolicy/AudioPolicyService.h b/services/audiopolicy/AudioPolicyService.h index cdc90d0..28e3a4b 100644 --- a/services/audiopolicy/AudioPolicyService.h +++ b/services/audiopolicy/AudioPolicyService.h @@ -198,6 +198,8 @@ private: void insertCommand_l(AudioCommand *command, int delayMs = 0); private: + class AudioCommandData; + // descriptor for requested tone playback event class AudioCommand { @@ -212,41 +214,48 @@ private: Condition mCond; // condition for status return status_t mStatus; // command status bool mWaitStatus; // true if caller is waiting for status - void *mParam; // command parameter (ToneData, VolumeData, ParametersData) + AudioCommandData *mParam; // command specific parameter data + }; + + class AudioCommandData { + public: + virtual ~AudioCommandData() {} + protected: + AudioCommandData() {} }; - class ToneData { + class ToneData : public AudioCommandData { public: ToneGenerator::tone_type mType; // tone type (START_TONE only) audio_stream_type_t mStream; // stream type (START_TONE only) }; - class VolumeData { + class VolumeData : public AudioCommandData { public: audio_stream_type_t mStream; float mVolume; audio_io_handle_t mIO; }; - class ParametersData { + class ParametersData : public AudioCommandData { public: audio_io_handle_t mIO; String8 mKeyValuePairs; }; - class VoiceVolumeData { + class VoiceVolumeData : public AudioCommandData { public: float mVolume; }; - class StopOutputData { + class StopOutputData : public AudioCommandData { public: audio_io_handle_t mIO; audio_stream_type_t mStream; int mSession; }; - class ReleaseOutputData { + class ReleaseOutputData : public AudioCommandData { public: audio_io_handle_t mIO; }; diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index 02bca1f..fe1e707 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -575,6 +575,11 @@ status_t CameraService::connectPro( /*out*/ sp<IProCameraUser>& device) { + if (cameraCb == 0) { + ALOGE("%s: Callback must not be null", __FUNCTION__); + return BAD_VALUE; + } + String8 clientName8(clientPackageName); int callingPid = getCallingPid(); @@ -1257,7 +1262,20 @@ status_t CameraService::dump(int fd, const Vector<String16>& args) { result.appendFormat("Camera module author: %s\n", mModule->common.author); result.appendFormat("Number of camera devices: %d\n\n", mNumberOfCameras); + + sp<VendorTagDescriptor> desc = VendorTagDescriptor::getGlobalVendorTagDescriptor(); + if (desc == NULL) { + result.appendFormat("Vendor tags left unimplemented.\n"); + } else { + result.appendFormat("Vendor tag definitions:\n"); + } + write(fd, result.string(), result.size()); + + if (desc != NULL) { + desc->dump(fd, /*verbosity*/2, /*indentation*/4); + } + for (int i = 0; i < mNumberOfCameras; i++) { result = String8::format("Camera %d static information:\n", i); camera_info info; @@ -1282,7 +1300,7 @@ status_t CameraService::dump(int fd, const Vector<String16>& args) { result.appendFormat(" Device static metadata:\n"); write(fd, result.string(), result.size()); dump_indented_camera_metadata(info.static_camera_characteristics, - fd, 2, 4); + fd, /*verbosity*/2, /*indentation*/4); } else { write(fd, result.string(), result.size()); } |