diff options
author | Lajos Molnar <lajos@google.com> | 2014-09-29 16:36:37 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2014-09-29 16:38:39 -0700 |
commit | 274084f7bfd3f6bdf5a55cf16ceefed345aa0060 (patch) | |
tree | 2d0cde754ce8e28e0557439195e17cc4ed8f0297 /media/libmediaplayerservice | |
parent | c8c05d6a5821dd56209e160066314a03d2f2ca06 (diff) | |
download | frameworks_av-274084f7bfd3f6bdf5a55cf16ceefed345aa0060.zip frameworks_av-274084f7bfd3f6bdf5a55cf16ceefed345aa0060.tar.gz frameworks_av-274084f7bfd3f6bdf5a55cf16ceefed345aa0060.tar.bz2 |
mediaplayer: make frame-accurate avsync configurable
disable by default
Bug: 17686015
Change-Id: I3961b1bc9c6d48afc8c5f7f5270528ea6341bc60
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 73ac057..6d10651 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -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> ¬ify, @@ -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; } |