diff options
author | Hyunil <hyunil46.park@samsung.com> | 2018-09-20 09:22:54 +0900 |
---|---|---|
committer | Hyunil <hyunil46.park@samsung.com> | 2018-09-20 16:24:42 +0900 |
commit | 0afb670106f70d28ec07b98d260d7899ea114760 (patch) | |
tree | 8408c882a3fe5090c41884b907ee42290617ed83 /src/mm_evas_renderer.c | |
parent | 59bbce9c4664b3506428500083c17be3d9922f9f (diff) | |
download | libmm-evas-renderer-0afb670106f70d28ec07b98d260d7899ea114760.tar.gz libmm-evas-renderer-0afb670106f70d28ec07b98d260d7899ea114760.tar.bz2 libmm-evas-renderer-0afb670106f70d28ec07b98d260d7899ea114760.zip |
Apply video rotate considering orientation of contentsubmit/tizen/20180927.044812submit/tizen/20180921.075623accepted/tizen/unified/20180927.174430
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.c | 118 |
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; |