#include <mm_util_imgp.h>
#include <mm_util_jpeg.h>
-#include <storage.h>
-
/*-----------------------------------------------------------------------
| GLOBAL VARIABLE DEFINITIONS for internal |
-----------------------------------------------------------------------*/
-----------------------------------------------------------------------*/
#define TIME_STRING_MAX_LEN 64
#define __MMCAMCORDER_CAPTURE_WAIT_TIMEOUT 5
+#define __MMCAMCORDER_MAX_WIDTH 8192
+#define __MMCAMCORDER_MAX_HEIGHT 8192
#define FPUTC_CHECK(x_char, x_file) \
{ \
return MM_ERROR_INVALID_ARGUMENT;
}
- _mmcam_dbg_log("Dbus call - obj [%s], iface [%s], method [%s]", object, iface, method);
+ _mmcam_dbg_warn("Dbus call - obj [%s], iface [%s], method [%s]", object, iface, method);
if (is_sync) {
dbus_reply = g_dbus_connection_call_sync(conn,
bus_name, object, iface, method, args, NULL,
- G_DBUS_CALL_FLAGS_NONE, G_DBUS_REPLY_TIMEOUT, NULL, NULL);
+ G_DBUS_CALL_FLAGS_NONE, G_DBUS_TIMEOUT, NULL, NULL);
if (dbus_reply) {
- _mmcam_dbg_log("Method Call '%s.%s' Success", iface, method);
+ _mmcam_dbg_warn("Method Call '%s.%s' Success", iface, method);
*result = dbus_reply;
} else {
_mmcam_dbg_err("dbus method call sync reply failed");
}
} else {
g_dbus_connection_call(conn, bus_name, object, iface, method, args, NULL,
- G_DBUS_CALL_FLAGS_NONE, G_DBUS_REPLY_TIMEOUT, NULL, NULL, NULL);
+ G_DBUS_CALL_FLAGS_NONE, G_DBUS_TIMEOUT, NULL, NULL, NULL);
}
+ _mmcam_dbg_warn("done");
+
return ret;
}
{
int played_idx = 0;
_MMCamcorderGDbusCbInfo *gdbus_info = NULL;
+ mmf_camcorder_t *hcamcorder = NULL;
- _mmcam_dbg_log("entered");
+ _mmcam_dbg_warn("entered");
if (!param || !user_data) {
_mmcam_dbg_err("invalid parameter %p %p", param, user_data);
}
gdbus_info = (_MMCamcorderGDbusCbInfo *)user_data;
+ hcamcorder = (mmf_camcorder_t *)gdbus_info->mm_handle;
g_variant_get(param, "(i)", &played_idx);
g_mutex_lock(&gdbus_info->sync_mutex);
- _mmcam_dbg_log("gdbus_info->param %d, played_idx : %d",
- gdbus_info->param, played_idx);
+ _mmcam_dbg_warn("gdbus_info->param %d, played_idx : %d, handle : %p",
+ gdbus_info->param, played_idx, hcamcorder);
if (gdbus_info->param == played_idx) {
g_dbus_connection_signal_unsubscribe(connection, gdbus_info->subscribe_id);
g_mutex_unlock(&gdbus_info->sync_mutex);
+ _mmcam_dbg_warn("done");
+
return;
}
g_mutex_lock(&gdbus_info->sync_mutex);
- _mmcam_dbg_log("entered");
+ _mmcam_dbg_warn("entered");
if (gdbus_info->is_playing == FALSE) {
_mmcam_dbg_log("callback is already returned");
end_time = g_get_monotonic_time() + (time_out * G_TIME_SPAN_MILLISECOND);
if (g_cond_wait_until(&gdbus_info->sync_cond, &gdbus_info->sync_mutex, end_time)) {
- _mmcam_dbg_log("wait signal received");
+ _mmcam_dbg_warn("wait signal received");
} else {
_mmcam_dbg_err("wait time is expired");
ret = MM_ERROR_CAMCORDER_RESPONSE_TIMEOUT;
g_mutex_unlock(&gdbus_info->sync_mutex);
+ _mmcam_dbg_warn("done");
+
return ret;
}
}
-int _mmcamcorder_get_freespace(const gchar *path, const gchar *root_directory, guint64 *free_space)
+static int __mmcamcorder_storage_supported_cb(int storage_id, storage_type_e type,
+ storage_state_e state, const char *path, void *user_data)
{
- int ret = 0;
- struct statvfs vfs;
+ _MMCamcorderStorageInfo *info = (_MMCamcorderStorageInfo *)user_data;
+
+ if (!info) {
+ _mmcam_dbg_err("NULL info");
+ return FALSE;
+ }
- int is_internal = TRUE;
+ if (type == info->type) {
+ info->id = storage_id;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+int _mmcamcorder_get_storage_info(const gchar *path, const gchar *root_directory, _MMCamcorderStorageInfo *info)
+{
+ int ret = 0;
struct stat stat_path;
struct stat stat_root;
- if (path == NULL || free_space == NULL) {
- _mmcam_dbg_err("invalid parameter %p, %p", path, free_space);
+ if (!path || !root_directory || !info) {
+ _mmcam_dbg_err("invalid parameter %p %p %p", path, root_directory, info);
return -1;
}
- if (root_directory && strlen(root_directory) > 0) {
+ if (strlen(root_directory) > 0) {
if (stat(path, &stat_path) != 0) {
- *free_space = 0;
_mmcam_dbg_err("failed to stat for [%s][errno %d]", path, errno);
return -1;
}
if (stat(root_directory, &stat_root) != 0) {
- *free_space = 0;
_mmcam_dbg_err("failed to stat for [%s][errno %d]", root_directory, errno);
return -1;
}
- if (stat_path.st_dev != stat_root.st_dev)
- is_internal = FALSE;
+ if (stat_path.st_dev == stat_root.st_dev)
+ info->type = STORAGE_TYPE_INTERNAL;
+ else
+ info->type = STORAGE_TYPE_EXTERNAL;
} else {
- _mmcam_dbg_warn("root_directory is NULL, assume that it's internal storage.");
+ info->type = STORAGE_TYPE_INTERNAL;
+ _mmcam_dbg_warn("invalid length of root directory, assume that it's internal storage.");
+ }
+
+ ret = storage_foreach_device_supported((storage_device_supported_cb)__mmcamcorder_storage_supported_cb, info);
+ if (ret != STORAGE_ERROR_NONE) {
+ _mmcam_dbg_err("storage_foreach_device_supported failed 0x%x", ret);
+ return -1;
}
- if (is_internal)
+ _mmcam_dbg_log("storage info - type %d, id %d", info->type, info->id);
+
+ return 0;
+}
+
+
+int _mmcamcorder_get_freespace(storage_type_e type, guint64 *free_space)
+{
+ int ret = 0;
+ struct statvfs vfs;
+
+ if (type == STORAGE_TYPE_INTERNAL)
ret = storage_get_internal_memory_size(&vfs);
else
ret = storage_get_external_memory_size(&vfs);
- if (ret < 0) {
+ if (ret != STORAGE_ERROR_NONE) {
*free_space = 0;
- _mmcam_dbg_err("failed to get memory size [%s]", path);
+ _mmcam_dbg_err("get memory size failed [type %d] 0x%x", type, ret);
return -1;
- } else {
- *free_space = vfs.f_bsize * vfs.f_bavail;
- /*
- _mmcam_dbg_log("vfs.f_bsize [%lu], vfs.f_bavail [%lu]", vfs.f_bsize, vfs.f_bavail);
- _mmcam_dbg_log("memory size %llu [%s]", *free_space, path);
- */
- return 1;
}
+
+ *free_space = vfs.f_bsize * vfs.f_bavail;
+ /*
+ _mmcam_dbg_log("vfs.f_bsize [%lu], vfs.f_bavail [%lu]", vfs.f_bsize, vfs.f_bavail);
+ _mmcam_dbg_log("memory size %llu [%s]", *free_space, path);
+ */
+ return 0;
}
{
int get_value = 0;
int ret = MM_ERROR_NONE;
- GVariant *params = NULL, *result = NULL;
+ GVariant *params = NULL;
+ GVariant *result = NULL;
guint subs_id = 0;
if (!conn || !gdbus_info) {
g_mutex_unlock(&gdbus_info->sync_mutex);
if (sync_play && ret == MM_ERROR_NONE)
- ret = __gdbus_wait_for_cb_return(gdbus_info, G_DBUS_CB_TIMEOUT_MSEC);
+ ret = __gdbus_wait_for_cb_return(gdbus_info, G_DBUS_TIMEOUT);
return ret;
}
+void _mmcamcorder_request_dpm_popup(GDBusConnection *conn, const char *restricted_policy)
+{
+ int ret = MM_ERROR_NONE;
+ gboolean get_value = 0;
+ GVariant *params = NULL;
+ GVariant *result = NULL;
+
+ if (!conn || !restricted_policy) {
+ _mmcam_dbg_err("Invalid parameter %p %p", conn, restricted_policy);
+ return;
+ }
+
+ params = g_variant_new("(s)", restricted_policy);
+ result = g_variant_new("(b)", get_value);
+
+ ret = __gdbus_method_call_sync(conn,
+ "org.tizen.DevicePolicyManager",
+ "/org/tizen/DevicePolicyManager/Syspopup",
+ "org.tizen.DevicePolicyManager.Syspopup",
+ "show", params, &result, TRUE);
+ if (ret != MM_ERROR_NONE) {
+ _mmcam_dbg_err("Dbus Call on Client Error 0x%x", ret);
+ return;
+ }
+
+ if (result) {
+ g_variant_get(result, "(b)", &get_value);
+ _mmcam_dbg_log("request result : %d", get_value);
+ } else {
+ _mmcam_dbg_err("replied result is null");
+ }
+
+ return;
+}
+
+
int _mmcamcorder_get_file_size(const char *filename, guint64 *size)
{
struct stat buf;
/*_mmcam_dbg_log("msg id:%x, msg_cb:%p, msg_data:%p, item:%p", item->id, hcamcorder->msg_cb, hcamcorder->msg_data, item);*/
- _MMCAMCORDER_LOCK((MMHandleType)hcamcorder);
+ _MMCAMCORDER_LOCK(hcamcorder);
/* remove item from msg data */
if (hcamcorder->msg_data) {
_mmcam_dbg_warn("msg_data is NULL but item[%p] will be removed", item);
}
- _MMCAMCORDER_UNLOCK((MMHandleType)hcamcorder);
+ _MMCAMCORDER_UNLOCK(hcamcorder);
_MMCAMCORDER_LOCK_MESSAGE_CALLBACK(hcamcorder);
} else if (item->id == MM_MESSAGE_CAMCORDER_VIDEO_CAPTURED || item->id == MM_MESSAGE_CAMCORDER_AUDIO_CAPTURED) {
MMCamRecordingReport *report = (MMCamRecordingReport *)item->param.data;
if (report) {
- if (report->recording_filename)
- SAFE_G_FREE(report->recording_filename);
-
- SAFE_G_FREE(report);
+ SAFE_G_FREE(report->recording_filename);
+ g_free(report);
+ report = NULL;
item->param.data = NULL;
}
}
return FALSE;
}
+ /* buffer overflow prevention check */
+ if (width > __MMCAMCORDER_MAX_WIDTH || height > __MMCAMCORDER_MAX_HEIGHT) {
+ _mmcam_dbg_err("too large size %d x %d", width, height);
+ return FALSE;
+ }
+
dst_size = (width * height * 3) >> 1;
_mmcam_dbg_log("NV12 -> I420 : %dx%d, dst size %d", width, height, dst_size);
return TRUE;
}
+
+
+void _mmcamcorder_emit_dbus_signal(GDBusConnection *conn, const char *object_name,
+ const char *interface_name, const char *signal_name, int value)
+{
+ if (!conn || !object_name || !interface_name || !signal_name) {
+ _mmcam_dbg_err("NULL pointer %p %p %p %p",
+ conn, object_name, interface_name, signal_name);
+ return;
+ }
+
+ if (!g_dbus_connection_emit_signal(conn, NULL,
+ object_name, interface_name, signal_name,
+ g_variant_new("(i)", value), NULL)) {
+ _mmcam_dbg_warn("failed to emit signal");
+ } else {
+ _mmcam_dbg_log("emit signal done - value 0x%.8x", value);
+ g_dbus_connection_flush(conn, NULL, NULL, NULL);
+ _mmcam_dbg_log("signal flush done");
+ }
+
+ return;
+}
+
+
+int _mmcamcorder_get_audiosrc_blocksize(int samplerate, int format, int channel, int interval, int *blocksize)
+{
+ int depth = 8;
+
+ if (!blocksize) {
+ _mmcam_dbg_err("NULL ptr");
+ return FALSE;
+ }
+
+ if (samplerate == 0 || channel == 0 || interval == 0) {
+ _mmcam_dbg_err("invalid param %d %d %d", samplerate, channel, interval);
+ return FALSE;
+ }
+
+ if (format == MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE)
+ depth = 16;
+
+ *blocksize = samplerate * depth * channel * interval / 8000;
+
+ return TRUE;
+}