#define MMER_FLEAVE();
#endif
-#define MM_CHECK_NULL(x_var) \
- if (!x_var) { \
- LOGE("[%s] is NULL\n", #x_var); \
- return MM_ERROR_EVASRENDER_INVALID_ARGUMENT; \
- }
+#define MMEVAS_RETURN_IF_FAIL(expr) \
+ do { \
+ if (!(expr)) { \
+ LOGW("faild [%s]", #expr); \
+ return; \
+ } \
+ } while (0)
+
+#define MMEVAS_RETURN_VAL_IF_FAIL(expr, var) \
+ do { \
+ if (!(expr)) { \
+ LOGW("faild [%s]", #expr); \
+ return (var); \
+ } \
+ } while (0)
#define SET_EVAS_OBJECT_EVENT_CALLBACK(x_evas_image_object, x_usr_data) \
do { \
return;
}
- LOGD("evas_info : %p, type : %d, evas_info->eo : %p", evas_info, info, evas_info->eo);
+ LOGD("evas_info : %p, info type : %d, evas_info->eo : %p", evas_info, info, evas_info->eo);
if (info != UPDATE_TBM_SURF && info != UPDATE_VISIBILITY && info != UPDATE_FLUSH_BUFFER) {
LOGW("invalid info type : %d", info);
}
if (info == UPDATE_FLUSH_BUFFER) {
- if (_flush_packets(evas_info) != MM_ERROR_NONE) {
+ if (_flush_packets(evas_info) != MM_ERROR_NONE)
LOGE("flushing packets is failed");
- }
g_mutex_unlock(&evas_info->mp_lock);
return;
}
MMER_FENTER();
mm_evas_info *ptr = (mm_evas_info *)*evas_info;
- MM_CHECK_NULL(ptr);
+ MMEVAS_RETURN_VAL_IF_FAIL(ptr, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
int ret = MM_ERROR_NONE;
LOGD("finalize evas_info %p", ptr);
static int _mm_evas_renderer_set_info(mm_evas_info *evas_info, Evas_Object *eo)
{
MMER_FENTER();
- MM_CHECK_NULL(evas_info);
- MM_CHECK_NULL(eo);
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+ MMEVAS_RETURN_VAL_IF_FAIL(eo, MM_ERROR_EVASRENDER_INVALID_ARGUMENT);
+
g_mutex_lock(&evas_info->idx_lock);
LOGD("set evas_info");
static int _mm_evas_renderer_reset(mm_evas_info *evas_info)
{
MMER_FENTER();
- MM_CHECK_NULL(evas_info);
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
g_mutex_lock(&evas_info->mp_lock);
int i;
static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info *result)
{
MMER_FENTER();
-
- if (!evas_info || !evas_info->eo) {
- LOGW("there is no evas_info or evas object");
- return;
- }
- if (!result) {
- LOGW("there is no rect info");
- return;
- }
+ MMEVAS_RETURN_IF_FAIL(evas_info);
+ MMEVAS_RETURN_IF_FAIL(evas_info->eo); //need to check evas object
+ MMEVAS_RETURN_IF_FAIL(result);
result->x = 0;
result->y = 0;
{
MMER_FENTER();
- if (!evas_info || !evas_info->eo) {
- LOGW("there is no evas_info or evas object");
- return MM_ERROR_NONE;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info->eo, MM_ERROR_EVASRENDER_NOT_INITIALIZED); //need to check evas object
Evas_Native_Surface *surf = evas_object_image_native_surface_get(evas_info->eo);
rect_info result = { 0 };
return MM_ERROR_NONE;
}
+
+static int _mm_evas_pipe_write(mm_evas_info *evas_info, update_info info)
+{
+ MMER_FENTER();
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info->epipe, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+
+ int ret = MM_ERROR_NONE;
+
+ g_mutex_lock(&evas_info->write_lock);
+ if (!ecore_pipe_write(evas_info->epipe, evas_info, info)) {
+ LOGW("fail to ecore_pipe_write() for update info type(%d)", info);
+ ret = MM_ERROR_EVASRENDER_INTERNAL;
+ }
+ g_mutex_unlock(&evas_info->write_lock);
+
+ MMER_FLEAVE();
+ return ret;
+}
+
static int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_screen)
{
MMER_FENTER();
- MM_CHECK_NULL(evas_info);
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
int ret = MM_ERROR_NONE;
pid_t pid = getpid();
ret = _mm_evas_renderer_make_flush_buffer(evas_info);
evas_info->keep_screen = keep_screen;
- if (evas_info->epipe) {
- g_mutex_lock(&evas_info->write_lock);
- ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_FLUSH_BUFFER);
- if (!ret) {
- LOGW("fail to ecore_pipe_write() for updating visibility\n");
- ret = MM_ERROR_EVASRENDER_INTERNAL;
- } else {
- ret = MM_ERROR_NONE;
- }
- g_mutex_unlock(&evas_info->write_lock);
- } else {
- LOGW("there is no epipe. we cant update it");
- }
+ ret = _mm_evas_pipe_write(evas_info, UPDATE_FLUSH_BUFFER);
MMER_FLEAVE();
static int _mm_evas_renderer_make_flush_buffer(mm_evas_info *evas_info)
{
MMER_FENTER();
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
if (evas_info->cur_idx == -1) {
/* it is deemed ERROR_NONE, because this API is used only for retrieving buffers */
return MM_ERROR_NONE;
}
media_packet_h packet = evas_info->pkt_info[evas_info->cur_idx].packet;
- MM_CHECK_NULL(packet);
+ MMEVAS_RETURN_VAL_IF_FAIL(packet, MM_ERROR_EVASRENDER_INTERNAL);
flush_info *flush_buffer = NULL;
tbm_surface_h src_tbm_surf = NULL;
static void _mm_evas_renderer_release_flush_buffer(mm_evas_info *evas_info)
{
MMER_FENTER();
+ MMEVAS_RETURN_IF_FAIL(evas_info);
LOGW("release FLUSH BUFFER start");
if (evas_info->flush_buffer->bo)
handle->sent_buffer_cnt++;
LOGD("sent packet %d", handle->sent_buffer_cnt);
- g_mutex_lock(&handle->write_lock);
- ret = ecore_pipe_write(handle->epipe, handle, UPDATE_TBM_SURF);
- if (!ret) {
+ ret = _mm_evas_pipe_write(handle, UPDATE_TBM_SURF);
+ if (ret != MM_ERROR_NONE) {
handle->pkt_info[index].packet = NULL;
handle->pkt_info[index].tbm_surf = NULL;
handle->pkt_info[index].prev = -1;
handle->cur_idx = handle->pkt_info[index].prev;
handle->sent_buffer_cnt--;
LOGW("Failed to ecore_pipe_write() for updating tbm surf\n");
- g_mutex_unlock(&handle->write_lock);
goto ERROR;
}
- g_mutex_unlock(&handle->write_lock);
} else {
LOGW("no tbm_surf");
goto ERROR;
int mm_evas_renderer_create(MMHandleType *handle, Evas_Object *eo)
{
MMER_FENTER();
- MM_CHECK_NULL(handle);
+ MMEVAS_RETURN_VAL_IF_FAIL(handle, MM_ERROR_EVASRENDER_INVALID_ARGUMENT);
+ MMEVAS_RETURN_VAL_IF_FAIL(eo, MM_ERROR_EVASRENDER_INVALID_ARGUMENT);
+
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = NULL;
int mm_evas_renderer_destroy(MMHandleType *handle)
{
MMER_FENTER();
- MM_CHECK_NULL(handle);
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = (mm_evas_info *)*handle;
-
- if (!evas_info) {
- LOGD("skip it. it is not evas surface type.");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
ret = _mm_evas_renderer_destroy(&evas_info);
if (ret != MM_ERROR_NONE) {
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = (mm_evas_info *)handle;
-
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
evas_info->visible = visible;
-
- if (evas_info->epipe) {
- g_mutex_lock(&evas_info->write_lock);
- ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_VISIBILITY);
- if (!ret) {
- LOGW("fail to ecore_pipe_write() for updating visibility\n");
- ret = MM_ERROR_EVASRENDER_INTERNAL;
- } else {
- ret = MM_ERROR_NONE;
- }
- g_mutex_unlock(&evas_info->write_lock);
- } else {
- LOGW("there is no epipe. we cant update it");
- }
+ ret = _mm_evas_pipe_write(evas_info, UPDATE_VISIBILITY);
MMER_FLEAVE();
MMER_FENTER();
mm_evas_info *evas_info = (mm_evas_info *)handle;
-
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
*visible = evas_info->visible;
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = (mm_evas_info *)handle;
guint value;
-
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
switch (rotate) {
case DEGREE_0:
default:
return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
}
+
if (evas_info->rotate_angle != value) {
evas_info->update_needed = TRUE;
evas_info->rotate_angle = value;
}
- /* FIXME: pause state only */
- if (evas_info->epipe) {
- g_mutex_lock(&evas_info->write_lock);
- ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
- if (!ret) {
- LOGW("fail to ecore_pipe_write() for updating visibility\n");
- ret = MM_ERROR_EVASRENDER_INTERNAL;
- } else {
- ret = MM_ERROR_NONE;
- }
- g_mutex_unlock(&evas_info->write_lock);
- }
+ ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
+
MMER_FLEAVE();
return ret;
MMER_FENTER();
mm_evas_info *evas_info = (mm_evas_info *)handle;
-
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
switch (evas_info->rotate_angle) {
case EVAS_IMAGE_ORIENT_0:
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = (mm_evas_info *)handle;
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
if (evas_info->display_geometry_method != mode) {
evas_info->update_needed = TRUE;
evas_info->display_geometry_method = mode;
}
/* ecore_pipe_write is needed, because of setting ratio for letterbox mode */
- /* FIXME: pause state only */
- if (evas_info->epipe) {
- g_mutex_lock(&evas_info->write_lock);
- ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
- if (!ret) {
- LOGW("fail to ecore_pipe_write() for updating visibility\n");
- ret = MM_ERROR_EVASRENDER_INTERNAL;
- } else {
- ret = MM_ERROR_NONE;
- }
- g_mutex_unlock(&evas_info->write_lock);
- }
+ ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
+
MMER_FLEAVE();
return ret;
MMER_FENTER();
mm_evas_info *evas_info = (mm_evas_info *)handle;
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
*mode = evas_info->display_geometry_method;
MMER_FLEAVE();
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = (mm_evas_info *)handle;
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
if (!w || !h) {
LOGE("invalid resolution");
return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
}
/* pipe_write could be needed because ratio can be changed on pause state */
- if (evas_info->epipe) {
- g_mutex_lock(&evas_info->write_lock);
- ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
- if (!ret) {
- LOGW("fail to ecore_pipe_write() for updating visibility\n");
- ret = MM_ERROR_EVASRENDER_INTERNAL;
- } else {
- ret = MM_ERROR_NONE;
- }
- g_mutex_unlock(&evas_info->write_lock);
- }
+ ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
MMER_FLEAVE();
MMER_FENTER();
mm_evas_info *evas_info = (mm_evas_info *)handle;
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) {
LOGE("invalid mode");
return MM_ERROR_EVASRENDER_INVALID_OPERATION;
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = (mm_evas_info *)handle;
guint value;
-
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
switch (flip) {
case FLIP_NONE:
default:
return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
}
+
if (evas_info->flip != value) {
evas_info->update_needed = TRUE;
evas_info->flip = value;
}
- /* FIXME: pause state only */
- if (evas_info->epipe) {
- g_mutex_lock(&evas_info->write_lock);
- ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
- if (!ret) {
- LOGW("fail to ecore_pipe_write() for updating visibility\n");
- ret = MM_ERROR_EVASRENDER_INTERNAL;
- } else {
- ret = MM_ERROR_NONE;
- }
- g_mutex_unlock(&evas_info->write_lock);
- }
+ ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
MMER_FLEAVE();
MMER_FENTER();
mm_evas_info *evas_info = (mm_evas_info *)handle;
-
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or handle is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
switch (evas_info->flip) {
case EVAS_IMAGE_ORIENT_NONE:
int ret = MM_ERROR_NONE;
mm_evas_info *evas_info = (mm_evas_info*) handle;
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or player is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
ret = _mm_evas_renderer_retrieve_all_packets(evas_info, keep_screen);
MMER_FLEAVE();
MMER_FENTER();
mm_evas_info *evas_info = (mm_evas_info*) handle;
+ MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
- if (!evas_info) {
- LOGW("skip it. it is not evas surface type or player is not prepared");
- return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
- }
evas_info->packet_rendered_cb = callback;
evas_info->packet_rendered_cb_user = user_data;