OSDN Git Service

set() in AudioRecord and AudioTracks needs no lock
authorGlenn Kasten <gkasten@google.com>
Fri, 20 Mar 2015 16:01:44 +0000 (09:01 -0700)
committerGlenn Kasten <gkasten@google.com>
Mon, 23 Mar 2015 21:52:03 +0000 (14:52 -0700)
Change-Id: I9d61b3d117e9b21fbbfad772d8981a5abb8fafae

include/media/AudioRecord.h
include/media/AudioTrack.h
media/libmedia/AudioRecord.cpp
media/libmedia/AudioTrack.cpp

index c503f25..18d8455 100644 (file)
@@ -183,6 +183,7 @@ public:
 
     /* Initialize an AudioRecord that was created using the AudioRecord() constructor.
      * Don't call set() more than once, or after an AudioRecord() constructor that takes parameters.
+     * set() is not multi-thread safe.
      * Returned status (from utils/Errors.h) can be:
      *  - NO_ERROR: successful intialization
      *  - INVALID_OPERATION: AudioRecord is already initialized or record device is already in use
index 81b1181..818c8cd 100644 (file)
@@ -238,6 +238,7 @@ public:
 
     /* Initialize an AudioTrack that was created using the AudioTrack() constructor.
      * Don't call set() more than once, or after the AudioTrack() constructors that take parameters.
+     * set() is not multi-thread safe.
      * Returned status (from utils/Errors.h) can be:
      *  - NO_ERROR: successful initialization
      *  - INVALID_OPERATION: AudioTrack is already initialized
index 1a65ee8..7decafd 100644 (file)
@@ -161,8 +161,6 @@ status_t AudioRecord::set(
     }
     mTransfer = transferType;
 
-    AutoMutex lock(mLock);
-
     // invariant that mAudioRecord != 0 is true only after set() returns successfully
     if (mAudioRecord != 0) {
         ALOGE("Track already in use");
@@ -235,6 +233,7 @@ status_t AudioRecord::set(
     if (cbf != NULL) {
         mAudioRecordThread = new AudioRecordThread(*this, threadCanCallJava);
         mAudioRecordThread->run("AudioRecord", ANDROID_PRIORITY_AUDIO);
+        // thread begins in paused state, and will not reference us until start()
     }
 
     // create the IAudioRecord
index 8fd5278..98f64fe 100644 (file)
@@ -274,8 +274,6 @@ status_t AudioTrack::set(
 
     ALOGV("set() streamType %d frameCount %zu flags %04x", streamType, frameCount, flags);
 
-    AutoMutex lock(mLock);
-
     // invariant that mAudioTrack != 0 is true only after set() returns successfully
     if (mAudioTrack != 0) {
         ALOGE("Track already in use");
@@ -401,6 +399,7 @@ status_t AudioTrack::set(
     if (cbf != NULL) {
         mAudioTrackThread = new AudioTrackThread(*this, threadCanCallJava);
         mAudioTrackThread->run("AudioTrack", ANDROID_PRIORITY_AUDIO, 0 /*stack*/);
+        // thread begins in paused state, and will not reference us until start()
     }
 
     // create the IAudioTrack