summaryrefslogtreecommitdiff
path: root/screen_connector_remote_surface_evas
diff options
context:
space:
mode:
authorJunghoon Park <jh9216.park@samsung.com>2018-02-02 20:26:20 +0900
committerJunghoon Park <jh9216.park@samsung.com>2018-02-05 10:05:51 +0900
commit96310f7474ce8576d49ad897b8f46ace1c37a167 (patch)
treecf12107ffcdcb8227cf06035ecf359a7adc908f3 /screen_connector_remote_surface_evas
parentc105150cebfb0b1ed50be13da2a402560e3db68b (diff)
downloadscreen-connector-96310f7474ce8576d49ad897b8f46ace1c37a167.tar.gz
screen-connector-96310f7474ce8576d49ad897b8f46ace1c37a167.tar.bz2
screen-connector-96310f7474ce8576d49ad897b8f46ace1c37a167.zip
Keep wl_buffer until the image is updated
Change-Id: I52010b593f6b08fc1faf27eb94e028ba8f23af32 Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
Diffstat (limited to 'screen_connector_remote_surface_evas')
-rw-r--r--screen_connector_remote_surface_evas/image.cc5
-rw-r--r--screen_connector_remote_surface_evas/image_internal.h4
-rw-r--r--screen_connector_remote_surface_evas/image_mock_internal.h3
-rw-r--r--screen_connector_remote_surface_evas/remote_surface_evas.cc4
-rw-r--r--screen_connector_remote_surface_evas/remote_surface_evas.h2
-rw-r--r--screen_connector_remote_surface_evas/remote_surface_mixed.cc5
-rw-r--r--screen_connector_remote_surface_evas/remote_surface_mixed_internal.h2
-rw-r--r--screen_connector_remote_surface_evas/watcher_image.cc8
-rw-r--r--screen_connector_remote_surface_evas/watcher_image_internal.h8
9 files changed, 26 insertions, 15 deletions
diff --git a/screen_connector_remote_surface_evas/image.cc b/screen_connector_remote_surface_evas/image.cc
index 0f518a7..098b0a8 100644
--- a/screen_connector_remote_surface_evas/image.cc
+++ b/screen_connector_remote_surface_evas/image.cc
@@ -170,14 +170,15 @@ void Image::MoveCB(void* data, Evas* e, Evas_Object* obj, void* eventInfo) {
img->listener_->OnMove(*img, eventInfo);
}
-void Image::Update(const WlBuffer& tbm) {
+void Image::Update(std::shared_ptr<WlBuffer> tbm) {
int width;
int height;
tbm_surface_h tbmSurface;
Evas_Native_Surface ns;
+ prev_buf_ = std::move(tbm);
/* get tbm surface from buffer */
- tbmSurface = (tbm_surface_h)wl_buffer_get_user_data(tbm.GetRaw());
+ tbmSurface = (tbm_surface_h)wl_buffer_get_user_data(prev_buf_->GetRaw());
width = tbm_surface_get_width(tbmSurface);
height = tbm_surface_get_height(tbmSurface);
diff --git a/screen_connector_remote_surface_evas/image_internal.h b/screen_connector_remote_surface_evas/image_internal.h
index 09c9b0e..ef94fa1 100644
--- a/screen_connector_remote_surface_evas/image_internal.h
+++ b/screen_connector_remote_surface_evas/image_internal.h
@@ -17,6 +17,7 @@
#ifndef SCREEN_CONNECTOR_REMOTE_SURFACE_EVAS_IMAGE_INTERNAL_H_
#define SCREEN_CONNECTOR_REMOTE_SURFACE_EVAS_IMAGE_INTERNAL_H_
+#include <memory>
#include <string>
#include "screen_connector_remote_surface_evas/evas_object.h"
@@ -45,7 +46,7 @@ class Image : public EvasObject {
int pid, void* tag);
virtual ~Image();
- virtual void Update(const WlBuffer& tbm);
+ virtual void Update(std::shared_ptr<WlBuffer> tbm);
private:
static void MouseInCB(void* data, Evas* e, Evas_Object* obj, void* eventInfo);
@@ -69,6 +70,7 @@ class Image : public EvasObject {
private:
IEventListener* listener_;
+ std::shared_ptr<WlBuffer> prev_buf_;
};
} // namespace screen_connector
diff --git a/screen_connector_remote_surface_evas/image_mock_internal.h b/screen_connector_remote_surface_evas/image_mock_internal.h
index e9944fc..7de3ef3 100644
--- a/screen_connector_remote_surface_evas/image_mock_internal.h
+++ b/screen_connector_remote_surface_evas/image_mock_internal.h
@@ -17,6 +17,7 @@
#ifndef SCREEN_CONNECTOR_REMOTE_SURFACE_EVAS_IMAGE_MOCK_INTERNAL_H_
#define SCREEN_CONNECTOR_REMOTE_SURFACE_EVAS_IMAGE_MOCK_INTERNAL_H_
+#include <memory>
#include <string>
#include "screen_connector_remote_surface_evas/image_internal.h"
@@ -31,7 +32,7 @@ class ImageMock : public Image {
: Image(raw, listener, instId, pid, tag) {}
virtual ~ImageMock() {}
- void Update(const WlBuffer& tbm) override {}
+ void Update(std::shared_ptr<WlBuffer> tbm) override {}
};
} // namespace test
diff --git a/screen_connector_remote_surface_evas/remote_surface_evas.cc b/screen_connector_remote_surface_evas/remote_surface_evas.cc
index d6ce1ff..5b52e83 100644
--- a/screen_connector_remote_surface_evas/remote_surface_evas.cc
+++ b/screen_connector_remote_surface_evas/remote_surface_evas.cc
@@ -447,8 +447,8 @@ void RemoteSurfaceEvas::OnBufferRemoved(const std::string& appId,
impl_->winVisibility_map_.clear();
}
-void RemoteSurfaceEvas::OnBufferChanged(int type, const WlBuffer& tbm, int fd,
- uint32_t size, uint32_t time) {
+void RemoteSurfaceEvas::OnBufferChanged(int type, std::shared_ptr<WlBuffer> tbm,
+ int fd, uint32_t size, uint32_t time) {
bool isAdded = false;
if (type != TIZEN_REMOTE_SURFACE_BUFFER_TYPE_TBM)
diff --git a/screen_connector_remote_surface_evas/remote_surface_evas.h b/screen_connector_remote_surface_evas/remote_surface_evas.h
index 3695afa..14f2f75 100644
--- a/screen_connector_remote_surface_evas/remote_surface_evas.h
+++ b/screen_connector_remote_surface_evas/remote_surface_evas.h
@@ -59,7 +59,7 @@ class EXPORT_API RemoteSurfaceEvas : public RemoteSurface, public IEvasEvent {
int pid) override;
void OnBufferRemoved(const std::string& appId, const std::string& instId,
int pid) override;
- void OnBufferChanged(int type, const WlBuffer& tbm, int fd,
+ void OnBufferChanged(int type, std::shared_ptr<WlBuffer> tbm, int fd,
uint32_t size, uint32_t time) override;
void OnEvasAdded(const std::string& appId, const std::string& instId,
int pid, const EvasObject& image) override;
diff --git a/screen_connector_remote_surface_evas/remote_surface_mixed.cc b/screen_connector_remote_surface_evas/remote_surface_mixed.cc
index 515ffaa..dba33ad 100644
--- a/screen_connector_remote_surface_evas/remote_surface_mixed.cc
+++ b/screen_connector_remote_surface_evas/remote_surface_mixed.cc
@@ -55,8 +55,9 @@ void RemoteSurfaceMixed::OnBufferRemoved(const std::string& appId,
img_tbm_.reset();
}
-void RemoteSurfaceMixed::OnBufferChanged(int type, const WlBuffer& tbm, int fd,
- uint32_t size, uint32_t time) {
+void RemoteSurfaceMixed::OnBufferChanged(int type,
+ std::shared_ptr<WlBuffer> tbm,
+ int fd, uint32_t size, uint32_t time) {
if (type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_TBM) {
if (img_tbm_.get() == nullptr) {
LOGD("first added !!!! %d %s", type, GetAppId().c_str());
diff --git a/screen_connector_remote_surface_evas/remote_surface_mixed_internal.h b/screen_connector_remote_surface_evas/remote_surface_mixed_internal.h
index f91279a..4041737 100644
--- a/screen_connector_remote_surface_evas/remote_surface_mixed_internal.h
+++ b/screen_connector_remote_surface_evas/remote_surface_mixed_internal.h
@@ -42,7 +42,7 @@ class RemoteSurfaceMixed : public RemoteSurface {
int pid) override;
void OnBufferRemoved(const std::string& appId, const std::string& instId,
int pid) override;
- void OnBufferChanged(int type, const WlBuffer& tbm, int fd,
+ void OnBufferChanged(int type, std::shared_ptr<WlBuffer> tbm, int fd,
uint32_t size, uint32_t time) override;
private:
diff --git a/screen_connector_remote_surface_evas/watcher_image.cc b/screen_connector_remote_surface_evas/watcher_image.cc
index 054306f..9193593 100644
--- a/screen_connector_remote_surface_evas/watcher_image.cc
+++ b/screen_connector_remote_surface_evas/watcher_image.cc
@@ -28,14 +28,15 @@ WatcherImage::WatcherImage(Evas_Object* raw, const std::string& instId, int pid,
WatcherImage::~WatcherImage() {
}
-void WatcherImage::UpdateTbm(const WlBuffer& tbm) {
+void WatcherImage::UpdateTbm(std::shared_ptr<WlBuffer> tbm) {
int width;
int height;
tbm_surface_h tbmSurface;
Evas_Native_Surface ns;
+ prev_buf_ = std::move(tbm);
/* get tbm surface from buffer */
- tbmSurface = (tbm_surface_h)wl_buffer_get_user_data(tbm.GetRaw());
+ tbmSurface = (tbm_surface_h)wl_buffer_get_user_data(prev_buf_->GetRaw());
width = tbm_surface_get_width(tbmSurface);
height = tbm_surface_get_height(tbmSurface);
@@ -50,9 +51,10 @@ void WatcherImage::UpdateTbm(const WlBuffer& tbm) {
evas_object_image_pixels_dirty_set(GetRaw(), EINA_TRUE);
}
-void WatcherImage::ClearTbm(const WlBuffer& tbm) {
+void WatcherImage::ClearTbm() {
/* set null to previous object for the tbm type */
evas_object_image_native_surface_set(GetRaw(), NULL);
+ prev_buf_.reset();
}
void WatcherImage::UpdateFile(int fd, uint32_t size) {
diff --git a/screen_connector_remote_surface_evas/watcher_image_internal.h b/screen_connector_remote_surface_evas/watcher_image_internal.h
index 4acc9d0..31fb4f3 100644
--- a/screen_connector_remote_surface_evas/watcher_image_internal.h
+++ b/screen_connector_remote_surface_evas/watcher_image_internal.h
@@ -19,6 +19,7 @@
#include <sys/mman.h>
+#include <memory>
#include <string>
#include "screen_connector_remote_surface_evas/evas_object.h"
@@ -30,9 +31,12 @@ class WatcherImage : public EvasObject {
WatcherImage(Evas_Object* raw, const std::string& instId, int pid, void* tag);
virtual ~WatcherImage();
- void UpdateTbm(const WlBuffer& tbm);
- void ClearTbm(const WlBuffer& tbm);
+ void UpdateTbm(std::shared_ptr<WlBuffer> tbm);
+ void ClearTbm();
void UpdateFile(int fd, uint32_t size);
+
+ private:
+ std::shared_ptr<WlBuffer> prev_buf_;
};
} // namespace screen_connector