From 2e32a45a72fa6b0da0a16876e755982300b69cc9 Mon Sep 17 00:00:00 2001 From: MuHong Byun Date: Sat, 26 Mar 2022 10:35:38 +0900 Subject: [PATCH 1/2] [camera] Apply texture api change Signed-off-by: MuHong Byun --- packages/camera/CHANGELOG.md | 4 ++ packages/camera/README.md | 2 +- packages/camera/pubspec.yaml | 2 +- packages/camera/tizen/src/camera_device.cc | 52 +++++++++------------- packages/camera/tizen/src/camera_device.h | 3 +- 5 files changed, 28 insertions(+), 35 deletions(-) diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index b2f76807a..ecd209860 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.1 + +* Apply texture api change. + ## 0.3.0 * Update camera to 0.9.4. diff --git a/packages/camera/README.md b/packages/camera/README.md index ac494539f..55af812f3 100644 --- a/packages/camera/README.md +++ b/packages/camera/README.md @@ -26,7 +26,7 @@ This package is not an _endorsed_ implementation of `camera`. Therefore, you hav ```yaml dependencies: camera: ^0.9.4 - camera_tizen: ^0.3.0 + camera_tizen: ^0.3.1 ``` Then you can import `camera` in your Dart code: diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index 85b79c161..5ed3f5beb 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_tizen description: Tizen implementation of the camera plugin homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/master/packages/camera -version: 0.3.0 +version: 0.3.1 dependencies: camera_platform_interface: ^2.1.1 diff --git a/packages/camera/tizen/src/camera_device.cc b/packages/camera/tizen/src/camera_device.cc index edd736cc4..a2b5beacb 100644 --- a/packages/camera/tizen/src/camera_device.cc +++ b/packages/camera/tizen/src/camera_device.cc @@ -343,41 +343,26 @@ CameraDevice::CameraDevice(flutter::PluginRegistrar *registrar, [this](size_t width, size_t height) -> const FlutterDesktopGpuBuffer * { std::lock_guard lock(mutex_); - if (prepared_packet_ && !IsValidMediaPacket(prepared_packet_)) { - media_packet_destroy(prepared_packet_); - prepared_packet_ = nullptr; - } - if (current_packet_ && !IsValidMediaPacket(current_packet_)) { - media_packet_destroy(current_packet_); - current_packet_ = nullptr; - } - if (!prepared_packet_ && !current_packet_) { + if (!current_packet_) { return nullptr; } - if (prepared_packet_ && !current_packet_) { - current_packet_ = prepared_packet_; - prepared_packet_ = nullptr; - } - tbm_surface_h surface = nullptr; int ret = media_packet_get_tbm_surface(current_packet_, &surface); if (ret != MEDIA_PACKET_ERROR_NONE) { LOG_ERROR("media_packet_get_tbm_surface failed, error: %d", ret); - media_packet_destroy(current_packet_); current_packet_ = nullptr; return nullptr; } flutter_desktop_gpu_buffer_->buffer = surface; flutter_desktop_gpu_buffer_->width = width; flutter_desktop_gpu_buffer_->height = height; + flutter_desktop_gpu_buffer_->release_callback = + [](void *release_context) { + CameraDevice *cd = (CameraDevice *)release_context; + cd->ReleaseMediaPacket(); + }; + flutter_desktop_gpu_buffer_->release_context = this; return flutter_desktop_gpu_buffer_.get(); - }, - [this](void *buffer) -> void { - std::lock_guard lock(mutex_); - if (current_packet_) { - media_packet_destroy(current_packet_); - current_packet_ = nullptr; - } })); texture_id_ = registrar_->texture_registrar()->RegisterTexture(texture_variant_.get()); @@ -401,6 +386,14 @@ CameraDevice::CameraDevice(flutter::PluginRegistrar *registrar, CameraDevice::~CameraDevice() { Dispose(); } +void CameraDevice::ReleaseMediaPacket() { + std::lock_guard lock(mutex_); + if (current_packet_) { + media_packet_destroy(current_packet_); + current_packet_ = nullptr; + } +} + bool CameraDevice::CreateCamera() { int error = camera_create((camera_device_e)type_, &camera_); RETV_LOG_ERROR_IF(error != CAMERA_ERROR_NONE, false, @@ -461,11 +454,6 @@ void CameraDevice::Dispose() { media_packet_destroy(current_packet_); current_packet_ = nullptr; } - - if (prepared_packet_) { - media_packet_destroy(prepared_packet_); - prepared_packet_ = nullptr; - } } bool CameraDevice::ForeachCameraSupportedCaptureResolutions( @@ -988,17 +976,17 @@ void CameraDevice::Open( if (!SetCameraMediaPacketPreviewCb([](media_packet_h packet, void *data) { auto self = static_cast(data); std::lock_guard lock(self->mutex_); - if (self->prepared_packet_) { - media_packet_destroy(self->prepared_packet_); - self->prepared_packet_ = packet; + if (self->current_packet_) { + media_packet_destroy(self->current_packet_); + self->current_packet_ = packet; return; } if (self->is_preview_paused_) { media_packet_destroy(packet); - self->prepared_packet_ = nullptr; + self->current_packet_ = nullptr; return; } - self->prepared_packet_ = packet; + self->current_packet_ = packet; self->registrar_->texture_registrar()->MarkTextureFrameAvailable( self->texture_id_); })) { diff --git a/packages/camera/tizen/src/camera_device.h b/packages/camera/tizen/src/camera_device.h index aa4168861..7813fe949 100644 --- a/packages/camera/tizen/src/camera_device.h +++ b/packages/camera/tizen/src/camera_device.h @@ -253,6 +253,8 @@ class CameraDevice { void PausePreview() { is_preview_paused_ = true; } void ResumePreview() { is_preview_paused_ = false; } + void ReleaseMediaPacket(); + private: bool CreateCamera(); bool ClearCameraAutoFocusArea(); @@ -329,7 +331,6 @@ class CameraDevice { std::unique_ptr texture_variant_; std::unique_ptr flutter_desktop_gpu_buffer_; media_packet_h current_packet_{nullptr}; - media_packet_h prepared_packet_{nullptr}; std::mutex mutex_; From 86be57b38cd600b23aece610a295a3f7341797f4 Mon Sep 17 00:00:00 2001 From: MuHong Byun Date: Thu, 14 Apr 2022 12:27:07 +0900 Subject: [PATCH 2/2] Apply review comment Signed-off-by: MuHong Byun --- packages/camera/tizen/src/camera_device.cc | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/camera/tizen/src/camera_device.cc b/packages/camera/tizen/src/camera_device.cc index a2b5beacb..a52abc00d 100644 --- a/packages/camera/tizen/src/camera_device.cc +++ b/packages/camera/tizen/src/camera_device.cc @@ -40,15 +40,6 @@ std::string CreateTempFileName(const std::string &prefix, return file_name; } -bool IsValidMediaPacket(media_packet_h media_packet) { - tbm_surface_h surface = nullptr; - int ret = media_packet_get_tbm_surface(media_packet, &surface); - if (ret != MEDIA_PACKET_ERROR_NONE) { - return false; - } - return true; -} - ExifTagOrientation ChooseExifTagOrientatoin(OrientationType device_orientation, bool is_front_lens_facing) { ExifTagOrientation orientation = ExifTagOrientation::kTopLeft; @@ -350,6 +341,7 @@ CameraDevice::CameraDevice(flutter::PluginRegistrar *registrar, int ret = media_packet_get_tbm_surface(current_packet_, &surface); if (ret != MEDIA_PACKET_ERROR_NONE) { LOG_ERROR("media_packet_get_tbm_surface failed, error: %d", ret); + media_packet_destroy(current_packet_); current_packet_ = nullptr; return nullptr; }