mediaplayer: move MediaClock from NuPlayer to libstagefright.

Bug: 19666434
Change-Id: I86865e594226419bbbbee217098f96434e43afbe
diff --git a/media/libmediaplayerservice/nuplayer/Android.mk b/media/libmediaplayerservice/nuplayer/Android.mk
index e2c72ed..6609874 100644
--- a/media/libmediaplayerservice/nuplayer/Android.mk
+++ b/media/libmediaplayerservice/nuplayer/Android.mk
@@ -4,7 +4,6 @@
 LOCAL_SRC_FILES:=                       \
         GenericSource.cpp               \
         HTTPLiveSource.cpp              \
-        MediaClock.cpp                  \
         NuPlayer.cpp                    \
         NuPlayerCCDecoder.cpp           \
         NuPlayerDecoder.cpp             \
diff --git a/media/libmediaplayerservice/nuplayer/MediaClock.cpp b/media/libmediaplayerservice/nuplayer/MediaClock.cpp
deleted file mode 100644
index 9152da1..0000000
--- a/media/libmediaplayerservice/nuplayer/MediaClock.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaClock"
-#include <utils/Log.h>
-
-#include "MediaClock.h"
-
-#include <media/stagefright/foundation/ADebug.h>
-#include <media/stagefright/foundation/ALooper.h>
-
-namespace android {
-
-MediaClock::MediaClock()
-    : mAnchorTimeMediaUs(-1),
-      mAnchorTimeRealUs(-1),
-      mMaxTimeMediaUs(INT64_MAX),
-      mStartingTimeMediaUs(-1),
-      mPlaybackRate(1.0) {
-}
-
-MediaClock::~MediaClock() {
-}
-
-void MediaClock::setStartingTimeMedia(int64_t startingTimeMediaUs) {
-    Mutex::Autolock autoLock(mLock);
-    mStartingTimeMediaUs = startingTimeMediaUs;
-}
-
-void MediaClock::clearAnchor() {
-    Mutex::Autolock autoLock(mLock);
-    mAnchorTimeMediaUs = -1;
-    mAnchorTimeRealUs = -1;
-}
-
-void MediaClock::updateAnchor(
-        int64_t anchorTimeMediaUs,
-        int64_t anchorTimeRealUs,
-        int64_t maxTimeMediaUs) {
-    if (anchorTimeMediaUs < 0 || anchorTimeRealUs < 0) {
-        ALOGW("reject anchor time since it is negative.");
-        return;
-    }
-
-    Mutex::Autolock autoLock(mLock);
-    int64_t nowUs = ALooper::GetNowUs();
-    int64_t nowMediaUs =
-        anchorTimeMediaUs + (nowUs - anchorTimeRealUs) * (double)mPlaybackRate;
-    if (nowMediaUs < 0) {
-        ALOGW("reject anchor time since it leads to negative media time.");
-        return;
-    }
-    mAnchorTimeRealUs = nowUs;
-    mAnchorTimeMediaUs = nowMediaUs;
-    mMaxTimeMediaUs = maxTimeMediaUs;
-}
-
-void MediaClock::updateMaxTimeMedia(int64_t maxTimeMediaUs) {
-    Mutex::Autolock autoLock(mLock);
-    mMaxTimeMediaUs = maxTimeMediaUs;
-}
-
-void MediaClock::setPlaybackRate(float rate) {
-    CHECK_GE(rate, 0.0);
-    Mutex::Autolock autoLock(mLock);
-    if (mAnchorTimeRealUs == -1) {
-        mPlaybackRate = rate;
-        return;
-    }
-
-    int64_t nowUs = ALooper::GetNowUs();
-    mAnchorTimeMediaUs += (nowUs - mAnchorTimeRealUs) * (double)mPlaybackRate;
-    if (mAnchorTimeMediaUs < 0) {
-        ALOGW("setRate: anchor time should not be negative, set to 0.");
-        mAnchorTimeMediaUs = 0;
-    }
-    mAnchorTimeRealUs = nowUs;
-    mPlaybackRate = rate;
-}
-
-status_t MediaClock::getMediaTime(
-        int64_t realUs, int64_t *outMediaUs, bool allowPastMaxTime) {
-    Mutex::Autolock autoLock(mLock);
-    return getMediaTime_l(realUs, outMediaUs, allowPastMaxTime);
-}
-
-status_t MediaClock::getMediaTime_l(
-        int64_t realUs, int64_t *outMediaUs, bool allowPastMaxTime) {
-    if (mAnchorTimeRealUs == -1) {
-        return NO_INIT;
-    }
-
-    int64_t mediaUs = mAnchorTimeMediaUs
-            + (realUs - mAnchorTimeRealUs) * (double)mPlaybackRate;
-    if (mediaUs > mMaxTimeMediaUs && !allowPastMaxTime) {
-        mediaUs = mMaxTimeMediaUs;
-    }
-    if (mediaUs < mStartingTimeMediaUs) {
-        mediaUs = mStartingTimeMediaUs;
-    }
-    if (mediaUs < 0) {
-        mediaUs = 0;
-    }
-    *outMediaUs = mediaUs;
-    return OK;
-}
-
-status_t MediaClock::getRealTimeFor(int64_t targetMediaUs, int64_t *outRealUs) {
-    Mutex::Autolock autoLock(mLock);
-    if (mPlaybackRate == 0.0) {
-        return NO_INIT;
-    }
-
-    int64_t nowUs = ALooper::GetNowUs();
-    int64_t nowMediaUs;
-    status_t status =
-            getMediaTime_l(nowUs, &nowMediaUs, true /* allowPastMaxTime */);
-    if (status != OK) {
-        return status;
-    }
-    *outRealUs = (targetMediaUs - nowMediaUs) / (double)mPlaybackRate + nowUs;
-    return OK;
-}
-
-}  // namespace android
diff --git a/media/libmediaplayerservice/nuplayer/MediaClock.h b/media/libmediaplayerservice/nuplayer/MediaClock.h
deleted file mode 100644
index 660764f..0000000
--- a/media/libmediaplayerservice/nuplayer/MediaClock.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MEDIA_CLOCK_H_
-
-#define MEDIA_CLOCK_H_
-
-#include <media/stagefright/foundation/ABase.h>
-#include <utils/Mutex.h>
-#include <utils/RefBase.h>
-
-namespace android {
-
-struct AMessage;
-
-struct MediaClock : public RefBase {
-    MediaClock();
-
-    void setStartingTimeMedia(int64_t startingTimeMediaUs);
-
-    void clearAnchor();
-    // It's required to use timestamp of just rendered frame as
-    // anchor time in paused state.
-    void updateAnchor(
-        int64_t anchorTimeMediaUs,
-        int64_t anchorTimeRealUs,
-        int64_t maxTimeMediaUs = INT64_MAX);
-
-    void updateMaxTimeMedia(int64_t maxTimeMediaUs);
-
-    void setPlaybackRate(float rate);
-
-    // query media time corresponding to real time |realUs|, and save the
-    // result in |outMediaUs|.
-    status_t getMediaTime(int64_t realUs,
-                          int64_t *outMediaUs,
-                          bool allowPastMaxTime = false);
-    // query real time corresponding to media time |targetMediaUs|.
-    // The result is saved in |outRealUs|.
-    status_t getRealTimeFor(int64_t targetMediaUs, int64_t *outRealUs);
-
-protected:
-    virtual ~MediaClock();
-
-private:
-    status_t getMediaTime_l(int64_t realUs,
-                            int64_t *outMediaUs,
-                            bool allowPastMaxTime);
-
-    Mutex mLock;
-
-    int64_t mAnchorTimeMediaUs;
-    int64_t mAnchorTimeRealUs;
-    int64_t mMaxTimeMediaUs;
-    int64_t mStartingTimeMediaUs;
-
-    float mPlaybackRate;
-
-    DISALLOW_EVIL_CONSTRUCTORS(MediaClock);
-};
-
-}  // namespace android
-
-#endif  // MEDIA_CLOCK_H_
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index e491a31..6f19ba5 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -20,13 +20,12 @@
 
 #include "NuPlayerRenderer.h"
 
-#include "MediaClock.h"
-
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
 #include <media/stagefright/foundation/AUtils.h>
 #include <media/stagefright/foundation/AWakeLock.h>
+#include <media/stagefright/MediaClock.h>
 #include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/MetaData.h>
 #include <media/stagefright/Utils.h>