Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 608a2630 authored by Gloria Wang's avatar Gloria Wang
Browse files

Dump media recorder PID in dumpsys media.player, and fix minor bugs.

parent fae288c7
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -225,7 +225,10 @@ MediaPlayerService::~MediaPlayerService()
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 @@ sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid)
    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 @@ status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
            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");
+3 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ namespace android {
class IMediaRecorder;
class IMediaMetadataRetriever;
class IOMX;
class MediaRecorderClient;

#define CALLBACK_ANTAGONIZER 0
#if CALLBACK_ANTAGONIZER
@@ -175,6 +176,7 @@ public:

    // 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 @@ private:

    mutable     Mutex                       mLock;
                SortedVector< wp<Client> >  mClients;
                SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients;
                int32_t                     mNextConnId;
};

+9 −1
Original line number Diff line number Diff line
@@ -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 @@ status_t MediaRecorderClient::setVideoSource(int vs)
    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 @@ status_t MediaRecorderClient::setAudioSource(int as)
    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 @@ status_t MediaRecorderClient::release()
    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()
+3 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ namespace android {

class PVMediaRecorder;
class ISurface;
class MediaPlayerService;

class MediaRecorderClient : public BnMediaRecorder
{
@@ -53,12 +54,13 @@ public:
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