diff options
author | Junghoon Park <jh9216.park@samsung.com> | 2018-02-02 20:26:20 +0900 |
---|---|---|
committer | Junghoon Park <jh9216.park@samsung.com> | 2018-02-05 10:05:51 +0900 |
commit | 96310f7474ce8576d49ad897b8f46ace1c37a167 (patch) | |
tree | cf12107ffcdcb8227cf06035ecf359a7adc908f3 /screen_connector_remote_surface_evas | |
parent | c105150cebfb0b1ed50be13da2a402560e3db68b (diff) | |
download | screen-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')
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 |