From: Junkyeong, Kim Date: Tue, 24 Aug 2021 10:51:19 +0000 (+0900) Subject: e_output: Add e_output_stream_capture_autorotate API X-Git-Tag: submit/tizen/20210825.052725~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=417bc3ebdaf3b496aed795d44b254859613b25c3;p=platform%2Fupstream%2Fenlightenment.git e_output: Add e_output_stream_capture_autorotate API To support stream capture autorotation, add new api. If set auto_rotation, stream capture makes user base screen image capture. Change-Id: I4a6df8998464d200ecd7982fac23b7df5235be25 Signed-off-by: Junkyeong, Kim --- diff --git a/src/bin/e_output.c b/src/bin/e_output.c index ac94330b8c..a0f0e1ee3a 100644 --- a/src/bin/e_output.c +++ b/src/bin/e_output.c @@ -1316,6 +1316,9 @@ _e_output_tdm_capture_info_set(E_Output *output, tdm_capture *tcapture, tbm_surf return EINA_FALSE; } + if (auto_rotate && type == TDM_CAPTURE_TYPE_STREAM) + output->stream_capture.current_angle = transform; + return EINA_TRUE; } @@ -1620,7 +1623,7 @@ _e_output_vblank_handler(tdm_output *toutput, unsigned int sequence, output->stream_capture.data = eina_list_remove(output->stream_capture.data, cdata); - ret = _e_output_capture(output, cdata->surface, EINA_FALSE); + ret = _e_output_capture(output, cdata->surface, output->stream_capture.auto_rotate); if (ret == EINA_FALSE) EOERR("capture fail", output); @@ -3794,6 +3797,7 @@ e_output_stream_capture_queue(E_Output *output, tbm_surface_h tsurface, E_Output Eina_Bool ret = EINA_FALSE; tdm_capture *tcapture = NULL; tdm_error error = TDM_ERROR_NONE; + int transform = 0; if (output->stream_capture.possible_tdm_capture) { @@ -3802,7 +3806,7 @@ e_output_stream_capture_queue(E_Output *output, tbm_surface_h tsurface, E_Output tcapture = _e_output_tdm_capture_create(output, TDM_CAPTURE_CAPABILITY_STREAM); EINA_SAFETY_ON_NULL_RETURN_VAL(tcapture, EINA_FALSE); - ret = _e_output_tdm_capture_info_set(output, tcapture, tsurface, TDM_CAPTURE_TYPE_STREAM, EINA_FALSE); + ret = _e_output_tdm_capture_info_set(output, tcapture, tsurface, TDM_CAPTURE_TYPE_STREAM, output->stream_capture.auto_rotate); EINA_SAFETY_ON_FALSE_GOTO(ret == EINA_TRUE, fail); error = tdm_capture_set_done_handler(tcapture, @@ -3816,6 +3820,12 @@ e_output_stream_capture_queue(E_Output *output, tbm_surface_h tsurface, E_Output else { tcapture = output->stream_capture.tcapture; + _e_output_capture_transform_check(output, EINA_FALSE, &transform); + if (transform != output->stream_capture.current_angle) + { + ret = _e_output_tdm_capture_info_set(output, tcapture, tsurface, TDM_CAPTURE_TYPE_STREAM, output->stream_capture.auto_rotate); + EINA_SAFETY_ON_FALSE_GOTO(ret == EINA_TRUE, fail); + } } ret = _e_output_tdm_stream_capture(output, tcapture, tsurface, func, data); @@ -3914,6 +3924,7 @@ e_output_stream_capture_stop(E_Output *output) if (!output->stream_capture.start) return; output->stream_capture.start = EINA_FALSE; + output->stream_capture.auto_rotate = EINA_FALSE; _e_output_stream_capture_mask_image_deactivate(output); @@ -3955,6 +3966,12 @@ e_output_stream_capture_stop(E_Output *output) } } +EINTERN void +e_output_stream_capture_autorotate(E_Output *output, Eina_Bool auto_rotate) +{ + output->stream_capture.auto_rotate = auto_rotate; +} + EINTERN Eina_Bool e_output_external_mode_change(E_Output *output, E_Output_Mode *mode) { diff --git a/src/bin/e_output.h b/src/bin/e_output.h index 706bcefdee..326a75a782 100644 --- a/src/bin/e_output.h +++ b/src/bin/e_output.h @@ -132,6 +132,8 @@ struct _E_Output Eina_Bool possible_tdm_capture; Ecore_Timer *timer; Eina_Bool wait_vblank; + Eina_Bool auto_rotate; + int current_angle; } stream_capture; /* output hwc */