summaryrefslogtreecommitdiff
path: root/src/mm_evas_renderer.c
diff options
context:
space:
mode:
authorHyunil <hyunil46.park@samsung.com>2018-09-20 09:22:54 +0900
committerHyunil <hyunil46.park@samsung.com>2018-09-20 16:24:42 +0900
commit0afb670106f70d28ec07b98d260d7899ea114760 (patch)
tree8408c882a3fe5090c41884b907ee42290617ed83 /src/mm_evas_renderer.c
parent59bbce9c4664b3506428500083c17be3d9922f9f (diff)
downloadlibmm-evas-renderer-0afb670106f70d28ec07b98d260d7899ea114760.tar.gz
libmm-evas-renderer-0afb670106f70d28ec07b98d260d7899ea114760.tar.bz2
libmm-evas-renderer-0afb670106f70d28ec07b98d260d7899ea114760.zip
Change-Id: I2306434fde08dc2423c833fb19d8f0498aad5694 Signed-off-by: Hyunil <hyunil46.park@samsung.com>
Diffstat (limited to 'src/mm_evas_renderer.c')
-rw-r--r--src/mm_evas_renderer.c118
1 files changed, 115 insertions, 3 deletions
diff --git a/src/mm_evas_renderer.c b/src/mm_evas_renderer.c
index 133e299..f5eacd5 100644
--- a/src/mm_evas_renderer.c
+++ b/src/mm_evas_renderer.c
@@ -109,6 +109,8 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info);
static int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_screen);
static int _mm_evas_renderer_make_flush_buffer(mm_evas_info *evas_info);
static void _mm_evas_renderer_release_flush_buffer(mm_evas_info *evas_info);
+static void _mm_evas_renderer_get_video_angle(mm_evas_info *evas_info, int *rotate_angle, int *orientation);
+static void _mm_evas_renderer_update_rotate_angle(mm_evas_info *evas_info);
static void _mm_evas_renderer_set_callback(mm_evas_info *evas_info);
static void _mm_evas_renderer_unset_callback(mm_evas_info *evas_info);
static void _mm_evas_renderer_set_evas_object_size(mm_evas_info *evas_info);
@@ -885,6 +887,9 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info)
MMEVAS_RETURN_IF_FAIL(evas_info);
MMEVAS_RETURN_IF_FAIL(evas_info->eo); //need to check evas object
+ /* get rotate angle with content orientaion */
+ _mm_evas_renderer_update_rotate_angle(evas_info);
+
result.x = 0;
result.y = 0;
video_width = evas_info->w;
@@ -1180,6 +1185,113 @@ static void _mm_evas_renderer_release_flush_buffer(mm_evas_info *evas_info)
return;
}
+static void _mm_evas_renderer_get_video_angle(mm_evas_info *evas_info, int *rotate_angle, int *orientation)
+{
+ int rotate = 0;
+ media_packet_h packet = NULL;
+ media_packet_rotate_method_e org_orient = 0;
+
+ MMER_FENTER();
+
+ MMEVAS_RETURN_IF_FAIL(evas_info);
+ MMEVAS_RETURN_IF_FAIL(rotate_angle);
+ MMEVAS_RETURN_IF_FAIL(orientation);
+
+ rotate = evas_info->rotate;
+ LOGD("current rotate value: %d", rotate);
+
+ /* Counter clockwise */
+ switch (rotate) {
+ case EVAS_IMAGE_ORIENT_0: //0
+ *rotate_angle = 0;
+ break;
+ case EVAS_IMAGE_ORIENT_90: //1
+ *rotate_angle = 90;
+ break;
+ case EVAS_IMAGE_ORIENT_180: //2
+ *rotate_angle = 180;
+ break;
+ case EVAS_IMAGE_ORIENT_270: //3
+ *rotate_angle = 270;
+ break;
+ default:
+ LOGW("wrong angle type : %d", rotate);
+ break;
+ }
+ LOGD("check display angle: %d", *rotate_angle);
+
+ /* get content orientation */
+ packet = evas_info->pkt_info[evas_info->cur_idx].packet;
+ MMEVAS_RETURN_IF_FAIL(packet);
+
+ media_packet_get_rotate_method(packet, &org_orient);
+ LOGE("get content orientation : %d", org_orient);
+
+ /* Counter clockwise */
+ switch (org_orient) {
+ case MEDIA_PACKET_ROTATE_IDENTITY: //0
+ *orientation = 0;
+ break;
+ case MEDIA_PACKET_ROTATE_90: //1
+ *orientation = 90;
+ break;
+ case MEDIA_PACKET_ROTATE_180: //2
+ *orientation = 180;
+ break;
+ case MEDIA_PACKET_ROTATE_270: //3
+ *orientation = 270;
+ break;
+ default:
+ LOGW("wrong angle type : %d", org_orient);
+ break;
+ }
+ LOGD("check orientation: %d", *orientation);
+
+ return;
+}
+
+static void _mm_evas_renderer_update_rotate_angle(mm_evas_info *evas_info)
+{
+
+ int required_angle = 0; /* Angle required for straight view */
+ int rotate_angle = 0;
+ int orientation = 0;
+
+ MMER_FENTER();
+
+ MMEVAS_RETURN_IF_FAIL(evas_info);
+
+ _mm_evas_renderer_get_video_angle(evas_info, &rotate_angle, &orientation);
+
+ required_angle = 360 - orientation;
+ rotate_angle = (rotate_angle + required_angle) % 360;
+
+ /* chech if supported or not */
+ if (rotate_angle % 90) {
+ LOGD("not supported rotation angle = %d", rotate_angle);
+ return;
+ }
+
+ switch (rotate_angle) {
+ case 0:
+ evas_info->rotate_angle = EVAS_IMAGE_ORIENT_0;
+ break;
+ case 90:
+ evas_info->rotate_angle = EVAS_IMAGE_ORIENT_90;
+ break;
+ case 180:
+ evas_info->rotate_angle = EVAS_IMAGE_ORIENT_180;
+ break;
+ case 270:
+ evas_info->rotate_angle = EVAS_IMAGE_ORIENT_270;
+ break;
+ }
+
+ LOGD("setting rotation angle : %d", evas_info->rotate_angle);
+
+ return;
+}
+
void mm_evas_renderer_write(media_packet_h packet, void *data)
{
MMER_FENTER();
@@ -1390,9 +1502,9 @@ int mm_evas_renderer_set_rotation(MMHandleType handle, int rotate)
return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
}
- if (evas_info->rotate_angle != value) {
+ if (evas_info->rotate != value) {
evas_info->update_needed = TRUE;
- evas_info->rotate_angle = value;
+ evas_info->rotate = value;
}
evas_info->rendering_info_changed = TRUE;
@@ -1411,7 +1523,7 @@ int mm_evas_renderer_get_rotation(MMHandleType handle, int *rotate)
MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
- switch (evas_info->rotate_angle) {
+ switch (evas_info->rotate) {
case EVAS_IMAGE_ORIENT_0:
*rotate = DEGREE_0;
break;