e_output: Add e_output_stream_capture_autorotate API 11/263011/3
authorJunkyeong, Kim <jk0430.kim@samsung.com>
Tue, 24 Aug 2021 10:51:19 +0000 (19:51 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Wed, 25 Aug 2021 03:03:36 +0000 (03:03 +0000)
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 <jk0430.kim@samsung.com>
src/bin/e_output.c
src/bin/e_output.h

index ac94330b8ca3b5a4038f8b00059a67679367231b..a0f0e1ee3a1846bcc502cf45600da2fd398e0a02 100644 (file)
@@ -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)
 {
index 706bcefdeea57d582ea37670fbc52daf16821ee0..326a75a7824977f2f2dbcb38361a0c1f7c358ea5 100644 (file)
@@ -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 */