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

Commit c8a70d34 authored by Ronghua Wu's avatar Ronghua Wu
Browse files

nuplayer: get playback frame rate from video track meta instead of file meta.

Bug: 20481562
Change-Id: Ifb4b89cce5bc810f3f411c27ba61c996a488a1c0
parent 78d9a2e7
Loading
Loading
Loading
Loading
+28 −10
Original line number Diff line number Diff line
@@ -704,9 +704,8 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
            }

            if (mVideoDecoder != NULL) {
                sp<MetaData> meta = getFileMeta();
                int32_t rate;
                if (meta != NULL && meta->findInt32(kKeyFrameRate, &rate) && rate > 0) {
                float rate = getFrameRate();
                if (rate > 0) {
                    sp<AMessage> params = new AMessage();
                    params->setFloat("operating-rate", rate * mPlaybackSettings.mSpeed);
                    mVideoDecoder->setParameters(params);
@@ -1265,10 +1264,8 @@ void NuPlayer::onStart() {
        return;
    }

    sp<MetaData> meta = getFileMeta();
    int32_t rate;
    if (meta != NULL
            && meta->findInt32(kKeyFrameRate, &rate) && rate > 0) {
    float rate = getFrameRate();
    if (rate > 0) {
        mRenderer->setVideoFrameRate(rate);
    }

@@ -1426,9 +1423,8 @@ status_t NuPlayer::instantiateDecoder(bool audio, sp<DecoderBase> *decoder) {
            format->setInt32("protected", true);
        }

        sp<MetaData> meta = getFileMeta();
        int32_t rate;
        if (meta != NULL && meta->findInt32(kKeyFrameRate, &rate) && rate > 0) {
        float rate = getFrameRate();
        if (rate > 0) {
            format->setFloat("operating-rate", rate * mPlaybackSettings.mSpeed);
        }
    }
@@ -1702,6 +1698,28 @@ sp<MetaData> NuPlayer::getFileMeta() {
    return mSource->getFileFormatMeta();
}

float NuPlayer::getFrameRate() {
    sp<MetaData> meta = mSource->getFormatMeta(false /* audio */);
    if (meta == NULL) {
        return 0;
    }
    int32_t rate;
    if (!meta->findInt32(kKeyFrameRate, &rate)) {
        // fall back to try file meta
        sp<MetaData> fileMeta = getFileMeta();
        if (fileMeta == NULL) {
            ALOGW("source has video meta but not file meta");
            return -1;
        }
        int32_t fileMetaRate;
        if (!fileMeta->findInt32(kKeyFrameRate, &fileMetaRate)) {
            return -1;
        }
        return fileMetaRate;
    }
    return rate;
}

void NuPlayer::schedulePollDuration() {
    sp<AMessage> msg = new AMessage(kWhatPollDuration, this);
    msg->setInt32("generation", mPollDurationGeneration);
+1 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ struct NuPlayer : public AHandler {
    void getStats(int64_t *mNumFramesTotal, int64_t *mNumFramesDropped);

    sp<MetaData> getFileMeta();
    float getFrameRate();

protected:
    virtual ~NuPlayer();