Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/camera/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.3.1

* Apply texture api change.

## 0.3.0

* Update camera to 0.9.4.
Expand Down
2 changes: 1 addition & 1 deletion packages/camera/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion packages/camera/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
60 changes: 20 additions & 40 deletions packages/camera/tizen/src/camera_device.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -343,22 +334,9 @@ CameraDevice::CameraDevice(flutter::PluginRegistrar *registrar,
[this](size_t width,
size_t height) -> const FlutterDesktopGpuBuffer * {
std::lock_guard<std::mutex> 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) {
Expand All @@ -370,14 +348,13 @@ CameraDevice::CameraDevice(flutter::PluginRegistrar *registrar,
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<std::mutex> lock(mutex_);
if (current_packet_) {
media_packet_destroy(current_packet_);
current_packet_ = nullptr;
}
}));
texture_id_ =
registrar_->texture_registrar()->RegisterTexture(texture_variant_.get());
Expand All @@ -401,6 +378,14 @@ CameraDevice::CameraDevice(flutter::PluginRegistrar *registrar,

CameraDevice::~CameraDevice() { Dispose(); }

void CameraDevice::ReleaseMediaPacket() {
std::lock_guard<std::mutex> 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,
Expand Down Expand Up @@ -461,11 +446,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(
Expand Down Expand Up @@ -988,17 +968,17 @@ void CameraDevice::Open(
if (!SetCameraMediaPacketPreviewCb([](media_packet_h packet, void *data) {
auto self = static_cast<CameraDevice *>(data);
std::lock_guard<std::mutex> 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_);
})) {
Expand Down
3 changes: 2 additions & 1 deletion packages/camera/tizen/src/camera_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -329,7 +331,6 @@ class CameraDevice {
std::unique_ptr<flutter::TextureVariant> texture_variant_;
std::unique_ptr<FlutterDesktopGpuBuffer> flutter_desktop_gpu_buffer_;
media_packet_h current_packet_{nullptr};
media_packet_h prepared_packet_{nullptr};

std::mutex mutex_;

Expand Down