Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
250
Src/Plugins/Input/in_dshow/base/dxmperf.h
Normal file
250
Src/Plugins/Input/in_dshow/base/dxmperf.h
Normal file
|
@ -0,0 +1,250 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// File: DXMPerf.h
|
||||
//
|
||||
// Desc: Macros for DirectShow performance logging.
|
||||
//
|
||||
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#ifndef _DXMPERF_H_
|
||||
#define _DXMPERF_H_
|
||||
|
||||
#include <perfstruct.h>
|
||||
#include "perflog.h"
|
||||
|
||||
#ifdef _IA64_
|
||||
extern "C" unsigned __int64 __getReg( int whichReg );
|
||||
#pragma intrinsic(__getReg)
|
||||
#endif // _IA64_
|
||||
|
||||
|
||||
inline ULONGLONG _RDTSC( void ) {
|
||||
#ifdef _X86_
|
||||
LARGE_INTEGER li;
|
||||
__asm {
|
||||
_emit 0x0F
|
||||
_emit 0x31
|
||||
mov li.LowPart,eax
|
||||
mov li.HighPart,edx
|
||||
}
|
||||
return li.QuadPart;
|
||||
|
||||
#if 0 // This isn't tested yet
|
||||
|
||||
#elif defined (_IA64_)
|
||||
|
||||
#define INL_REGID_APITC 3116
|
||||
return __getReg( INL_REGID_APITC );
|
||||
|
||||
#endif // 0
|
||||
|
||||
#else // unsupported platform
|
||||
// not implemented on non x86/IA64 platforms
|
||||
return 0;
|
||||
#endif // _X86_/_IA64_
|
||||
}
|
||||
|
||||
#define DXMPERF_VIDEOREND 0x00000001
|
||||
#define DXMPERF_AUDIOGLITCH 0x00000002
|
||||
//#define GETTIME_BIT 0x00000001
|
||||
//#define AUDIOREND_BIT 0x00000004
|
||||
//#define FRAMEDROP_BIT 0x00000008
|
||||
#define AUDIOBREAK_BIT 0x00000010
|
||||
#define DXMPERF_AUDIORECV 0x00000020
|
||||
#define DXMPERF_AUDIOSLAVE 0x00000040
|
||||
#define DXMPERF_AUDIOBREAK 0x00000080
|
||||
|
||||
#define PERFLOG_CTOR( name, iface )
|
||||
#define PERFLOG_DTOR( name, iface )
|
||||
#define PERFLOG_DELIVER( name, source, dest, sample, pmt )
|
||||
#define PERFLOG_RECEIVE( name, source, dest, sample, pmt )
|
||||
#define PERFLOG_RUN( name, iface, time, oldstate )
|
||||
#define PERFLOG_PAUSE( name, iface, oldstate )
|
||||
#define PERFLOG_STOP( name, iface, oldstate )
|
||||
#define PERFLOG_JOINGRAPH( name, iface, graph )
|
||||
#define PERFLOG_GETBUFFER( allocator, sample )
|
||||
#define PERFLOG_RELBUFFER( allocator, sample )
|
||||
#define PERFLOG_CONNECT( connector, connectee, status, pmt )
|
||||
#define PERFLOG_RXCONNECT( connector, connectee, status, pmt )
|
||||
#define PERFLOG_DISCONNECT( disconnector, disconnectee, status )
|
||||
|
||||
#define PERFLOG_GETTIME( clock, time ) /*{ \
|
||||
PERFINFO_WMI_GETTIME perfData; \
|
||||
if (NULL != g_pTraceEvent) { \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_GETTIME; \
|
||||
perfData.data.cycleCounter = _RDTSC(); \
|
||||
perfData.data.dshowClock = (ULONGLONG) (time); \
|
||||
if (g_perfMasks[GETTIME_INDEX] & GETTIME_BIT) \
|
||||
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
|
||||
} \
|
||||
}*/
|
||||
|
||||
#define PERFLOG_AUDIOREND( clocktime, sampletime, psample, bytetime, cbytes ) /*{ \
|
||||
PERFINFO_WMI_AVREND perfData; \
|
||||
if (NULL != g_pTraceEvent) { \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_AUDIOREND; \
|
||||
perfData.data.cycleCounter = _RDTSC(); \
|
||||
perfData.data.dshowClock = (clocktime); \
|
||||
perfData.data.sampleTime = (sampletime); \
|
||||
if (g_perfMasks[AUDIOREND_INDEX] & AUDIOREND_BIT) \
|
||||
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
|
||||
} \
|
||||
}*/
|
||||
|
||||
#define PERFLOG_AUDIORECV(StreamTime,SampleStart,SampleStop,Discontinuity,Duration) \
|
||||
if (PerflogEnableFlags & DXMPERF_AUDIORECV) { \
|
||||
PERFINFO_WMI_AUDIORECV perfData; \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_AUDIORECV; \
|
||||
perfData.data.streamTime = StreamTime; \
|
||||
perfData.data.sampleStart = SampleStart; \
|
||||
perfData.data.sampleStop = SampleStop; \
|
||||
perfData.data.discontinuity = Discontinuity; \
|
||||
perfData.data.hwduration = Duration; \
|
||||
PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
|
||||
}
|
||||
|
||||
#define PERFLOG_AUDIOSLAVE(MasterClock,SlaveClock,ErrorAccum,LastHighErrorSeen,LastLowErrorSeen) \
|
||||
if (PerflogEnableFlags & DXMPERF_AUDIOSLAVE) { \
|
||||
PERFINFO_WMI_AUDIOSLAVE perfData; \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_AUDIOSLAVE; \
|
||||
perfData.data.masterClock = MasterClock; \
|
||||
perfData.data.slaveClock = SlaveClock; \
|
||||
perfData.data.errorAccum = ErrorAccum; \
|
||||
perfData.data.lastHighErrorSeen = LastHighErrorSeen;\
|
||||
perfData.data.lastLowErrorSeen = LastLowErrorSeen; \
|
||||
PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
|
||||
}
|
||||
|
||||
#define PERFLOG_AUDIOADDBREAK(IterNextWrite,OffsetNextWrite,IterWrite,OffsetWrite) \
|
||||
if (PerflogEnableFlags & DXMPERF_AUDIOBREAK) { \
|
||||
PERFINFO_WMI_AUDIOADDBREAK perfData; \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_AUDIOADDBREAK; \
|
||||
perfData.data.iterNextWrite = IterNextWrite; \
|
||||
perfData.data.offsetNextWrite = OffsetNextWrite; \
|
||||
perfData.data.iterWrite = IterWrite; \
|
||||
perfData.data.offsetWrite = OffsetWrite; \
|
||||
PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
|
||||
}
|
||||
|
||||
#define PERFLOG_VIDEOREND( sampletime, clocktime, psample ) \
|
||||
if (PerflogEnableFlags & DXMPERF_VIDEOREND) { \
|
||||
PERFINFO_WMI_AVREND perfData; \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_VIDEOREND; \
|
||||
perfData.data.cycleCounter = _RDTSC(); \
|
||||
perfData.data.dshowClock = (clocktime); \
|
||||
perfData.data.sampleTime = (sampletime); \
|
||||
PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
|
||||
}
|
||||
|
||||
#define PERFLOG_AUDIOGLITCH( instance, glitchtype, currenttime, previoustime ) \
|
||||
if (PerflogEnableFlags & DXMPERF_AUDIOGLITCH) { \
|
||||
PERFINFO_WMI_AUDIOGLITCH perfData; \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_DSOUNDGLITCH; \
|
||||
perfData.data.cycleCounter = _RDTSC(); \
|
||||
perfData.data.glitchType = (glitchtype); \
|
||||
perfData.data.sampleTime = (currenttime); \
|
||||
perfData.data.previousTime = (previoustime); \
|
||||
perfData.data.instanceId = (instance); \
|
||||
PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
|
||||
}
|
||||
|
||||
#define PERFLOG_FRAMEDROP( sampletime, clocktime, psample, renderer ) /*{ \
|
||||
PERFINFO_WMI_FRAMEDROP perfData; \
|
||||
if (NULL != g_pTraceEvent) { \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_FRAMEDROP; \
|
||||
perfData.data.cycleCounter = _RDTSC(); \
|
||||
perfData.data.dshowClock = (clocktime); \
|
||||
perfData.data.frameTime = (sampletime); \
|
||||
if (g_perfMasks[FRAMEDROP_INDEX] & FRAMEDROP_BIT) \
|
||||
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
|
||||
} \
|
||||
}*/
|
||||
|
||||
/*
|
||||
#define PERFLOG_AUDIOBREAK( nextwrite, writepos, msecs ) { \
|
||||
PERFINFO_WMI_AUDIOBREAK perfData; \
|
||||
if (NULL != g_pTraceEvent) { \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_AUDIOBREAK; \
|
||||
perfData.data.cycleCounter = _RDTSC(); \
|
||||
perfData.data.dshowClock = (writepos); \
|
||||
perfData.data.sampleTime = (nextwrite); \
|
||||
perfData.data.sampleDuration = (msecs); \
|
||||
if (g_perfMasks[AUDIOBREAK_INDEX] & AUDIOBREAK_BIT) \
|
||||
(*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
|
||||
} \
|
||||
}
|
||||
*/
|
||||
|
||||
#define PERFLOG_AUDIOBREAK( nextwrite, writepos, msecs ) \
|
||||
if (PerflogEnableFlags & AUDIOBREAK_BIT) { \
|
||||
PERFINFO_WMI_AUDIOBREAK perfData; \
|
||||
memset( &perfData, 0, sizeof( perfData ) ); \
|
||||
perfData.header.Size = sizeof( perfData ); \
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
|
||||
perfData.header.Guid = GUID_AUDIOBREAK; \
|
||||
perfData.data.cycleCounter = _RDTSC(); \
|
||||
perfData.data.dshowClock = (writepos); \
|
||||
perfData.data.sampleTime = (nextwrite); \
|
||||
perfData.data.sampleDuration = (msecs); \
|
||||
PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
|
||||
} \
|
||||
|
||||
|
||||
inline
|
||||
VOID PERFLOG_STREAMTRACE(
|
||||
ULONG Level,
|
||||
ULONG Id,
|
||||
ULONGLONG DShowClock,
|
||||
ULONGLONG Data1,
|
||||
ULONGLONG Data2,
|
||||
ULONGLONG Data3,
|
||||
ULONGLONG Data4
|
||||
)
|
||||
{
|
||||
if (Level <= PerflogModuleLevel)
|
||||
{
|
||||
PERFINFO_WMI_STREAMTRACE perfData;
|
||||
memset( &perfData, 0, sizeof( perfData ) );
|
||||
perfData.header.Size = sizeof( perfData );
|
||||
perfData.header.Flags = WNODE_FLAG_TRACED_GUID;
|
||||
perfData.header.Guid = GUID_STREAMTRACE;
|
||||
perfData.data.dshowClock = DShowClock;
|
||||
perfData.data.id = Id;
|
||||
perfData.data.data[0] = Data1;
|
||||
perfData.data.data[1] = Data2;
|
||||
perfData.data.data[2] = Data3;
|
||||
perfData.data.data[3] = Data4;
|
||||
PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif // _DXMPERF_H_
|
Loading…
Add table
Add a link
Reference in a new issue