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

Commit a4d39f90 authored by Dichen Zhang's avatar Dichen Zhang Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer2: create MP2AudioOutput in constructor"

parents dcfd26ee a60eaa87
Loading
Loading
Loading
Loading
+7 −22
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ status_t MediaPlayer2AudioOutput::dump(int fd, const Vector<String16>& args) con
}

MediaPlayer2AudioOutput::MediaPlayer2AudioOutput(audio_session_t sessionId, uid_t uid, int pid,
        const jobject attributes, std::vector<jobject>& routingDelegatesBackup)
        const jobject attributes)
    : mCallback(nullptr),
      mCallbackCookie(nullptr),
      mCallbackData(nullptr),
@@ -77,20 +77,12 @@ MediaPlayer2AudioOutput::MediaPlayer2AudioOutput(audio_session_t sessionId, uid_
      mFlags(AUDIO_OUTPUT_FLAG_NONE) {
    ALOGV("MediaPlayer2AudioOutput(%d)", sessionId);

    if (mAttributes != nullptr) {
        mAttributes->~JObjectHolder();
    }
    if (attributes != nullptr) {
        mAttributes = new JObjectHolder(attributes);
    }

    setMinBufferCount();
    mRoutingDelegates.clear();
    for (auto routingDelegate : routingDelegatesBackup) {
        mRoutingDelegates.push_back(std::pair<jobject, jobject>(
                JAudioTrack::getListener(routingDelegate), routingDelegate));
    }
    routingDelegatesBackup.clear();
}

MediaPlayer2AudioOutput::~MediaPlayer2AudioOutput() {
@@ -251,11 +243,8 @@ status_t MediaPlayer2AudioOutput::getFramesWritten(uint32_t *frameswritten) cons

void MediaPlayer2AudioOutput::setAudioAttributes(const jobject attributes) {
    Mutex::Autolock lock(mLock);
    if (mAttributes != nullptr) {
        mAttributes->~JObjectHolder();
    }
    if (attributes != nullptr) {
        mAttributes = new JObjectHolder(attributes);
        sp<JObjectHolder> x = new JObjectHolder(attributes);
    }
}

@@ -564,15 +553,6 @@ status_t MediaPlayer2AudioOutput::removeAudioDeviceCallback(jobject listener) {
    return NO_ERROR;
}

void MediaPlayer2AudioOutput::copyAudioDeviceCallback(
        std::vector<jobject>& routingDelegateTarget) {
    ALOGV("copyAudioDeviceCallback");
    for (std::vector<std::pair<jobject, jobject>>::iterator it = mRoutingDelegates.begin();
            it != mRoutingDelegates.end(); it++) {
        routingDelegateTarget.push_back(it->second);
    }
}

// static
void MediaPlayer2AudioOutput::CallbackWrapper(
        int event, void *cookie, void *info) {
@@ -650,6 +630,11 @@ audio_session_t MediaPlayer2AudioOutput::getSessionId() const {
    return mSessionId;
}

void MediaPlayer2AudioOutput::setSessionId(const audio_session_t id) {
    Mutex::Autolock lock(mLock);
    mSessionId = id;
}

uint32_t MediaPlayer2AudioOutput::getSampleRate() const {
    Mutex::Autolock lock(mLock);
    if (mJAudioTrack == 0) {
+2 −3
Original line number Diff line number Diff line
@@ -41,8 +41,7 @@ public:
    MediaPlayer2AudioOutput(audio_session_t sessionId,
                            uid_t uid,
                            int pid,
                            const jobject attributes,
                            std::vector<jobject>& routingDelegatesBackup);
                            const jobject attributes);
    virtual ~MediaPlayer2AudioOutput();

    virtual bool ready() const {
@@ -59,6 +58,7 @@ public:
    virtual int64_t getPlayedOutDurationUs(int64_t nowUs) const;
    virtual status_t getFramesWritten(uint32_t *frameswritten) const;
    virtual audio_session_t getSessionId() const;
    virtual void setSessionId(const audio_session_t id);
    virtual uint32_t getSampleRate() const;
    virtual int64_t getBufferDurationInUs() const;

@@ -99,7 +99,6 @@ public:
    virtual jobject getRoutedDevice();
    virtual status_t addAudioDeviceCallback(jobject routingDelegate);
    virtual status_t removeAudioDeviceCallback(jobject listener);
    virtual void copyAudioDeviceCallback(std::vector<jobject>& routingDelegateTarget);

private:
    static void setMinBufferCount();
+0 −2
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
#include <mediaplayer2/MediaPlayer2Types.h>
#include <mediaplayer2/JObjectHolder.h>

#include <vector>
#include <jni.h>
#include <utils/Errors.h>
#include <utils/Mutex.h>
@@ -154,7 +153,6 @@ private:
    audio_session_t             mAudioSessionId;
    sp<JObjectHolder>           mAudioAttributes;
    float                       mSendLevel;
    std::vector<jobject>        mRoutingDelegates;
    sp<ANativeWindowWrapper>    mConnectedWindow;
};

+5 −8
Original line number Diff line number Diff line
@@ -258,6 +258,8 @@ MediaPlayer2::MediaPlayer2() {
    // TODO: get pid and uid from JAVA
    mPid = IPCThreadState::self()->getCallingPid();
    mUid = IPCThreadState::self()->getCallingUid();

    mAudioOutput = new MediaPlayer2AudioOutput(mAudioSessionId, mUid, mPid, NULL /*attributes*/);
}

MediaPlayer2::~MediaPlayer2() {
@@ -352,14 +354,7 @@ status_t MediaPlayer2::setDataSource(const sp<DataSourceDesc> &dsd) {

        clear_l();

        if (mAudioOutput != NULL) {
            mAudioOutput->copyAudioDeviceCallback(mRoutingDelegates);
        }

        player->setListener(new proxyListener(this));
        mAudioOutput = new MediaPlayer2AudioOutput(mAudioSessionId, mUid,
                mPid, mAudioAttributes != NULL ? mAudioAttributes->getJObject() : NULL,
                mRoutingDelegates);
        player->setAudioSink(mAudioOutput);

        err = player->setDataSource(dsd);
@@ -911,6 +906,9 @@ status_t MediaPlayer2::setAudioSessionId(audio_session_t sessionId) {
        AudioSystem::releaseAudioSessionId(mAudioSessionId, -1);
        mAudioSessionId = sessionId;
    }
    if (mAudioOutput != NULL && mAudioSessionId != mAudioOutput->getSessionId()) {
        mAudioOutput->setSessionId(sessionId);
    }
    return NO_ERROR;
}

@@ -1184,7 +1182,6 @@ status_t MediaPlayer2::addAudioDeviceCallback(jobject routingDelegate) {
    Mutex::Autolock _l(mLock);
    if (mAudioOutput == NULL) {
        ALOGV("addAudioDeviceCallback: player not init");
        mRoutingDelegates.push_back(routingDelegate);
        return NO_INIT;
    }
    return mAudioOutput->addAudioDeviceCallback(routingDelegate);