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

Commit 9111804e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer2: remove MediaPlayerHWInterface"

parents d24be7ca 33abcc7f
Loading
Loading
Loading
Loading
+46 −63
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ status_t MediaPlayer2Manager::Client::dump(int fd, const Vector<String16>& args)
            mPid, mConnId, mStatus, mLoop?"true": "false");
    result.append(buffer);

    sp<MediaPlayer2Base> p;
    sp<MediaPlayer2Interface> p;
    sp<AudioOutput> audioOutput;
    bool locked = false;
    for (int i = 0; i < kDumpLockRetries; ++i) {
@@ -532,7 +532,7 @@ void MediaPlayer2Manager::Client::disconnect()
    ALOGV("disconnect(%d) from pid %d", mConnId, mPid);
    // grab local reference and clear main reference to prevent future
    // access to object
    sp<MediaPlayer2Base> p;
    sp<MediaPlayer2Interface> p;
    {
        Mutex::Autolock l(mLock);
        p = mPlayer;
@@ -560,8 +560,8 @@ void MediaPlayer2Manager::Client::disconnect()
    IPCThreadState::self()->flushCommands();
}

sp<MediaPlayer2Base> MediaPlayer2Manager::Client::createPlayer() {
    sp<MediaPlayer2Base> p = getPlayer();
sp<MediaPlayer2Interface> MediaPlayer2Manager::Client::createPlayer() {
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == NULL) {
        p = new NuPlayer2Driver(mPid);
        status_t init_result = p->initCheck();
@@ -583,7 +583,7 @@ sp<MediaPlayer2Base> MediaPlayer2Manager::Client::createPlayer() {
void MediaPlayer2Manager::Client::AudioDeviceUpdatedNotifier::onAudioDeviceUpdate(
        audio_io_handle_t audioIo,
        audio_port_handle_t deviceId) {
    sp<MediaPlayer2Base> listener = mListener.promote();
    sp<MediaPlayer2Interface> listener = mListener.promote();
    if (listener != NULL) {
        listener->sendEvent(MEDIA2_AUDIO_ROUTING_CHANGED, audioIo, deviceId);
    } else {
@@ -591,8 +591,8 @@ void MediaPlayer2Manager::Client::AudioDeviceUpdatedNotifier::onAudioDeviceUpdat
    }
}

sp<MediaPlayer2Base> MediaPlayer2Manager::Client::setDataSource_pre() {
    sp<MediaPlayer2Base> p = createPlayer();
sp<MediaPlayer2Interface> MediaPlayer2Manager::Client::setDataSource_pre() {
    sp<MediaPlayer2Interface> p = createPlayer();
    if (p == NULL) {
        return p;
    }
@@ -601,17 +601,15 @@ sp<MediaPlayer2Base> MediaPlayer2Manager::Client::setDataSource_pre() {

    mAudioDeviceUpdatedListener = new AudioDeviceUpdatedNotifier(p);

    if (!p->hardwareOutput()) {
    mAudioOutput = new AudioOutput(mAudioSessionId, mUid,
            mPid, mAudioAttributes, mAudioDeviceUpdatedListener);
        static_cast<MediaPlayer2Interface*>(p.get())->setAudioSink(mAudioOutput);
    }
    p->setAudioSink(mAudioOutput);

    return p;
}

status_t MediaPlayer2Manager::Client::setDataSource_post(
        const sp<MediaPlayer2Base>& p,
        const sp<MediaPlayer2Interface>& p,
        status_t status)
{
    ALOGV(" setDataSource");
@@ -657,7 +655,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(
        mStatus = UNKNOWN_ERROR;
        return mStatus;
    } else {
        sp<MediaPlayer2Base> p = setDataSource_pre();
        sp<MediaPlayer2Interface> p = setDataSource_pre();
        if (p == NULL) {
            return NO_INIT;
        }
@@ -694,7 +692,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(int fd, int64_t offset, int6
        ALOGV("calculated length = %lld", (long long)length);
    }

    sp<MediaPlayer2Base> p = setDataSource_pre();
    sp<MediaPlayer2Interface> p = setDataSource_pre();
    if (p == NULL) {
        return NO_INIT;
    }
@@ -705,7 +703,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(int fd, int64_t offset, int6

status_t MediaPlayer2Manager::Client::setDataSource(
        const sp<IStreamSource> &source) {
    sp<MediaPlayer2Base> p = setDataSource_pre();
    sp<MediaPlayer2Interface> p = setDataSource_pre();
    if (p == NULL) {
        return NO_INIT;
    }
@@ -716,7 +714,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(

status_t MediaPlayer2Manager::Client::setDataSource(
        const sp<DataSource> &source) {
    sp<MediaPlayer2Base> p = setDataSource_pre();
    sp<MediaPlayer2Interface> p = setDataSource_pre();
    if (p == NULL) {
        return NO_INIT;
    }
@@ -743,7 +741,7 @@ status_t MediaPlayer2Manager::Client::setVideoSurfaceTexture(
    ALOGV("[%d] setVideoSurfaceTexture(%p)",
          mConnId,
          (nww == NULL ? NULL : nww->getANativeWindow()));
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;

    if (nww != NULL && nww->getANativeWindow() != NULL) {
@@ -796,7 +794,7 @@ status_t MediaPlayer2Manager::Client::setVideoSurfaceTexture(
status_t MediaPlayer2Manager::Client::invoke(const Parcel& request,
                                            Parcel *reply)
{
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == NULL) return UNKNOWN_ERROR;
    return p->invoke(request, reply);
}
@@ -820,7 +818,7 @@ status_t MediaPlayer2Manager::Client::setMetadataFilter(const Parcel& filter)
status_t MediaPlayer2Manager::Client::getMetadata(
        bool update_only, bool /*apply_filter*/, Parcel *reply)
{
    sp<MediaPlayer2Base> player = getPlayer();
    sp<MediaPlayer2Interface> player = getPlayer();
    if (player == 0) return UNKNOWN_ERROR;

    status_t status;
@@ -865,7 +863,7 @@ status_t MediaPlayer2Manager::Client::setBufferingSettings(
{
    ALOGV("[%d] setBufferingSettings{%s}",
            mConnId, buffering.toString().string());
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->setBufferingSettings(buffering);
}
@@ -873,7 +871,7 @@ status_t MediaPlayer2Manager::Client::setBufferingSettings(
status_t MediaPlayer2Manager::Client::getBufferingSettings(
        BufferingSettings* buffering /* nonnull */)
{
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    // TODO: create mPlayer on demand.
    if (p == 0) return UNKNOWN_ERROR;
    status_t ret = p->getBufferingSettings(buffering);
@@ -889,7 +887,7 @@ status_t MediaPlayer2Manager::Client::getBufferingSettings(
status_t MediaPlayer2Manager::Client::prepareAsync()
{
    ALOGV("[%d] prepareAsync", mConnId);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    status_t ret = p->prepareAsync();
#if CALLBACK_ANTAGONIZER
@@ -902,7 +900,7 @@ status_t MediaPlayer2Manager::Client::prepareAsync()
status_t MediaPlayer2Manager::Client::start()
{
    ALOGV("[%d] start", mConnId);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    p->setLooping(mLoop);
    return p->start();
@@ -911,7 +909,7 @@ status_t MediaPlayer2Manager::Client::start()
status_t MediaPlayer2Manager::Client::stop()
{
    ALOGV("[%d] stop", mConnId);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->stop();
}
@@ -919,7 +917,7 @@ status_t MediaPlayer2Manager::Client::stop()
status_t MediaPlayer2Manager::Client::pause()
{
    ALOGV("[%d] pause", mConnId);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->pause();
}
@@ -927,7 +925,7 @@ status_t MediaPlayer2Manager::Client::pause()
status_t MediaPlayer2Manager::Client::isPlaying(bool* state)
{
    *state = false;
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    *state = p->isPlaying();
    ALOGV("[%d] isPlaying: %d", mConnId, *state);
@@ -938,14 +936,14 @@ status_t MediaPlayer2Manager::Client::setPlaybackSettings(const AudioPlaybackRat
{
    ALOGV("[%d] setPlaybackSettings(%f, %f, %d, %d)",
            mConnId, rate.mSpeed, rate.mPitch, rate.mFallbackMode, rate.mStretchMode);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->setPlaybackSettings(rate);
}

status_t MediaPlayer2Manager::Client::getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */)
{
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    status_t ret = p->getPlaybackSettings(rate);
    if (ret == NO_ERROR) {
@@ -962,7 +960,7 @@ status_t MediaPlayer2Manager::Client::setSyncSettings(
{
    ALOGV("[%d] setSyncSettings(%u, %u, %f, %f)",
            mConnId, sync.mSource, sync.mAudioAdjustMode, sync.mTolerance, videoFpsHint);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->setSyncSettings(sync, videoFpsHint);
}
@@ -970,7 +968,7 @@ status_t MediaPlayer2Manager::Client::setSyncSettings(
status_t MediaPlayer2Manager::Client::getSyncSettings(
        AVSyncSettings* sync /* nonnull */, float* videoFps /* nonnull */)
{
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    status_t ret = p->getSyncSettings(sync, videoFps);
    if (ret == NO_ERROR) {
@@ -985,7 +983,7 @@ status_t MediaPlayer2Manager::Client::getSyncSettings(
status_t MediaPlayer2Manager::Client::getCurrentPosition(int *msec)
{
    ALOGV("getCurrentPosition");
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    status_t ret = p->getCurrentPosition(msec);
    if (ret == NO_ERROR) {
@@ -999,7 +997,7 @@ status_t MediaPlayer2Manager::Client::getCurrentPosition(int *msec)
status_t MediaPlayer2Manager::Client::getDuration(int *msec)
{
    ALOGV("getDuration");
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    status_t ret = p->getDuration(msec);
    if (ret == NO_ERROR) {
@@ -1023,7 +1021,7 @@ status_t MediaPlayer2Manager::Client::setNextPlayer(const sp<MediaPlayer2Engine>
    if (c != NULL) {
        if (mAudioOutput != NULL) {
            mAudioOutput->setNextOutput(c->mAudioOutput);
        } else if ((mPlayer != NULL) && !mPlayer->hardwareOutput()) {
        } else {
            ALOGE("no current audio output");
        }

@@ -1040,13 +1038,9 @@ VolumeShaper::Status MediaPlayer2Manager::Client::applyVolumeShaper(
        const sp<VolumeShaper::Operation>& operation) {
    // for hardware output, call player instead
    ALOGV("Client::applyVolumeShaper(%p)", this);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    {
        Mutex::Autolock l(mLock);
        if (p != 0 && p->hardwareOutput()) {
            // TODO: investigate internal implementation
            return VolumeShaper::Status(INVALID_OPERATION);
        }
        if (mAudioOutput.get() != nullptr) {
            return mAudioOutput->applyVolumeShaper(configuration, operation);
        }
@@ -1057,13 +1051,9 @@ VolumeShaper::Status MediaPlayer2Manager::Client::applyVolumeShaper(
sp<VolumeShaper::State> MediaPlayer2Manager::Client::getVolumeShaperState(int id) {
    // for hardware output, call player instead
    ALOGV("Client::getVolumeShaperState(%p)", this);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    {
        Mutex::Autolock l(mLock);
        if (p != 0 && p->hardwareOutput()) {
            // TODO: investigate internal implementation.
            return nullptr;
        }
        if (mAudioOutput.get() != nullptr) {
            return mAudioOutput->getVolumeShaperState(id);
        }
@@ -1074,7 +1064,7 @@ sp<VolumeShaper::State> MediaPlayer2Manager::Client::getVolumeShaperState(int id
status_t MediaPlayer2Manager::Client::seekTo(int msec, MediaPlayer2SeekMode mode)
{
    ALOGV("[%d] seekTo(%d, %d)", mConnId, msec, mode);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->seekTo(msec, mode);
}
@@ -1083,7 +1073,7 @@ status_t MediaPlayer2Manager::Client::reset()
{
    ALOGV("[%d] reset", mConnId);
    mRetransmitEndpointValid = false;
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->reset();
}
@@ -1091,7 +1081,7 @@ status_t MediaPlayer2Manager::Client::reset()
status_t MediaPlayer2Manager::Client::notifyAt(int64_t mediaTimeUs)
{
    ALOGV("[%d] notifyAt(%lld)", mConnId, (long long)mediaTimeUs);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->notifyAt(mediaTimeUs);
}
@@ -1128,7 +1118,7 @@ status_t MediaPlayer2Manager::Client::setLooping(int loop)
{
    ALOGV("[%d] setLooping(%d)", mConnId, loop);
    mLoop = loop;
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p != 0) return p->setLooping(loop);
    return NO_ERROR;
}
@@ -1138,17 +1128,10 @@ status_t MediaPlayer2Manager::Client::setVolume(float leftVolume, float rightVol
    ALOGV("[%d] setVolume(%f, %f)", mConnId, leftVolume, rightVolume);

    // for hardware output, call player instead
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    {
      Mutex::Autolock l(mLock);
      if (p != 0 && p->hardwareOutput()) {
          MediaPlayerHWInterface* hwp =
                  reinterpret_cast<MediaPlayerHWInterface*>(p.get());
          return hwp->setVolume(leftVolume, rightVolume);
      } else {
      if (mAudioOutput != 0) mAudioOutput->setVolume(leftVolume, rightVolume);
          return NO_ERROR;
      }
    }

    return NO_ERROR;
@@ -1179,7 +1162,7 @@ status_t MediaPlayer2Manager::Client::setParameter(int key, const Parcel &reques
        return setAudioAttributes_l(request);
    }
    default:
        sp<MediaPlayer2Base> p = getPlayer();
        sp<MediaPlayer2Interface> p = getPlayer();
        if (p == 0) { return UNKNOWN_ERROR; }
        return p->setParameter(key, request);
    }
@@ -1187,7 +1170,7 @@ status_t MediaPlayer2Manager::Client::setParameter(int key, const Parcel &reques

status_t MediaPlayer2Manager::Client::getParameter(int key, Parcel *reply) {
    ALOGV("[%d] getParameter(%d)", mConnId, key);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;
    return p->getParameter(key, reply);
}
@@ -1204,7 +1187,7 @@ status_t MediaPlayer2Manager::Client::setRetransmitEndpoint(
        ALOGV("[%d] setRetransmitEndpoint = <none>", mConnId);
    }

    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();

    // Right now, the only valid time to set a retransmit endpoint is before
    // player selection has been made (since the presence or absence of a
@@ -1230,7 +1213,7 @@ status_t MediaPlayer2Manager::Client::getRetransmitEndpoint(
    if (NULL == endpoint)
        return BAD_VALUE;

    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();

    if (p != NULL)
        return p->getRetransmitEndpoint(endpoint);
@@ -1333,7 +1316,7 @@ status_t MediaPlayer2Manager::Client::prepareDrm(const uint8_t uuid[16],
        const Vector<uint8_t>& drmSessionId)
{
    ALOGV("[%d] prepareDrm", mConnId);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;

    status_t ret = p->prepareDrm(uuid, drmSessionId);
@@ -1345,7 +1328,7 @@ status_t MediaPlayer2Manager::Client::prepareDrm(const uint8_t uuid[16],
status_t MediaPlayer2Manager::Client::releaseDrm()
{
    ALOGV("[%d] releaseDrm", mConnId);
    sp<MediaPlayer2Base> p = getPlayer();
    sp<MediaPlayer2Interface> p = getPlayer();
    if (p == 0) return UNKNOWN_ERROR;

    status_t ret = p->releaseDrm();
+10 −10
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ class MediaPlayer2EngineClient;
class Antagonizer {
public:
    Antagonizer(
            MediaPlayer2Base::NotifyCallback cb,
            MediaPlayer2Interface::NotifyCallback cb,
            const wp<MediaPlayer2Engine> &client);
    void start() { mActive = true; }
    void stop() { mActive = false; }
@@ -62,14 +62,14 @@ private:
    bool                             mExit;
    bool                             mActive;
    wp<MediaPlayer2Engine>           mClient;
    MediaPlayer2Base::NotifyCallback mCb;
    MediaPlayer2Interface::NotifyCallback mCb;
};
#endif

class MediaPlayer2Manager {
    class Client;

    class AudioOutput : public MediaPlayer2Base::AudioSink
    class AudioOutput : public MediaPlayer2Interface::AudioSink
    {
        class CallbackData;

@@ -287,7 +287,7 @@ private:
                                        const sp<media::VolumeShaper::Operation>& operation) override;
        virtual sp<media::VolumeShaper::State> getVolumeShaperState(int id) override;

        sp<MediaPlayer2Base>    createPlayer();
        sp<MediaPlayer2Interface>    createPlayer();

        virtual status_t        setDataSource(
                        const sp<MediaHTTPService> &httpService,
@@ -300,8 +300,8 @@ private:
        virtual status_t        setDataSource(const sp<DataSource> &source);


        sp<MediaPlayer2Base>    setDataSource_pre();
        status_t                setDataSource_post(const sp<MediaPlayer2Base>& p,
        sp<MediaPlayer2Interface>    setDataSource_pre();
        status_t                setDataSource_post(const sp<MediaPlayer2Interface>& p,
                                                   status_t status);

        static  void            notify(const wp<MediaPlayer2Engine> &listener, int msg,
@@ -323,7 +323,7 @@ private:
        class AudioDeviceUpdatedNotifier: public AudioSystem::AudioDeviceCallback
        {
        public:
            AudioDeviceUpdatedNotifier(const sp<MediaPlayer2Base>& listener) {
            AudioDeviceUpdatedNotifier(const sp<MediaPlayer2Interface>& listener) {
                mListener = listener;
            }
            ~AudioDeviceUpdatedNotifier() {}
@@ -332,7 +332,7 @@ private:
                                             audio_port_handle_t deviceId);

        private:
            wp<MediaPlayer2Base> mListener;
            wp<MediaPlayer2Interface> mListener;
        };

        friend class MediaPlayer2Manager;
@@ -346,7 +346,7 @@ private:

                void            deletePlayer();

        sp<MediaPlayer2Base>     getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; }
        sp<MediaPlayer2Interface> getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; }



@@ -366,7 +366,7 @@ private:
        status_t setAudioAttributes_l(const Parcel &request);

        mutable     Mutex                        mLock;
                    sp<MediaPlayer2Base>         mPlayer;
                    sp<MediaPlayer2Interface>    mPlayer;
                    sp<MediaPlayer2EngineClient> mClient;
                    sp<AudioOutput>              mAudioOutput;
                    pid_t                        mPid;
+9 −26
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ template<typename T> class SortedVector;
#define AUDIO_SINK_MIN_DEEP_BUFFER_DURATION_US 5000000

// abstract base class - use MediaPlayer2Interface
class MediaPlayer2Base : public AHandler
class MediaPlayer2Interface : public AHandler
{
public:
    // callback mechanism for passing messages to MediaPlayer2 object
@@ -148,15 +148,16 @@ public:
        virtual status_t    enableAudioDeviceCallback(bool enabled);
    };

                        MediaPlayer2Base() : mClient(0), mNotify(0) {}
    virtual             ~MediaPlayer2Base() {}
                        MediaPlayer2Interface() : mClient(0), mNotify(0) { }
    virtual             ~MediaPlayer2Interface() { }
    virtual status_t    initCheck() = 0;
    virtual bool        hardwareOutput() = 0;

    virtual status_t    setUID(uid_t /* uid */) {
        return INVALID_OPERATION;
    }

    virtual void        setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; }

    virtual status_t    setDataSource(
            const sp<MediaHTTPService> &httpService,
            const char *url,
@@ -234,7 +235,7 @@ public:
    virtual status_t getRetransmitEndpoint(struct sockaddr_in* /* endpoint */) {
        return INVALID_OPERATION;
    }
    virtual status_t setNextPlayer(const sp<MediaPlayer2Base>& /* next */) {
    virtual status_t setNextPlayer(const sp<MediaPlayer2Interface>& /* next */) {
        return OK;
    }

@@ -292,6 +293,9 @@ public:
        return INVALID_OPERATION;
    }

protected:
    sp<AudioSink>       mAudioSink;

private:
    friend class MediaPlayer2Manager;

@@ -300,27 +304,6 @@ private:
    NotifyCallback         mNotify;
};

// Implement this class for media players that use the AudioFlinger software mixer
class MediaPlayer2Interface : public MediaPlayer2Base
{
public:
    virtual             ~MediaPlayer2Interface() { }
    virtual bool        hardwareOutput() { return false; }
    virtual void        setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; }
protected:
    sp<AudioSink>       mAudioSink;
};

// Implement this class for media players that output audio directly to hardware
class MediaPlayer2HWInterface : public MediaPlayer2Base
{
public:
    virtual             ~MediaPlayer2HWInterface() {}
    virtual bool        hardwareOutput() { return true; }
    virtual status_t    setVolume(float leftVolume, float rightVolume) = 0;
    virtual status_t    setAudioStreamType(audio_stream_type_t streamType) = 0;
};

}; // namespace android

#endif // __cplusplus
+3 −3
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@

namespace android {

static status_t sendMetaDataToHal(sp<MediaPlayer2Base::AudioSink>& sink,
static status_t sendMetaDataToHal(sp<MediaPlayer2Interface::AudioSink>& sink,
                                  const sp<MetaData>& meta) {
    int32_t sampleRate = 0;
    int32_t bitRate = 0;
@@ -417,7 +417,7 @@ void NuPlayer2::setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww)
    msg->post();
}

void NuPlayer2::setAudioSink(const sp<MediaPlayer2Base::AudioSink> &sink) {
void NuPlayer2::setAudioSink(const sp<MediaPlayer2Interface::AudioSink> &sink) {
    sp<AMessage> msg = new AMessage(kWhatSetAudioSink, this);
    msg->setObject("sink", sink);
    msg->post();
@@ -850,7 +850,7 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {
            sp<RefBase> obj;
            CHECK(msg->findObject("sink", &obj));

            mAudioSink = static_cast<MediaPlayer2Base::AudioSink *>(obj.get());
            mAudioSink = static_cast<MediaPlayer2Interface::AudioSink *>(obj.get());
            break;
        }

+2 −2
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ struct NuPlayer2 : public AHandler {

    void setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww);

    void setAudioSink(const sp<MediaPlayer2Base::AudioSink> &sink);
    void setAudioSink(const sp<MediaPlayer2Interface::AudioSink> &sink);
    status_t setPlaybackSettings(const AudioPlaybackRate &rate);
    status_t getPlaybackSettings(AudioPlaybackRate *rate /* nonnull */);
    status_t setSyncSettings(const AVSyncSettings &sync, float videoFpsHint);
@@ -168,7 +168,7 @@ private:
    sp<Source> mSource;
    uint32_t mSourceFlags;
    sp<ANativeWindowWrapper> mNativeWindow;
    sp<MediaPlayer2Base::AudioSink> mAudioSink;
    sp<MediaPlayer2Interface::AudioSink> mAudioSink;
    sp<DecoderBase> mVideoDecoder;
    bool mOffloadAudio;
    sp<DecoderBase> mAudioDecoder;
Loading