}
static gboolean
-__mmplayer_get_property_value_for_rotation(mm_player_t* player, int rotation_angle, int *value)
+__mmplayer_get_property_value_for_rotation(mm_player_t* player, int display_angle, int orientation, int *value)
{
- int pro_value = 0; // in the case of expection, default will be returned.
- int dest_angle = rotation_angle;
- int rotation_type = -1;
+ int required_angle = 0; /* Angle required for straight view */
+ int rotation_angle = 0;
MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE);
MMPLAYER_RETURN_VAL_IF_FAIL(value, FALSE);
- MMPLAYER_RETURN_VAL_IF_FAIL(rotation_angle >= 0, FALSE);
+ /* Counter clockwise */
+ switch (orientation) {
+ case 0:
+ required_angle = 0;
+ break;
+ case 90:
+ required_angle = 270;
+ break;
+ case 180:
+ required_angle = 180;
+ break;
+ case 270:
+ required_angle = 90;
+ break;
+ }
+
+ rotation_angle = display_angle + required_angle;
if (rotation_angle >= 360)
- dest_angle = rotation_angle - 360;
+ rotation_angle -= 360;
/* chech if supported or not */
- if (dest_angle % 90) {
+ if (rotation_angle % 90) {
LOGD("not supported rotation angle = %d", rotation_angle);
return FALSE;
}
- /*
- * tizenwlsink (A)
- * custom_convert - none (B)
- * videoflip - none (C)
- */
- if (player->set_mode.video_zc) {
- if (player->pipeline->videobin[MMPLAYER_V_CONV].gst) // B
- rotation_type = ROTATION_USING_CUSTOM;
- else // A
- rotation_type = ROTATION_USING_SINK;
- } else {
- int surface_type = 0;
- rotation_type = ROTATION_USING_FLIP;
-
- mm_attrs_get_int_by_name(player->attrs, "display_surface_type", &surface_type);
- LOGD("check display surface type attribute: %d", surface_type);
-
- if (surface_type == MM_DISPLAY_SURFACE_OVERLAY)
- rotation_type = ROTATION_USING_SINK;
- else
- rotation_type = ROTATION_USING_FLIP; //C
-
- LOGD("using %d type for rotation", rotation_type);
- }
-
- /* get property value for setting */
- switch (rotation_type) {
- case ROTATION_USING_SINK: // tizenwlsink
- {
- switch (dest_angle) {
- case 0:
- break;
- case 90:
- pro_value = 3; // clockwise 90
- break;
- case 180:
- pro_value = 2;
- break;
- case 270:
- pro_value = 1; // counter-clockwise 90
- break;
- }
- }
+ switch (rotation_angle) {
+ case 0:
+ *value = MM_DISPLAY_ROTATION_NONE;
break;
- case ROTATION_USING_CUSTOM:
- {
- gchar *ename = NULL;
- ename = GST_OBJECT_NAME(gst_element_get_factory(player->pipeline->videobin[MMPLAYER_V_CONV].gst));
-
- if (g_strrstr(ename, "fimcconvert")) {
- switch (dest_angle) {
- case 0:
- break;
- case 90:
- pro_value = 90; // clockwise 90
- break;
- case 180:
- pro_value = 180;
- break;
- case 270:
- pro_value = 270; // counter-clockwise 90
- break;
- }
- }
- }
+ case 90:
+ *value = MM_DISPLAY_ROTATION_90;
break;
- case ROTATION_USING_FLIP: // videoflip
- {
- switch (dest_angle) {
- case 0:
- break;
- case 90:
- pro_value = 1; // clockwise 90
- break;
- case 180:
- pro_value = 2;
- break;
- case 270:
- pro_value = 3; // counter-clockwise 90
- break;
- }
- }
+ case 180:
+ *value = MM_DISPLAY_ROTATION_180;
+ break;
+ case 270:
+ *value = MM_DISPLAY_ROTATION_270;
break;
}
- LOGD("setting rotation property value : %d, used rotation type : %d", pro_value, rotation_type);
-
- *value = pro_value;
+ LOGD("setting rotation property value : %d", value);
return TRUE;
}
}
int
-__mmplayer_get_video_angle(mm_player_t* player, int *user_angle, int *org_angle)
+__mmplayer_get_video_angle(mm_player_t* player, int *display_angle, int *orientation)
{
- int user_angle_type = 0;
+ int display_rotation = 0;
gchar *org_orient = NULL;
MMHandleType attrs = MMPLAYER_GET_ATTRS(player);
return MM_ERROR_PLAYER_INTERNAL;
}
- if (user_angle) {
+ if (display_angle) {
/* update user roation */
- mm_attrs_get_int_by_name(attrs, "display_rotation", &user_angle_type);
+ mm_attrs_get_int_by_name(attrs, "display_rotation", &display_rotation);
- /* get angle with user type */
- switch (user_angle_type) {
+ /* Counter clockwise */
+ switch (display_rotation) {
case MM_DISPLAY_ROTATION_NONE:
- *user_angle = 0;
+ *display_angle = 0;
break;
- case MM_DISPLAY_ROTATION_90: /* counter-clockwise 90 */
- *user_angle = 270;
+ case MM_DISPLAY_ROTATION_90:
+ *display_angle = 90;
break;
case MM_DISPLAY_ROTATION_180:
- *user_angle = 180;
+ *display_angle = 180;
break;
- case MM_DISPLAY_ROTATION_270: /* clockwise 90 */
- *user_angle = 90;
+ case MM_DISPLAY_ROTATION_270:
+ *display_angle = 270;
break;
default:
- LOGW("wrong angle type : %d", user_angle_type);
+ LOGW("wrong angle type : %d", display_rotation);
break;
}
- LOGD("check user angle: %d", *user_angle);
+ LOGD("check user angle: %d", *display_angle);
}
- if (org_angle) {
- /* get original orientation */
+ if (orientation) {
+ /* Counter clockwise */
mm_attrs_get_string_by_name(attrs, "content_video_orientation", &org_orient);
if (org_orient) {
if (!strcmp(org_orient, "rotate-90"))
- *org_angle = 90;
+ *orientation = 90;
else if (!strcmp(org_orient, "rotate-180"))
- *org_angle = 180;
+ *orientation = 180;
else if (!strcmp(org_orient, "rotate-270"))
- *org_angle = 270;
+ *orientation = 270;
else
LOGD("original rotation is %s", org_orient);
} else {
LOGD("content_video_orientation get fail");
}
- LOGD("check orientation: %d", *org_angle);
+ LOGD("check orientation: %d", *orientation);
}
return MM_ERROR_NONE;
__mmplayer_video_param_set_display_rotation(mm_player_t* player)
{
int rotation_value = 0;
- int org_angle = 0; // current supported angle values are 0, 90, 180, 270
- int user_angle = 0;
+ int orientations = 0; // current supported angle values are 0, 90, 180, 270
+ int display_angle = 0;
MMPLAYER_FENTER();
/* check video sinkbin is created */
if (MM_ERROR_NONE != __mmplayer_video_param_check_video_sink_bin(player))
return;
- __mmplayer_get_video_angle(player, &user_angle, &org_angle);
+ __mmplayer_get_video_angle(player, &display_angle, &orientations);
/* get rotation value to set */
- __mmplayer_get_property_value_for_rotation(player, org_angle+user_angle, &rotation_value);
+ __mmplayer_get_property_value_for_rotation(player, display_angle, orientations, &rotation_value);
g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "rotate", rotation_value, NULL);
LOGD("set video param : rotate %d", rotation_value);
}