215 lines
7.5 KiB
C++
215 lines
7.5 KiB
C++
//------------------------------------------------------------------------------
|
|
// File: Streams.h
|
|
//
|
|
// Desc: DirectShow base classes - defines overall streams architecture.
|
|
//
|
|
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef __STREAMS__
|
|
#define __STREAMS__
|
|
|
|
#ifdef _MSC_VER
|
|
// disable some level-4 warnings, use #pragma warning(enable:###) to re-enable
|
|
#pragma warning(disable:4100) // warning C4100: unreferenced formal parameter
|
|
#pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
|
|
#pragma warning(disable:4511) // warning C4511: copy constructor could not be generated
|
|
#pragma warning(disable:4512) // warning C4512: assignment operator could not be generated
|
|
#pragma warning(disable:4514) // warning C4514: "unreferenced inline function has been removed"
|
|
|
|
#if _MSC_VER>=1100
|
|
#define AM_NOVTABLE __declspec(novtable)
|
|
#else
|
|
#define AM_NOVTABLE
|
|
#endif
|
|
#else
|
|
#include <sal.h>
|
|
#include <sal2.h>
|
|
#define AM_NOVTABLE
|
|
#pragma GCC diagnostic ignored "-Wwrite-strings"
|
|
#endif // MSC_VER
|
|
|
|
|
|
// Because of differences between Visual C++ and older Microsoft SDKs,
|
|
// you may have defined _DEBUG without defining DEBUG. This logic
|
|
// ensures that both will be set if Visual C++ sets _DEBUG.
|
|
#ifdef _DEBUG
|
|
#ifndef DEBUG
|
|
#define DEBUG
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
#include <olectl.h>
|
|
#include <ddraw.h>
|
|
#include <mmsystem.h>
|
|
|
|
|
|
#ifndef NUMELMS
|
|
#if _WIN32_WINNT < 0x0600
|
|
#define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))
|
|
#else
|
|
#define NUMELMS(aa) ARRAYSIZE(aa)
|
|
#endif
|
|
#endif
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// The following definitions come from the Platform SDK and are required if
|
|
// the applicaiton is being compiled with the headers from Visual C++ 6.0.
|
|
/////////////////////////////////////////////////// ////////////////////////
|
|
#ifndef InterlockedExchangePointer
|
|
#define InterlockedExchangePointer(Target, Value) \
|
|
(PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value))
|
|
#endif
|
|
|
|
#ifndef _WAVEFORMATEXTENSIBLE_
|
|
#define _WAVEFORMATEXTENSIBLE_
|
|
typedef struct {
|
|
WAVEFORMATEX Format;
|
|
union {
|
|
WORD wValidBitsPerSample; /* bits of precision */
|
|
WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */
|
|
WORD wReserved; /* If neither applies, set to zero. */
|
|
} Samples;
|
|
DWORD dwChannelMask; /* which channels are */
|
|
/* present in stream */
|
|
GUID SubFormat;
|
|
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
|
|
#endif // !_WAVEFORMATEXTENSIBLE_
|
|
|
|
#if !defined(WAVE_FORMAT_EXTENSIBLE)
|
|
#define WAVE_FORMAT_EXTENSIBLE 0xFFFE
|
|
#endif // !defined(WAVE_FORMAT_EXTENSIBLE)
|
|
|
|
#ifndef GetWindowLongPtr
|
|
#define GetWindowLongPtrA GetWindowLongA
|
|
#define GetWindowLongPtrW GetWindowLongW
|
|
#ifdef UNICODE
|
|
#define GetWindowLongPtr GetWindowLongPtrW
|
|
#else
|
|
#define GetWindowLongPtr GetWindowLongPtrA
|
|
#endif // !UNICODE
|
|
#endif // !GetWindowLongPtr
|
|
|
|
#ifndef SetWindowLongPtr
|
|
#define SetWindowLongPtrA SetWindowLongA
|
|
#define SetWindowLongPtrW SetWindowLongW
|
|
#ifdef UNICODE
|
|
#define SetWindowLongPtr SetWindowLongPtrW
|
|
#else
|
|
#define SetWindowLongPtr SetWindowLongPtrA
|
|
#endif // !UNICODE
|
|
#endif // !SetWindowLongPtr
|
|
|
|
#ifndef GWLP_WNDPROC
|
|
#define GWLP_WNDPROC (-4)
|
|
#endif
|
|
#ifndef GWLP_HINSTANCE
|
|
#define GWLP_HINSTANCE (-6)
|
|
#endif
|
|
#ifndef GWLP_HWNDPARENT
|
|
#define GWLP_HWNDPARENT (-8)
|
|
#endif
|
|
#ifndef GWLP_USERDATA
|
|
#define GWLP_USERDATA (-21)
|
|
#endif
|
|
#ifndef GWLP_ID
|
|
#define GWLP_ID (-12)
|
|
#endif
|
|
#ifndef DWLP_MSGRESULT
|
|
#define DWLP_MSGRESULT 0
|
|
#endif
|
|
#ifndef DWLP_DLGPROC
|
|
#define DWLP_DLGPROC DWLP_MSGRESULT + sizeof(LRESULT)
|
|
#endif
|
|
#ifndef DWLP_USER
|
|
#define DWLP_USER DWLP_DLGPROC + sizeof(DLGPROC)
|
|
#endif
|
|
|
|
|
|
#pragma warning(push)
|
|
#pragma warning(disable: 4312 4244)
|
|
// _GetWindowLongPtr
|
|
// Templated version of GetWindowLongPtr, to suppress spurious compiler warning.
|
|
template <class T>
|
|
T _GetWindowLongPtr(HWND hwnd, int nIndex)
|
|
{
|
|
return (T)GetWindowLongPtr(hwnd, nIndex);
|
|
}
|
|
|
|
// _SetWindowLongPtr
|
|
// Templated version of SetWindowLongPtr, to suppress spurious compiler warning.
|
|
template <class T>
|
|
LONG_PTR _SetWindowLongPtr(HWND hwnd, int nIndex, T p)
|
|
{
|
|
return SetWindowLongPtr(hwnd, nIndex, (LONG_PTR)p);
|
|
}
|
|
#pragma warning(pop)
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// End Platform SDK definitions
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include <strmif.h> // Generated IDL header file for streams interfaces
|
|
#include <intsafe.h> // required by amvideo.h
|
|
|
|
#include <reftime.h> // Helper class for REFERENCE_TIME management
|
|
#include <wxdebug.h> // Debug support for logging and ASSERTs
|
|
#include <amvideo.h> // ActiveMovie video interfaces and definitions
|
|
//include amaudio.h explicitly if you need it. it requires the DX SDK.
|
|
//#include <amaudio.h> // ActiveMovie audio interfaces and definitions
|
|
#include <wxutil.h> // General helper classes for threads etc
|
|
#include <combase.h> // Base COM classes to support IUnknown
|
|
//#include <dllsetup.h> // Filter registration support functions
|
|
#include <measure.h> // Performance measurement
|
|
//#include <comlite.h> // Light weight com function prototypes
|
|
|
|
//#include <cache.h> // Simple cache container class
|
|
#include <wxlist.h> // Non MFC generic list class
|
|
#include <msgthrd.h> // CMsgThread
|
|
#include <mtype.h> // Helper class for managing media types
|
|
#include <fourcc.h> // conversions between FOURCCs and GUIDs
|
|
#include <control.h> // generated from control.odl
|
|
#include <ctlutil.h> // control interface utility classes
|
|
#include <evcode.h> // event code definitions
|
|
#include <amfilter.h> // Main streams architecture class hierachy
|
|
//#include <transfrm.h> // Generic transform filter
|
|
//#include <transip.h> // Generic transform-in-place filter
|
|
#include <uuids.h> // declaration of type GUIDs and well-known clsids
|
|
//#include <source.h> // Generic source filter
|
|
//#include <outputq.h> // Output pin queueing
|
|
#include <errors.h> // HRESULT status and error definitions
|
|
#include <renbase.h> // Base class for writing ActiveX renderers
|
|
//#include <winutil.h> // Helps with filters that manage windows
|
|
//#include <winctrl.h> // Implements the IVideoWindow interface
|
|
//#include <videoctl.h> // Specifically video related classes
|
|
const LONGLONG MAX_TIME = 0x7FFFFFFFFFFFFFFF; /* Maximum LONGLONG value */
|
|
//#include <refclock.h> // Base clock class
|
|
//#include <sysclock.h> // System clock
|
|
//#include <pstream.h> // IPersistStream helper class
|
|
//#include <vtrans.h> // Video Transform Filter base class
|
|
//#include <amextra.h>
|
|
//#include <cprop.h> // Base property page class
|
|
//#include <strmctl.h> // IAMStreamControl support
|
|
//#include <edevdefs.h> // External device control interface defines
|
|
//#include <audevcod.h> // audio filter device error event codes
|
|
|
|
#ifndef _MSC_VER
|
|
|
|
#define min(a,b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a < _b ? _a : _b; })
|
|
#include <amvideo2.h>
|
|
|
|
#endif
|
|
|
|
|
|
#else
|
|
#ifdef DEBUG
|
|
#pragma message("STREAMS.H included TWICE")
|
|
#endif
|
|
#endif // __STREAMS__
|
|
|