#define _TDM_BACKEND_H_
#include <tbm_surface.h>
+#include <tbm_surface_queue.h>
#include "tdm_types.h"
tdm_debug_dump |= TDM_DUMP_FLAG_PP;
} else if (!strncmp(arg, "capture", 7)) {
tdm_debug_dump |= TDM_DUMP_FLAG_CAPTURE;
+ } else if (!strncmp(arg, "window", 6)) {
+ tdm_debug_dump |= TDM_DUMP_FLAG_WINDOW;
} else
goto done;
}
ret = func_hwc_window->hwc_window_set_zpos(private_hwc_window->hwc_window_backend, zpos);
+ if (ret == TDM_ERROR_NONE)
+ private_hwc_window->zpos = zpos;
_pthread_mutex_unlock(&private_display->lock);
return ret;
}
+static void
+_tdm_window_dump_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
+{
+ tdm_private_hwc_window *private_window = (tdm_private_hwc_window *)hwc_window;
+ tdm_private_output *private_output = private_window->private_output;
+ unsigned int pipe;
+ uint32_t zpos;
+ char fname[PATH_MAX];
+
+ pipe = private_output->pipe;
+ zpos = private_window->zpos;
+
+ snprintf(fname, sizeof(fname), "tdm_%d_win_%d", pipe, zpos);
+
+ tbm_surface_internal_dump_buffer(buffer, fname);
+ TDM_DBG("%s dump excute", fname);
+
+ return;
+}
+
EXTERN tdm_error
tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
{
_pthread_mutex_lock(&private_display->lock);
+ if (tdm_debug_dump & TDM_DUMP_FLAG_WINDOW) {
+ char str[TDM_PATH_LEN];
+ static int i;
+ snprintf(str, TDM_PATH_LEN, "window_%d_%d_%03d",
+ private_output->index, private_hwc_window->zpos, i++);
+ tdm_helper_dump_buffer_str(buffer, tdm_debug_dump_dir, str);
+ }
func_hwc_window = &private_display->func_hwc_window;
return TDM_ERROR_NOT_IMPLEMENTED;
}
+ /* dump buffer */
+ if (tdm_dump_enable)
+ _tdm_window_dump_buffer(hwc_window, buffer);
+
ret = func_hwc_window->hwc_window_set_buffer(private_hwc_window->hwc_window_backend, buffer);
_pthread_mutex_unlock(&private_display->lock);
return queue;
}
+static void
+_tdm_target_window_dump_buffer(tdm_private_output *private_output, tbm_surface_h buffer)
+{
+ unsigned int pipe;
+ char fname[PATH_MAX];
+
+ pipe = private_output->pipe;
+
+ snprintf(fname, sizeof(fname), "tdm_%d_target_win", pipe);
+
+ tbm_surface_internal_dump_buffer(buffer, fname);
+ TDM_DBG("%s dump excute", fname);
+
+ return;
+}
+
EXTERN tdm_error
tdm_output_set_client_target_buffer(tdm_output *output, tbm_surface_h buffer,
tdm_hwc_region damage)
_pthread_mutex_lock(&private_display->lock);
+ if (tdm_debug_dump & TDM_DUMP_FLAG_WINDOW) {
+ char str[TDM_PATH_LEN];
+ static int i;
+ snprintf(str, TDM_PATH_LEN, "target_window_%d_%03d",
+ private_output->index, i++);
+ tdm_helper_dump_buffer_str(buffer, tdm_debug_dump_dir, str);
+ }
func_output = &private_display->func_output;
return TDM_ERROR_NOT_IMPLEMENTED;
}
+ /* dump buffer */
+ if (tdm_dump_enable)
+ _tdm_target_window_dump_buffer((tdm_private_output *)output, buffer);
+
ret = func_output->output_set_client_target_buffer(private_output->output_backend, buffer, damage);
_pthread_mutex_unlock(&private_display->lock);
TDM_DUMP_FLAG_LAYER = (1 << 0),
TDM_DUMP_FLAG_PP = (1 << 1),
TDM_DUMP_FLAG_CAPTURE = (1 << 2),
+ TDM_DUMP_FLAG_WINDOW = (1 << 3),
};
#define TDM_DUMP_DIR "/tmp"
struct list_head link;
int index;
+ uint32_t zpos;
tdm_private_display *private_display;
tdm_private_output *private_output;