trace:add vpp output surface dump support
use LIBVA_TRACE_SURFACE=vppout to dump vpp output surface
Signed-off-by: Carl Zhang <carl.zhang@intel.com>
diff --git a/va/va_trace.c b/va/va_trace.c
index 29c9fa9..5790ad5 100644
--- a/va/va_trace.c
+++ b/va/va_trace.c
@@ -846,6 +846,11 @@
va_trace_flag |= VA_TRACE_FLAG_SURFACE_ENCODE;
if (strstr(env_value, "jpeg") || strstr(env_value, "jpg"))
va_trace_flag |= VA_TRACE_FLAG_SURFACE_JPEG;
+ /* now one context only support 1 surface dump file
+ * may add vpp input in future
+ */
+ if (strstr(env_value, "vppout"))
+ va_trace_flag |= VA_TRACE_FLAG_SURFACE_VPPOUT;
if (va_parseConfig("LIBVA_TRACE_SURFACE_GEOMETRY", &env_value[0]) == 0) {
char *p = env_value, *q;
@@ -1440,7 +1445,7 @@
struct va_trace *pva_trace = NULL;
struct trace_context *trace_ctx = NULL;
int tra_ctx_id = 0;
- int encode = 0, decode = 0, jpeg = 0;
+ int encode = 0, decode = 0, jpeg = 0, vpp = 0;
int i;
pva_trace = (struct va_trace *)(((VADisplayContextP)dpy)->vatrace);
@@ -1525,9 +1530,12 @@
encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
+ vpp = (trace_ctx->trace_entrypoint == VAEntrypointVideoProc);
+
if ((encode && (va_trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE)) ||
(decode && (va_trace_flag & VA_TRACE_FLAG_SURFACE_DECODE)) ||
- (jpeg && (va_trace_flag & VA_TRACE_FLAG_SURFACE_JPEG))) {
+ (jpeg && (va_trace_flag & VA_TRACE_FLAG_SURFACE_JPEG)) ||
+ (vpp && (va_trace_flag & VA_TRACE_FLAG_SURFACE_VPPOUT))) {
if (open_tracing_specil_file(pva_trace, trace_ctx, 1) < 0) {
va_errorMessage(dpy, "Open surface fail failed for ctx 0x%08x\n", *context);
@@ -6871,12 +6879,13 @@
int endpic_done
)
{
- int encode, decode, jpeg;
+ int encode, decode, jpeg, vpp;
DPY2TRACECTX(dpy, context, VA_INVALID_ID);
/* avoid to create so many empty files */
encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
+ vpp = (trace_ctx->trace_entrypoint == VAEntrypointVideoProc);
/* trace encode source surface, can do it before HW completes rendering */
if ((encode && (va_trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE)) ||
@@ -6884,7 +6893,8 @@
va_TraceSurface(dpy, context);
/* trace decoded surface, do it after HW completes rendering */
- if (decode && ((va_trace_flag & VA_TRACE_FLAG_SURFACE_DECODE))) {
+ if ((decode && (va_trace_flag & VA_TRACE_FLAG_SURFACE_DECODE)) ||
+ (vpp && (va_trace_flag & VA_TRACE_FLAG_SURFACE_VPPOUT))) {
vaSyncSurface(dpy, trace_ctx->trace_rendertarget);
va_TraceSurface(dpy, context);
}
diff --git a/va/va_trace.h b/va/va_trace.h
index 4e56590..8fa46b5 100644
--- a/va/va_trace.h
+++ b/va/va_trace.h
@@ -37,6 +37,8 @@
#define VA_TRACE_FLAG_SURFACE_DECODE 0x8
#define VA_TRACE_FLAG_SURFACE_ENCODE 0x10
#define VA_TRACE_FLAG_SURFACE_JPEG 0x20
+#define VA_TRACE_FLAG_SURFACE_VPPOUT 0x80
+
#define VA_TRACE_FLAG_SURFACE (VA_TRACE_FLAG_SURFACE_DECODE | \
VA_TRACE_FLAG_SURFACE_ENCODE | \
VA_TRACE_FLAG_SURFACE_JPEG)
@@ -44,6 +46,7 @@
#define VA_TRACE_FLAG_FTRACE_BUFDATA (VA_TRACE_FLAG_FTRACE | \
VA_TRACE_FLAG_BUFDATA)
+
#define VA_TRACE_LOG(trace_func,...) \
if (va_trace_flag & VA_TRACE_FLAG_LOG) { \
trace_func(__VA_ARGS__); \