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

Commit 274084f7 authored by Lajos Molnar's avatar Lajos Molnar
Browse files

mediaplayer: make frame-accurate avsync configurable

disable by default

Bug: 17686015
Change-Id: I3961b1bc9c6d48afc8c5f7f5270528ea6341bc60
parent c8c05d6a
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@

#include "NuPlayerRenderer.h"

#include <cutils/properties.h>

#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -39,6 +41,16 @@ static const int64_t kOffloadPauseMaxUs = 60000000ll;
// static
const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll;

static bool sFrameAccurateAVsync = false;

static void readProperties() {
    char value[PROPERTY_VALUE_MAX];
    if (property_get("persist.sys.media.avsync", value, NULL)) {
        sFrameAccurateAVsync =
            !strcmp("1", value) || !strcasecmp("true", value);
    }
}

NuPlayer::Renderer::Renderer(
        const sp<MediaPlayerBase::AudioSink> &sink,
        const sp<AMessage> &notify,
@@ -68,6 +80,7 @@ NuPlayer::Renderer::Renderer(
      mVideoLateByUs(0ll),
      mAudioOffloadPauseTimeoutGeneration(0),
      mAudioOffloadTornDown(false) {
    readProperties();
}

NuPlayer::Renderer::~Renderer() {
@@ -576,6 +589,11 @@ void NuPlayer::Renderer::postDrainVideoQueue() {

    ALOGW_IF(delayUs > 500000, "unusually high delayUs: %" PRId64, delayUs);
    // post 2 display refreshes before rendering is due
    // FIXME currently this increases power consumption, so unless frame-accurate
    // AV sync is requested, post closer to required render time (at 0.63 vsyncs)
    if (!sFrameAccurateAVsync) {
        twoVsyncsUs >>= 4;
    }
    msg->post(delayUs > twoVsyncsUs ? delayUs - twoVsyncsUs : 0);

    mDrainVideoQueuePending = true;
@@ -976,6 +994,8 @@ void NuPlayer::Renderer::onPause() {
}

void NuPlayer::Renderer::onResume() {
    readProperties();

    if (!mPaused) {
        return;
    }