AJA NTV2 SDK
18.0.0.2717
NTV2 SDK 18.0.0.2717
dxmperf.h
Go to the documentation of this file.
1
//------------------------------------------------------------------------------
2
// File: DXMPerf.h
3
//
4
// Desc: Macros for DirectShow performance logging.
5
//
6
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
7
//------------------------------------------------------------------------------
8
9
10
#ifndef _DXMPERF_H_
11
#define _DXMPERF_H_
12
13
#include "
perfstruct.h
"
14
#include "
perflog.h
"
15
16
#ifdef _IA64_
17
extern
"C"
unsigned
__int64 __getReg(
int
whichReg );
18
#pragma intrinsic(__getReg)
19
#endif // _IA64_
20
21
22
inline
ULONGLONG
_RDTSC
(
void
) {
23
#ifdef _X86_
24
LARGE_INTEGER li;
25
__asm {
26
_emit 0x0F
27
_emit 0x31
28
mov li.LowPart,eax
29
mov li.HighPart,edx
30
}
31
return
li.QuadPart;
32
33
#if 0 // This isn't tested yet
34
35
#elif defined (_IA64_)
36
37
#define INL_REGID_APITC 3116
38
return
__getReg( INL_REGID_APITC );
39
40
#endif // 0
41
42
#else // unsupported platform
43
// not implemented on non x86/IA64 platforms
44
return
0;
45
#endif // _X86_/_IA64_
46
}
47
48
#define DXMPERF_VIDEOREND 0x00000001
49
#define DXMPERF_AUDIOGLITCH 0x00000002
50
//#define GETTIME_BIT 0x00000001
51
//#define AUDIOREND_BIT 0x00000004
52
//#define FRAMEDROP_BIT 0x00000008
53
#define AUDIOBREAK_BIT 0x00000010
54
#define DXMPERF_AUDIORECV 0x00000020
55
#define DXMPERF_AUDIOSLAVE 0x00000040
56
#define DXMPERF_AUDIOBREAK 0x00000080
57
58
#define PERFLOG_CTOR( name, iface )
59
#define PERFLOG_DTOR( name, iface )
60
#define PERFLOG_DELIVER( name, source, dest, sample, pmt )
61
#define PERFLOG_RECEIVE( name, source, dest, sample, pmt )
62
#define PERFLOG_RUN( name, iface, time, oldstate )
63
#define PERFLOG_PAUSE( name, iface, oldstate )
64
#define PERFLOG_STOP( name, iface, oldstate )
65
#define PERFLOG_JOINGRAPH( name, iface, graph )
66
#define PERFLOG_GETBUFFER( allocator, sample )
67
#define PERFLOG_RELBUFFER( allocator, sample )
68
#define PERFLOG_CONNECT( connector, connectee, status, pmt )
69
#define PERFLOG_RXCONNECT( connector, connectee, status, pmt )
70
#define PERFLOG_DISCONNECT( disconnector, disconnectee, status )
71
72
#define PERFLOG_GETTIME( clock, time )
/*{ \
73
PERFINFO_WMI_GETTIME perfData; \
74
if (NULL != g_pTraceEvent) { \
75
memset( &perfData, 0, sizeof( perfData ) ); \
76
perfData.header.Size = sizeof( perfData ); \
77
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
78
perfData.header.Guid = GUID_GETTIME; \
79
perfData.data.cycleCounter = _RDTSC(); \
80
perfData.data.dshowClock = (ULONGLONG) (time); \
81
if (g_perfMasks[GETTIME_INDEX] & GETTIME_BIT) \
82
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
83
} \
84
}*/
85
86
#define PERFLOG_AUDIOREND( clocktime, sampletime, psample, bytetime, cbytes )
/*{ \
87
PERFINFO_WMI_AVREND perfData; \
88
if (NULL != g_pTraceEvent) { \
89
memset( &perfData, 0, sizeof( perfData ) ); \
90
perfData.header.Size = sizeof( perfData ); \
91
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
92
perfData.header.Guid = GUID_AUDIOREND; \
93
perfData.data.cycleCounter = _RDTSC(); \
94
perfData.data.dshowClock = (clocktime); \
95
perfData.data.sampleTime = (sampletime); \
96
if (g_perfMasks[AUDIOREND_INDEX] & AUDIOREND_BIT) \
97
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
98
} \
99
}*/
100
101
#define PERFLOG_AUDIORECV(StreamTime,SampleStart,SampleStop,Discontinuity,Duration) \
102
if (PerflogEnableFlags & DXMPERF_AUDIORECV) { \
103
PERFINFO_WMI_AUDIORECV perfData; \
104
memset( &perfData, 0, sizeof( perfData ) ); \
105
perfData.header.Size = sizeof( perfData ); \
106
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
107
perfData.header.Guid = GUID_AUDIORECV; \
108
perfData.data.streamTime = StreamTime; \
109
perfData.data.sampleStart = SampleStart; \
110
perfData.data.sampleStop = SampleStop; \
111
perfData.data.discontinuity = Discontinuity; \
112
perfData.data.hwduration = Duration; \
113
PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
114
}
115
116
#define PERFLOG_AUDIOSLAVE(MasterClock,SlaveClock,ErrorAccum,LastHighErrorSeen,LastLowErrorSeen) \
117
if (PerflogEnableFlags & DXMPERF_AUDIOSLAVE) { \
118
PERFINFO_WMI_AUDIOSLAVE perfData; \
119
memset( &perfData, 0, sizeof( perfData ) ); \
120
perfData.header.Size = sizeof( perfData ); \
121
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
122
perfData.header.Guid = GUID_AUDIOSLAVE; \
123
perfData.data.masterClock = MasterClock; \
124
perfData.data.slaveClock = SlaveClock; \
125
perfData.data.errorAccum = ErrorAccum; \
126
perfData.data.lastHighErrorSeen = LastHighErrorSeen;\
127
perfData.data.lastLowErrorSeen = LastLowErrorSeen; \
128
PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
129
}
130
131
#define PERFLOG_AUDIOADDBREAK(IterNextWrite,OffsetNextWrite,IterWrite,OffsetWrite) \
132
if (PerflogEnableFlags & DXMPERF_AUDIOBREAK) { \
133
PERFINFO_WMI_AUDIOADDBREAK perfData; \
134
memset( &perfData, 0, sizeof( perfData ) ); \
135
perfData.header.Size = sizeof( perfData ); \
136
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
137
perfData.header.Guid = GUID_AUDIOADDBREAK; \
138
perfData.data.iterNextWrite = IterNextWrite; \
139
perfData.data.offsetNextWrite = OffsetNextWrite; \
140
perfData.data.iterWrite = IterWrite; \
141
perfData.data.offsetWrite = OffsetWrite; \
142
PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
143
}
144
145
#define PERFLOG_VIDEOREND( sampletime, clocktime, psample ) \
146
if (PerflogEnableFlags & DXMPERF_VIDEOREND) { \
147
PERFINFO_WMI_AVREND perfData; \
148
memset( &perfData, 0, sizeof( perfData ) ); \
149
perfData.header.Size = sizeof( perfData ); \
150
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
151
perfData.header.Guid = GUID_VIDEOREND; \
152
perfData.data.cycleCounter = _RDTSC(); \
153
perfData.data.dshowClock = (clocktime); \
154
perfData.data.sampleTime = (sampletime); \
155
PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
156
}
157
158
#define PERFLOG_AUDIOGLITCH( instance, glitchtype, currenttime, previoustime ) \
159
if (PerflogEnableFlags & DXMPERF_AUDIOGLITCH) { \
160
PERFINFO_WMI_AUDIOGLITCH perfData; \
161
memset( &perfData, 0, sizeof( perfData ) ); \
162
perfData.header.Size = sizeof( perfData ); \
163
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
164
perfData.header.Guid = GUID_DSOUNDGLITCH; \
165
perfData.data.cycleCounter = _RDTSC(); \
166
perfData.data.glitchType = (glitchtype); \
167
perfData.data.sampleTime = (currenttime); \
168
perfData.data.previousTime = (previoustime); \
169
perfData.data.instanceId = (instance); \
170
PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
171
}
172
173
#define PERFLOG_FRAMEDROP( sampletime, clocktime, psample, renderer )
/*{ \
174
PERFINFO_WMI_FRAMEDROP perfData; \
175
if (NULL != g_pTraceEvent) { \
176
memset( &perfData, 0, sizeof( perfData ) ); \
177
perfData.header.Size = sizeof( perfData ); \
178
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
179
perfData.header.Guid = GUID_FRAMEDROP; \
180
perfData.data.cycleCounter = _RDTSC(); \
181
perfData.data.dshowClock = (clocktime); \
182
perfData.data.frameTime = (sampletime); \
183
if (g_perfMasks[FRAMEDROP_INDEX] & FRAMEDROP_BIT) \
184
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
185
} \
186
}*/
187
188
/*
189
#define PERFLOG_AUDIOBREAK( nextwrite, writepos, msecs ) { \
190
PERFINFO_WMI_AUDIOBREAK perfData; \
191
if (NULL != g_pTraceEvent) { \
192
memset( &perfData, 0, sizeof( perfData ) ); \
193
perfData.header.Size = sizeof( perfData ); \
194
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
195
perfData.header.Guid = GUID_AUDIOBREAK; \
196
perfData.data.cycleCounter = _RDTSC(); \
197
perfData.data.dshowClock = (writepos); \
198
perfData.data.sampleTime = (nextwrite); \
199
perfData.data.sampleDuration = (msecs); \
200
if (g_perfMasks[AUDIOBREAK_INDEX] & AUDIOBREAK_BIT) \
201
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
202
} \
203
}
204
*/
205
206
#define PERFLOG_AUDIOBREAK( nextwrite, writepos, msecs ) \
207
if (PerflogEnableFlags & AUDIOBREAK_BIT) { \
208
PERFINFO_WMI_AUDIOBREAK perfData; \
209
memset( &perfData, 0, sizeof( perfData ) ); \
210
perfData.header.Size = sizeof( perfData ); \
211
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
212
perfData.header.Guid = GUID_AUDIOBREAK; \
213
perfData.data.cycleCounter = _RDTSC(); \
214
perfData.data.dshowClock = (writepos); \
215
perfData.data.sampleTime = (nextwrite); \
216
perfData.data.sampleDuration = (msecs); \
217
PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
218
} \
219
220
221
inline
222
VOID
PERFLOG_STREAMTRACE
(
223
ULONG
Level,
224
ULONG
Id,
225
ULONGLONG DShowClock,
226
ULONGLONG Data1,
227
ULONGLONG Data2,
228
ULONGLONG Data3,
229
ULONGLONG Data4
230
)
231
{
232
if
(Level <=
PerflogModuleLevel
)
233
{
234
PERFINFO_WMI_STREAMTRACE
perfData;
235
memset( &perfData, 0,
sizeof
( perfData ) );
236
perfData.
header
.Size =
sizeof
( perfData );
237
perfData.
header
.Flags = WNODE_FLAG_TRACED_GUID;
238
perfData.
header
.Guid = GUID_STREAMTRACE;
239
perfData.
data
.
dshowClock
= DShowClock;
240
perfData.
data
.
id
= Id;
241
perfData.
data
.
data
[0] = Data1;
242
perfData.
data
.
data
[1] = Data2;
243
perfData.
data
.
data
[2] = Data3;
244
perfData.
data
.
data
[3] = Data4;
245
PerflogTraceEvent
((PEVENT_TRACE_HEADER) &perfData);
246
}
247
}
248
249
250
#endif // _DXMPERF_H_
_RDTSC
ULONGLONG _RDTSC(void)
Definition:
dxmperf.h:22
perfstruct.h
_PERFINFO_WMI_STREAMTRACE::data
PERFINFO_DSHOW_STREAMTRACE data
Definition:
perfstruct.h:152
_PERFINFO_DSHOW_STREAMTRACE::data
ULONGLONG data[4]
Definition:
perfstruct.h:147
_PERFINFO_DSHOW_STREAMTRACE::dshowClock
ULONGLONG dshowClock
Definition:
perfstruct.h:146
_PERFINFO_WMI_STREAMTRACE
Definition:
perfstruct.h:150
PERFLOG_STREAMTRACE
VOID PERFLOG_STREAMTRACE(ULONG Level, ULONG Id, ULONGLONG DShowClock, ULONGLONG Data1, ULONGLONG Data2, ULONGLONG Data3, ULONGLONG Data4)
Definition:
dxmperf.h:184
_PERFINFO_DSHOW_STREAMTRACE::id
ULONG id
Definition:
perfstruct.h:144
PerflogTraceEvent
VOID PerflogTraceEvent(__in PEVENT_TRACE_HEADER Event)
Definition:
perflog.cpp:323
ULONG
ULONG(__stdcall *_RegisterTraceGuids)(__in IN WMIDPREQUEST RequestAddress
_PERFINFO_WMI_STREAMTRACE::header
EVENT_TRACE_HEADER header
Definition:
perfstruct.h:151
PerflogModuleLevel
ULONG PerflogModuleLevel
Definition:
perflog.cpp:107
perflog.h
libajantv2
demos
ntv2vcam
baseclasses
dxmperf.h
Generated on Wed Nov 26 2025 11:13:15 for AJA NTV2 SDK by
1.8.17