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

Commit ff63de75 authored by Hassan Shojania's avatar Hassan Shojania
Browse files

Reporting the player's data source type in media analytics

Bug:  37720861
Test: metrics dumpsys
Change-Id: I44eb7049f10aa4f89c9e7b0de6b47d169129d15d
parent 89b67d60
Loading
Loading
Loading
Loading
+37 −1
Original line number Diff line number Diff line
@@ -202,7 +202,8 @@ NuPlayer::NuPlayer(pid_t pid)
      mPaused(false),
      mPausedByClient(true),
      mPausedForBuffering(false),
      mIsDrmProtected(false) {
      mIsDrmProtected(false),
      mDataSourceType(DATA_SOURCE_TYPE_NONE) {
    clearFlushComplete();
}

@@ -225,6 +226,7 @@ void NuPlayer::setDataSourceAsync(const sp<IStreamSource> &source) {

    msg->setObject("source", new StreamingSource(notify, source));
    msg->post();
    mDataSourceType = DATA_SOURCE_TYPE_STREAM;
}

static bool IsHTTPLiveURL(const char *url) {
@@ -258,10 +260,12 @@ void NuPlayer::setDataSourceAsync(
    if (IsHTTPLiveURL(url)) {
        source = new HTTPLiveSource(notify, httpService, url, headers);
        ALOGV("setDataSourceAsync HTTPLiveSource %s", url);
        mDataSourceType = DATA_SOURCE_TYPE_HTTP_LIVE;
    } else if (!strncasecmp(url, "rtsp://", 7)) {
        source = new RTSPSource(
                notify, httpService, url, headers, mUIDValid, mUID);
        ALOGV("setDataSourceAsync RTSPSource %s", url);
        mDataSourceType = DATA_SOURCE_TYPE_RTSP;
    } else if ((!strncasecmp(url, "http://", 7)
                || !strncasecmp(url, "https://", 8))
                    && ((len >= 4 && !strcasecmp(".sdp", &url[len - 4]))
@@ -269,6 +273,7 @@ void NuPlayer::setDataSourceAsync(
        source = new RTSPSource(
                notify, httpService, url, headers, mUIDValid, mUID, true);
        ALOGV("setDataSourceAsync RTSPSource http/https/.sdp %s", url);
        mDataSourceType = DATA_SOURCE_TYPE_RTSP;
    } else {
        ALOGV("setDataSourceAsync GenericSource %s", url);

@@ -282,6 +287,9 @@ void NuPlayer::setDataSourceAsync(
        } else {
            ALOGE("Failed to set data source!");
        }

        // regardless of success/failure
        mDataSourceType = DATA_SOURCE_TYPE_GENERIC_URL;
    }
    msg->setObject("source", source);
    msg->post();
@@ -307,6 +315,7 @@ void NuPlayer::setDataSourceAsync(int fd, int64_t offset, int64_t length) {

    msg->setObject("source", source);
    msg->post();
    mDataSourceType = DATA_SOURCE_TYPE_GENERIC_FD;
}

void NuPlayer::setDataSourceAsync(const sp<DataSource> &dataSource) {
@@ -323,6 +332,7 @@ void NuPlayer::setDataSourceAsync(const sp<DataSource> &dataSource) {

    msg->setObject("source", source);
    msg->post();
    mDataSourceType = DATA_SOURCE_TYPE_MEDIA;
}

status_t NuPlayer::getDefaultBufferingSettings(
@@ -2651,6 +2661,32 @@ void NuPlayer::sendTimedTextData(const sp<ABuffer> &buffer) {
    }
}

const char *NuPlayer::getDataSourceType() {
    switch (mDataSourceType) {
        case DATA_SOURCE_TYPE_HTTP_LIVE:
            return "HTTPLive";

        case DATA_SOURCE_TYPE_RTSP:
            return "RTSP";

        case DATA_SOURCE_TYPE_GENERIC_URL:
            return "GenURL";

        case DATA_SOURCE_TYPE_GENERIC_FD:
            return "GenFD";

        case DATA_SOURCE_TYPE_MEDIA:
            return "Media";

        case DATA_SOURCE_TYPE_STREAM:
            return "Stream";

        case DATA_SOURCE_TYPE_NONE:
        default:
            return "None";
    }
 }

// Modular DRM begin
status_t NuPlayer::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId)
{
+14 −0
Original line number Diff line number Diff line
@@ -93,6 +93,8 @@ struct NuPlayer : public AHandler {
    status_t prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId);
    status_t releaseDrm();

    const char *getDataSourceType();

protected:
    virtual ~NuPlayer();

@@ -236,6 +238,18 @@ private:
    sp<ICrypto> mCrypto;
    bool mIsDrmProtected;

    typedef enum {
        DATA_SOURCE_TYPE_NONE,
        DATA_SOURCE_TYPE_HTTP_LIVE,
        DATA_SOURCE_TYPE_RTSP,
        DATA_SOURCE_TYPE_GENERIC_URL,
        DATA_SOURCE_TYPE_GENERIC_FD,
        DATA_SOURCE_TYPE_MEDIA,
        DATA_SOURCE_TYPE_STREAM,
    } DATA_SOURCE_TYPE;

    std::atomic<DATA_SOURCE_TYPE> mDataSourceType;

    inline const sp<DecoderBase> &getDecoder(bool audio) {
        return audio ? mAudioDecoder : mVideoDecoder;
    }
+3 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ static const char *kPlayerDuration = "android.media.mediaplayer.durationMs";
static const char *kPlayerPlaying = "android.media.mediaplayer.playingMs";
static const char *kPlayerError = "android.media.mediaplayer.err";
static const char *kPlayerErrorCode = "android.media.mediaplayer.errcode";
static const char *kPlayerDataSourceType = "android.media.mediaplayer.dataSource";


NuPlayerDriver::NuPlayerDriver(pid_t pid)
@@ -570,6 +571,8 @@ void NuPlayerDriver::updateMetrics(const char *where) {
    mAnalyticsItem->setInt64(kPlayerDuration, duration_ms);

    mAnalyticsItem->setInt64(kPlayerPlaying, (mPlayingTimeUs+500)/1000 );

    mAnalyticsItem->setCString(kPlayerDataSourceType, mPlayer->getDataSourceType());
}