}
static void
+_e_output_capture_oneshot_cb(E_Output *output, tbm_surface_h tsurface, void *user_data)
+{
+ E_Output_Capture *cdata = (E_Output_Capture *)user_data;
+
+ EINA_SAFETY_ON_NULL_RETURN(cdata);
+
+ tbm_surface_internal_unref(cdata->surface);
+
+ cdata->func(output, cdata->surface, cdata->data);
+
+ E_FREE(cdata);
+
+ /* timer is a substitution for vblank during dpms off. so if timer is running,
+ * we don't watch vblank events recursively.
+ */
+ if (!output->stream_capture.timer)
+ _e_output_watch_vblank(output);
+
+// DBG("_e_output_capture_oneshot_cb done");
+}
+
+static void
_e_output_vblank_handler(tdm_output *toutput, unsigned int sequence,
unsigned int tv_sec, unsigned int tv_usec, void *data)
{
E_Output_Capture *cdata = NULL;
Eina_List *l;
Eina_Bool ret = EINA_FALSE;
+ tdm_capture *tcapture = NULL;
EINA_SAFETY_ON_NULL_RETURN(output);
output->stream_capture.data = eina_list_remove(output->stream_capture.data, cdata);
- ret = _e_output_capture(output, cdata->surface, output->stream_capture.auto_rotate);
- if (ret == EINA_FALSE)
- EOERR("capture fail", output);
+ tcapture = _e_output_tdm_capture_create(output, TDM_CAPTURE_CAPABILITY_ONESHOT);
+ if (tcapture)
+ {
+ ret = _e_output_tdm_capture_info_set(output, tcapture, cdata->surface, TDM_CAPTURE_TYPE_ONESHOT, output->stream_capture.auto_rotate);
+ if (ret == EINA_FALSE)
+ {
+ EOERR("capture set info fail", output);
+ tdm_capture_destroy(tcapture);
+ return;
+ }
- tbm_surface_internal_unref(cdata->surface);
+ ret = _e_output_tdm_capture(output, tcapture, cdata->surface, _e_output_capture_oneshot_cb, cdata);
+ if (ret == EINA_FALSE)
+ {
+ EOERR("capture fail", output);
+ tdm_capture_destroy(tcapture);
+ }
+ }
+ else
+ {
+ ret = _e_output_capture(output, cdata->surface, output->stream_capture.auto_rotate);
+ if (ret == EINA_FALSE)
+ EOERR("capture fail", output);
- cdata->func(output, cdata->surface, cdata->data);
+ tbm_surface_internal_unref(cdata->surface);
- E_FREE(cdata);
+ cdata->func(output, cdata->surface, cdata->data);
- /* timer is a substitution for vblank during dpms off. so if timer is running,
- * we don't watch vblank events recursively.
- */
- if (!output->stream_capture.timer)
- _e_output_watch_vblank(output);
+ E_FREE(cdata);
+
+ /* timer is a substitution for vblank during dpms off. so if timer is running,
+ * we don't watch vblank events recursively.
+ */
+ if (!output->stream_capture.timer)
+ _e_output_watch_vblank(output);
+ }
}
static Eina_Bool