Skip to content
Snippets Groups Projects
Commit ad0a9222 authored by maxwen's avatar maxwen
Browse files

update for android R

Change-Id: I8e7d60aa34739bf0365a62f95cd1fcf04576f132
parent ec24ebe1
No related branches found
No related tags found
No related merge requests found
......@@ -168,9 +168,21 @@ status_t AndroidDesktop::updateDisplayInfo() {
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);
err = SurfaceComposerClient::getDisplayState(displayToken, &mDisplayState);
if (err != NO_ERROR) {
ALOGE("Failed to get current display status");
return err;
}
mPixels->setDisplayInfo(&mDisplayInfo);
mPixels->setDisplayInfo(&mDisplayConfig, &mDisplayState);
return NO_ERROR;
}
......@@ -187,7 +199,8 @@ void AndroidDesktop::onBufferDimensionsChanged(uint32_t width, uint32_t height)
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();
......
......@@ -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 @@ class AndroidDesktop : public rfb::SDesktop,
// Primary display
DisplayInfo mDisplayInfo;
DisplayConfig mDisplayConfig = {};
ui::DisplayState mDisplayState = {};
// Virtual input device
sp<InputDevice> mInputDevice;
......
......@@ -37,8 +37,8 @@ AndroidPixelBuffer::~AndroidPixelBuffer() {
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::setWindowSize(uint32_t width, uint32_t height) {
}
}
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,
......
......@@ -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 @@ class AndroidPixelBuffer : public RefBase, public rfb::ManagedPixelBuffer {
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 @@ class AndroidPixelBuffer : public RefBase, public rfb::ManagedPixelBuffer {
void reset();
private:
static bool isDisplayRotated(uint8_t orientation);
static bool isDisplayRotated(ui::Rotation orientation);
virtual void setBufferRotation(bool rotated);
......
......@@ -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 @@ VirtualDisplay::VirtualDisplay(DisplayInfo* info, uint32_t width, uint32_t heigh
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();
......
......@@ -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 @@ namespace vncflinger {
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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment