#include "Utils/Callback.h"
#include "Utils/Logger.h"
+#include <Ecore.h>
#include <libexif/exif-content.h>
#include <fstream>
m_Width(0),
m_Height(0),
m_ExifData(nullptr),
- m_Packet(nullptr)
+ m_Packet(nullptr),
+ m_Transform(nullptr),
+ m_Error(IMAGE_UTIL_ERROR_NONE)
{
}
double ratio = getResizeRatio(width, height);
- transformation_h handle = nullptr;
- image_util_transform_create(&handle);
- image_util_transform_set_hardware_acceleration(handle, true);
- image_util_transform_set_resolution(handle, m_Width * ratio, m_Height * ratio);
- int err = image_util_transform_run(handle, m_Packet, makeCallbackWithLastParam(&ImageData::onFinished), this);
+ image_util_transform_create(&m_Transform);
+ image_util_transform_set_hardware_acceleration(m_Transform, true);
+ image_util_transform_set_resolution(m_Transform, m_Width * ratio, m_Height * ratio);
+ int err = image_util_transform_run(m_Transform, m_Packet, makeCallbackWithLastParam(&ImageData::onFinished), this);
if (err != IMAGE_UTIL_ERROR_NONE) {
m_OnResult = nullptr;
ERR("image_util_transform_run() failed.");
}
m_OnResult = std::move(callback);
- transformation_h handle = nullptr;
- image_util_transform_create(&handle);
- image_util_transform_set_hardware_acceleration(handle, true);
- image_util_transform_set_crop_area(handle,
+ image_util_transform_create(&m_Transform);
+ image_util_transform_set_hardware_acceleration(m_Transform, true);
+ image_util_transform_set_crop_area(m_Transform,
(m_Width - width) / 2, (m_Height - height) / 2,
(m_Width + width) / 2, (m_Height + height) / 2);
- int err = image_util_transform_run(handle, m_Packet, makeCallbackWithLastParam(&ImageData::onFinished), this);
+ int err = image_util_transform_run(m_Transform, m_Packet, makeCallbackWithLastParam(&ImageData::onFinished), this);
if (err != IMAGE_UTIL_ERROR_NONE) {
m_OnResult = nullptr;
ERR("image_util_transform_run() failed.");
media_packet_destroy(m_Packet);
m_Packet = nullptr;
}
+ if (m_Transform) {
+ image_util_transform_destroy(m_Transform);
+ m_Transform = nullptr;
+ }
}
void ImageData::onFinished(media_packet_h *dst, int error)
{
- if (error == IMAGE_UTIL_ERROR_NONE) {
+ m_Error = error;
+ if (m_Error == IMAGE_UTIL_ERROR_NONE) {
media_packet_destroy(m_Packet);
m_Packet = *dst;
media_format_get_video_info(fmt, nullptr, (int *)&m_Width, (int *)&m_Height, nullptr, nullptr);
}
- ResultCallback callback = m_OnResult;
- m_OnResult = nullptr;
- callback(error);
+ ecore_main_loop_thread_safe_call_async([](void *data) {
+ ImageData *imageData = (ImageData *)data;
+ image_util_transform_destroy(imageData->m_Transform);
+ imageData->m_Transform = nullptr;
+
+ ResultCallback callback = imageData->m_OnResult;
+ imageData->m_OnResult = nullptr;
+ callback(imageData->m_Error);
+ imageData->m_Error = 0;
+ }, this);
}