Dump media recorder PID in dumpsys media.player, and fix minor bugs.
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 84be874..9d2c779 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -225,7 +225,10 @@
 sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid)
 {
 #ifndef NO_OPENCORE
-    sp<MediaRecorderClient> recorder = new MediaRecorderClient(pid);
+    sp<MediaRecorderClient> recorder = new MediaRecorderClient(this, pid);
+    wp<MediaRecorderClient> w = recorder;
+    Mutex::Autolock lock(mLock);
+    mMediaRecorderClients.add(w);
 #else
     sp<MediaRecorderClient> recorder = NULL;
 #endif
@@ -233,6 +236,13 @@
     return recorder;
 }
 
+void MediaPlayerService::removeMediaRecorderClient(wp<MediaRecorderClient> client)
+{
+    Mutex::Autolock lock(mLock);
+    mMediaRecorderClients.remove(client);
+    LOGV("Delete media recorder client");
+}
+
 sp<IMediaMetadataRetriever> MediaPlayerService::createMetadataRetriever(pid_t pid)
 {
     sp<MetadataRetrieverClient> retriever = new MetadataRetrieverClient(pid);
@@ -460,6 +470,13 @@
             sp<Client> c = mClients[i].promote();
             if (c != 0) c->dump(fd, args);
         }
+        for (int i = 0, n = mMediaRecorderClients.size(); i < n; ++i) {
+            result.append(" MediaRecorderClient\n");
+            sp<MediaRecorderClient> c = mMediaRecorderClients[i].promote();
+            snprintf(buffer, 255, "  pid(%d)\n\n", c->mPid);
+            result.append(buffer);
+        }
+
         result.append(" Files opened and/or mapped:\n");
         snprintf(buffer, SIZE, "/proc/%d/maps", myTid());
         FILE *f = fopen(buffer, "r");
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index 7d2e611..43c4915 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -35,6 +35,7 @@
 class IMediaRecorder;
 class IMediaMetadataRetriever;
 class IOMX;
+class MediaRecorderClient;
 
 #define CALLBACK_ANTAGONIZER 0
 #if CALLBACK_ANTAGONIZER
@@ -175,6 +176,7 @@
 
     // IMediaPlayerService interface
     virtual sp<IMediaRecorder>  createMediaRecorder(pid_t pid);
+    void    removeMediaRecorderClient(wp<MediaRecorderClient> client);
     virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid);
 
     // House keeping for media player clients
@@ -280,6 +282,7 @@
 
     mutable     Mutex                       mLock;
                 SortedVector< wp<Client> >  mClients;
+                SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients;
                 int32_t                     mNextConnId;
 };
 
diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp
index e54f20d..95ee3e4 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.cpp
+++ b/media/libmediaplayerservice/MediaRecorderClient.cpp
@@ -32,7 +32,10 @@
 #include <media/PVMediaRecorder.h>
 #include <utils/String16.h>
 
+#include <media/AudioTrack.h>
+
 #include "MediaRecorderClient.h"
+#include "MediaPlayerService.h"
 
 namespace android {
 
@@ -80,6 +83,7 @@
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL)	{
         LOGE("recorder is not initialized");
+        return NO_INIT;
     }
     return mRecorder->setVideoSource((video_source)vs);
 }
@@ -93,6 +97,7 @@
     Mutex::Autolock lock(mLock);
     if (mRecorder == NULL)  {
         LOGE("recorder is not initialized");
+        return NO_INIT;
     }
     return mRecorder->setAudioSource((audio_source)as);
 }
@@ -271,15 +276,18 @@
     if (mRecorder != NULL) {
         delete mRecorder;
         mRecorder = NULL;
+        wp<MediaRecorderClient> client(this);
+        mMediaPlayerService->removeMediaRecorderClient(client);
     }
     return NO_ERROR;
 }
 
-MediaRecorderClient::MediaRecorderClient(pid_t pid)
+MediaRecorderClient::MediaRecorderClient(const sp<MediaPlayerService>& service, pid_t pid)
 {
     LOGV("Client constructor");
     mPid = pid;
     mRecorder = new PVMediaRecorder();
+    mMediaPlayerService = service;
 }
 
 MediaRecorderClient::~MediaRecorderClient()
diff --git a/media/libmediaplayerservice/MediaRecorderClient.h b/media/libmediaplayerservice/MediaRecorderClient.h
index 6a1c2d5..6260441 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.h
+++ b/media/libmediaplayerservice/MediaRecorderClient.h
@@ -24,6 +24,7 @@
 
 class PVMediaRecorder;
 class ISurface;
+class MediaPlayerService;
 
 class MediaRecorderClient : public BnMediaRecorder
 {
@@ -53,12 +54,13 @@
 private:
     friend class                 MediaPlayerService;  // for accessing private constructor
 
-                                 MediaRecorderClient(pid_t pid);
+                                 MediaRecorderClient(const sp<MediaPlayerService>& service, pid_t pid);
     virtual 		         ~MediaRecorderClient();
 
     pid_t			 mPid;
     Mutex			 mLock;
     PVMediaRecorder              *mRecorder;
+    sp<MediaPlayerService>       mMediaPlayerService;
 };
 
 }; // namespace android