update for android R
Change-Id: I8e7d60aa34739bf0365a62f95cd1fcf04576f132
diff --git a/src/AndroidDesktop.cpp b/src/AndroidDesktop.cpp
index 90f1699..253eefe 100644
--- a/src/AndroidDesktop.cpp
+++ b/src/AndroidDesktop.cpp
@@ -168,9 +168,21 @@
ALOGE("Failed to get display characteristics\n");
return err;
}
- //ALOGV("updateDisplayInfo: [%d:%d]", mDisplayInfo.w, mDisplayInfo.h);
+
+ err = SurfaceComposerClient::getActiveDisplayConfig(displayToken, &mDisplayConfig);
+ if (err != NO_ERROR) {
+ ALOGE("Failed to get display configuration\n");
+ return err;
+ }
+ ALOGV("updateDisplayInfo: [%d:%d]", mDisplayConfig.resolution.width, mDisplayConfig.resolution.height);
- mPixels->setDisplayInfo(&mDisplayInfo);
+ err = SurfaceComposerClient::getDisplayState(displayToken, &mDisplayState);
+ if (err != NO_ERROR) {
+ ALOGE("Failed to get current display status");
+ return err;
+ }
+
+ mPixels->setDisplayInfo(&mDisplayConfig, &mDisplayState);
return NO_ERROR;
}
@@ -187,7 +199,8 @@
mDisplayRect.getHeight(), width, height);
mVirtualDisplay.clear();
- mVirtualDisplay = new VirtualDisplay(&mDisplayInfo, mPixels->width(), mPixels->height(), this);
+ mVirtualDisplay = new VirtualDisplay(&mDisplayConfig, &mDisplayState,
+ mPixels->width(), mPixels->height(), this);
mDisplayRect = mVirtualDisplay->getDisplayRect();
diff --git a/src/AndroidDesktop.h b/src/AndroidDesktop.h
index 1ceecc2..993f466 100644
--- a/src/AndroidDesktop.h
+++ b/src/AndroidDesktop.h
@@ -11,6 +11,8 @@
#include <gui/CpuConsumer.h>
#include <ui/DisplayInfo.h>
+#include <ui/DisplayConfig.h>
+#include <ui/DisplayState.h>
#include <rfb/PixelBuffer.h>
#include <rfb/SDesktop.h>
@@ -79,6 +81,8 @@
// Primary display
DisplayInfo mDisplayInfo;
+ DisplayConfig mDisplayConfig = {};
+ ui::DisplayState mDisplayState = {};
// Virtual input device
sp<InputDevice> mInputDevice;
diff --git a/src/AndroidPixelBuffer.cpp b/src/AndroidPixelBuffer.cpp
index 8af6c39..b6ab0cb 100644
--- a/src/AndroidPixelBuffer.cpp
+++ b/src/AndroidPixelBuffer.cpp
@@ -37,8 +37,8 @@
mListener = nullptr;
}
-bool AndroidPixelBuffer::isDisplayRotated(uint8_t orientation) {
- return orientation != DISPLAY_ORIENTATION_0 && orientation != DISPLAY_ORIENTATION_180;
+bool AndroidPixelBuffer::isDisplayRotated(ui::Rotation orientation) {
+ return orientation != ui::ROTATION_0 && orientation != ui::ROTATION_180;
}
void AndroidPixelBuffer::setBufferRotation(bool rotated) {
@@ -98,12 +98,12 @@
}
}
-void AndroidPixelBuffer::setDisplayInfo(DisplayInfo* info) {
- bool rotated = isDisplayRotated(info->orientation);
+void AndroidPixelBuffer::setDisplayInfo(DisplayConfig* config, ui::DisplayState* state) {
+ bool rotated = isDisplayRotated(state->orientation);
setBufferRotation(rotated);
- uint32_t w = rotated ? info->h : info->w;
- uint32_t h = rotated ? info->w : info->h;
+ uint32_t w = rotated ? config->resolution.height : config->resolution.width;
+ uint32_t h = rotated ? config->resolution.width : config->resolution.height;
if (w != mSourceWidth || h != mSourceHeight) {
ALOGV("Display dimensions changed: old=(%dx%d) new=(%dx%d)", mSourceWidth, mSourceHeight, w,
diff --git a/src/AndroidPixelBuffer.h b/src/AndroidPixelBuffer.h
index 44e7dbd..174665f 100644
--- a/src/AndroidPixelBuffer.h
+++ b/src/AndroidPixelBuffer.h
@@ -21,7 +21,9 @@
#include <utils/Mutex.h>
#include <utils/RefBase.h>
+#include <ui/DisplayConfig.h>
#include <ui/DisplayInfo.h>
+#include <ui/DisplayState.h>
#include <ui/Rect.h>
#include <rfb/PixelBuffer.h>
@@ -35,7 +37,7 @@
public:
AndroidPixelBuffer();
- virtual void setDisplayInfo(DisplayInfo* info);
+ virtual void setDisplayInfo(DisplayConfig* config, ui::DisplayState* state);
virtual void setWindowSize(uint32_t width, uint32_t height);
@@ -61,7 +63,7 @@
void reset();
private:
- static bool isDisplayRotated(uint8_t orientation);
+ static bool isDisplayRotated(ui::Rotation orientation);
virtual void setBufferRotation(bool rotated);
diff --git a/src/VirtualDisplay.cpp b/src/VirtualDisplay.cpp
index 1854a55..1f616d1 100644
--- a/src/VirtualDisplay.cpp
+++ b/src/VirtualDisplay.cpp
@@ -22,20 +22,21 @@
#include <gui/CpuConsumer.h>
#include <gui/IGraphicBufferConsumer.h>
#include <gui/SurfaceComposerClient.h>
-
+#include <input/DisplayViewport.h>
#include "VirtualDisplay.h"
using namespace vncflinger;
-VirtualDisplay::VirtualDisplay(DisplayInfo* info, uint32_t width, uint32_t height,
+VirtualDisplay::VirtualDisplay(DisplayConfig* config, ui::DisplayState* state,
+ uint32_t width, uint32_t height,
sp<CpuConsumer::FrameAvailableListener> listener) {
mWidth = width;
mHeight = height;
- if (info->orientation == DISPLAY_ORIENTATION_0 || info->orientation == DISPLAY_ORIENTATION_180) {
- mSourceRect = Rect(info->w, info->h);
+ if (state->orientation == ui::ROTATION_0 || state->orientation == ui::ROTATION_180) {
+ mSourceRect = Rect(config->resolution.width, config->resolution.height);
} else {
- mSourceRect = Rect(info->h, info->w);
+ mSourceRect = Rect(config->resolution.height, config->resolution.width);
}
Rect displayRect = getDisplayRect();
@@ -54,7 +55,7 @@
SurfaceComposerClient::Transaction t;
t.setDisplaySurface(mDisplayToken, mProducer);
- t.setDisplayProjection(mDisplayToken, 0, mSourceRect, displayRect);
+ t.setDisplayProjection(mDisplayToken, state->orientation, mSourceRect, displayRect);
t.setDisplayLayerStack(mDisplayToken, 0); // default stack
t.apply();
diff --git a/src/VirtualDisplay.h b/src/VirtualDisplay.h
index 02a85c7..cd2356e 100644
--- a/src/VirtualDisplay.h
+++ b/src/VirtualDisplay.h
@@ -23,7 +23,9 @@
#include <gui/CpuConsumer.h>
#include <gui/IGraphicBufferProducer.h>
+#include <ui/DisplayConfig.h>
#include <ui/DisplayInfo.h>
+#include <ui/DisplayState.h>
#include <ui/Rect.h>
using namespace android;
@@ -32,7 +34,8 @@
class VirtualDisplay : public RefBase {
public:
- VirtualDisplay(DisplayInfo* info, uint32_t width, uint32_t height,
+ VirtualDisplay(DisplayConfig *config, ui::DisplayState* state,
+ uint32_t width, uint32_t height,
sp<CpuConsumer::FrameAvailableListener> listener);
virtual ~VirtualDisplay();