⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dscore.cs

📁 一个非常完整的网络会议系统
💻 CS
字号:
/******************************************************
                  DirectShow .NET
		      netmaster@swissonline.ch
*******************************************************/
//					DsCore
// Core streaming interfaces, ported from axcore.idl

using System;
using System.Text;
using System.Runtime.InteropServices;

namespace DShowNET
{

	[ComVisible(false)]
public enum PinDirection		// PIN_DIRECTION
{
	Input,		// PINDIR_INPUT
	Output		// PINDIR_OUTPUT
}



	[ComVisible(false)]
public class DsHlp
{
	public const int OATRUE		= -1;
	public const int OAFALSE	= 0;

		[DllImport( "quartz.dll", CharSet=CharSet.Auto)]
	public static extern int AMGetErrorText( int hr, StringBuilder buf, int max );
}


	[ComVisible(true), ComImport,
	Guid("56a86891-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IPin
{
		[PreserveSig]
	int Connect(
		[In]											IPin		pReceivePin,
		[In, MarshalAs(UnmanagedType.LPStruct)]			AMMediaType	pmt );

		[PreserveSig]
	int ReceiveConnection(
		[In]											IPin		pReceivePin,
		[In, MarshalAs(UnmanagedType.LPStruct)]			AMMediaType	pmt );

		[PreserveSig]
	int Disconnect();

		[PreserveSig]
	int ConnectedTo( [Out] out IPin ppPin );

		[PreserveSig]
	int ConnectionMediaType(
		[Out, MarshalAs(UnmanagedType.LPStruct)]		AMMediaType	pmt );

		[PreserveSig]
	int QueryPinInfo( IntPtr pInfo );

		[PreserveSig]
	int QueryDirection( out PinDirection pPinDir );

		[PreserveSig]
	int QueryId(
		[Out, MarshalAs(UnmanagedType.LPWStr) ]		out	string		Id );

		[PreserveSig]
	int QueryAccept(
		[In, MarshalAs(UnmanagedType.LPStruct)]			AMMediaType	pmt );

		[PreserveSig]
	int EnumMediaTypes( IntPtr ppEnum );

		[PreserveSig]
	int QueryInternalConnections( IntPtr apPin, [In, Out] ref int nPin );

		[PreserveSig]
	int EndOfStream();

		[PreserveSig]
	int BeginFlush();

		[PreserveSig]
	int EndFlush();

		[PreserveSig]
	int NewSegment( long tStart, long tStop, double dRate );
}






	[ComVisible(true), ComImport,
	Guid("56a8689f-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IFilterGraph
{
		[PreserveSig]
	int AddFilter(
		[In] IBaseFilter pFilter,
		[In, MarshalAs(UnmanagedType.LPWStr)]			string			pName );

		[PreserveSig]
	int RemoveFilter( [In] IBaseFilter pFilter );

		[PreserveSig]
	int EnumFilters( [Out] out IEnumFilters ppEnum );

		[PreserveSig]
	int FindFilterByName(
		[In, MarshalAs(UnmanagedType.LPWStr)]			string			pName,
		[Out]										out IBaseFilter		ppFilter );

		[PreserveSig]
	int ConnectDirect( [In] IPin ppinOut, [In] IPin ppinIn,
		[In, MarshalAs(UnmanagedType.LPStruct)]			AMMediaType	pmt );

		[PreserveSig]
	int Reconnect( [In] IPin ppin );

		[PreserveSig]
	int Disconnect( [In] IPin ppin );

		[PreserveSig]
	int SetDefaultSyncSource();

}






// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("0000010c-0000-0000-C000-000000000046"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IPersist
{
		[PreserveSig]
	int GetClassID(
		[Out]									out Guid		pClassID );
}


// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("56a86899-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IMediaFilter
{
	#region "IPersist Methods"
			[PreserveSig]
		int GetClassID(
			[Out]									out Guid		pClassID );
	#endregion

		[PreserveSig]
	int Stop();

		[PreserveSig]
	int Pause();

		[PreserveSig]
	int Run( long tStart );

		[PreserveSig]
	int GetState( int dwMilliSecsTimeout, out int filtState );

		[PreserveSig]
	int SetSyncSource( [In] IReferenceClock pClock );

		[PreserveSig]
	int GetSyncSource( [Out] out IReferenceClock pClock );
}







// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("56a86895-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IBaseFilter
{
	#region "IPersist Methods"
			[PreserveSig]
		int GetClassID(
			[Out]									out Guid		pClassID );
	#endregion

	#region "IMediaFilter Methods"
			[PreserveSig]
		int Stop();

			[PreserveSig]
		int Pause();

			[PreserveSig]
		int Run( long tStart );

			[PreserveSig]
		int GetState( int dwMilliSecsTimeout, [Out] out int filtState );

			[PreserveSig]
		int SetSyncSource( [In] IReferenceClock pClock );

			[PreserveSig]
		int GetSyncSource( [Out] out IReferenceClock pClock );
	#endregion

		[PreserveSig]
	int EnumPins(
		[Out]										out IEnumPins		ppEnum );

		[PreserveSig]
	int FindPin(
		[In, MarshalAs(UnmanagedType.LPWStr)]			string			Id,
		[Out]										out IPin			ppPin );

		[PreserveSig]
	int QueryFilterInfo(
		[Out]											FilterInfo		pInfo );

		[PreserveSig]
	int JoinFilterGraph(
		[In]											IFilterGraph	pGraph,
		[In, MarshalAs(UnmanagedType.LPWStr)]			string			pName );

		[PreserveSig]
	int QueryVendorInfo(
		[Out, MarshalAs(UnmanagedType.LPWStr) ]		out	string			pVendorInfo );
}


	[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode), ComVisible(false)]
public class FilterInfo		//  FILTER_INFO
{
		[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
	public string		achName;
		[MarshalAs(UnmanagedType.IUnknown)]
	public object		pUnk;
}









// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("36b73880-c2c8-11cf-8b46-00805f6cef60"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IMediaSeeking
{
		[PreserveSig]
	int GetCapabilities( out SeekingCapabilities pCapabilities );

		[PreserveSig]
	int CheckCapabilities( [In, Out] ref SeekingCapabilities pCapabilities );

		[PreserveSig]
	int IsFormatSupported( [In] ref Guid pFormat );
		[PreserveSig]
	int QueryPreferredFormat( [Out] out Guid pFormat );

		[PreserveSig]
	int GetTimeFormat( [Out] out Guid pFormat );
		[PreserveSig]
	int IsUsingTimeFormat( [In] ref Guid pFormat );
		[PreserveSig]
	int SetTimeFormat( [In] ref Guid pFormat );

		[PreserveSig]
	int GetDuration( out long pDuration );
		[PreserveSig]
	int GetStopPosition( out long pStop );
		[PreserveSig]
	int GetCurrentPosition( out long pCurrent );

		[PreserveSig]
	int ConvertTimeFormat(	out long pTarget, [In] ref Guid pTargetFormat,
								long Source,  [In] ref Guid pSourceFormat );

		[PreserveSig]
	int SetPositions(
		[In, Out, MarshalAs(UnmanagedType.LPStruct)]		DsOptInt64	pCurrent,
		SeekingFlags dwCurrentFlags,
		[In, Out, MarshalAs(UnmanagedType.LPStruct)]		DsOptInt64	pStop,
		SeekingFlags dwStopFlags );

		[PreserveSig]
	int GetPositions( out long pCurrent, out long pStop );

		[PreserveSig]
	int GetAvailable( out long pEarliest, out long pLatest );

		[PreserveSig]
	int SetRate( double dRate );
		[PreserveSig]
	int GetRate( out double pdRate );

		[PreserveSig]
	int GetPreroll( out long pllPreroll );
}


	[Flags, ComVisible(false)]
public enum SeekingCapabilities		// AM_SEEKING_SeekingCapabilities AM_SEEKING_SEEKING_CAPABILITIES
{
	CanSeekAbsolute		= 0x001,
	CanSeekForwards		= 0x002,
	CanSeekBackwards	= 0x004,
	CanGetCurrentPos	= 0x008,
	CanGetStopPos		= 0x010,
	CanGetDuration		= 0x020,
	CanPlayBackwards	= 0x040,
	CanDoSegments		= 0x080,
	Source				= 0x100		// Doesn't pass thru used to count segment ends
}


	[Flags, ComVisible(false)]
public enum SeekingFlags		// AM_SEEKING_SeekingFlags AM_SEEKING_SEEKING_FLAGS
{
	NoPositioning			= 0x00,		// No change
	AbsolutePositioning		= 0x01,		// Position is supplied and is absolute
	RelativePositioning		= 0x02,		// Position is supplied and is relative
	IncrementalPositioning	= 0x03,		// (Stop) position relative to current, useful for seeking when paused (use +1)
	PositioningBitsMask		= 0x03,		// Useful mask
	SeekToKeyFrame			= 0x04,		// Just seek to key frame (performance gain)
	ReturnTime				= 0x08,		// Plug the media time equivalents back into the supplied LONGLONGs
	Segment					= 0x10,		// At end just do EC_ENDOFSEGMENT, don't do EndOfStream
	NoFlush					= 0x20		// Don't flush
}





// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("56a86897-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IReferenceClock
{
		[PreserveSig]
	int GetTime( out long pTime );

		[PreserveSig]
	int AdviseTime( long baseTime, long streamTime, IntPtr hEvent, out int pdwAdviseCookie);

		[PreserveSig]
	int AdvisePeriodic( long startTime, long periodTime, IntPtr hSemaphore, out int pdwAdviseCookie);

		[PreserveSig]
	int Unadvise( int dwAdviseCookie );
}







// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("56a86893-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IEnumFilters
{
		[PreserveSig]
	int Next(
		[In]															int				cFilters,
		[Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)]	out	IBaseFilter[]	ppFilter,
		[Out]														out int				pcFetched );

		[PreserveSig]
	int Skip( [In] int cFilters );
	void Reset();
	void Clone( [Out] out IEnumFilters ppEnum );
}


// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("56a86892-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IEnumPins
{
		[PreserveSig]
	int Next(
		[In]															int			cPins,
		[Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)]	out	IPin[]		ppPins,
		[Out]														out int			pcFetched );

		[PreserveSig]
	int Skip( [In] int cPins );
	void Reset();
	void Clone( [Out] out IEnumPins ppEnum );
}






	[StructLayout(LayoutKind.Sequential), ComVisible(false)]
public class AMMediaType		//  AM_MEDIA_TYPE
{
	public Guid		majorType;
	public Guid		subType;
		[MarshalAs(UnmanagedType.Bool)]
	public bool		fixedSizeSamples;
		[MarshalAs(UnmanagedType.Bool)]
	public bool		temporalCompression;
	public int		sampleSize;
	public Guid		formatType;
	public IntPtr	unkPtr;
	public int		formatSize;
	public IntPtr	formatPtr;
}





// ---------------------------------------------------------------------------------------

	[ComVisible(true), ComImport,
	Guid("56a8689a-0ad4-11ce-b03a-0020af0ba770"),
	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IMediaSample
{
		[PreserveSig]
	int GetPointer( out IntPtr ppBuffer );
		[PreserveSig]
	int GetSize();

		[PreserveSig]
	int GetTime( out long pTimeStart, out long pTimeEnd );

		[PreserveSig]
	int SetTime(
		[In, MarshalAs(UnmanagedType.LPStruct)]			DsOptInt64	pTimeStart,
		[In, MarshalAs(UnmanagedType.LPStruct)]			DsOptInt64	pTimeEnd );

		[PreserveSig]
	int IsSyncPoint();
		[PreserveSig]
	int SetSyncPoint(
		[In, MarshalAs(UnmanagedType.Bool)]			bool	bIsSyncPoint );

		[PreserveSig]
	int IsPreroll();
		[PreserveSig]
	int SetPreroll(
		[In, MarshalAs(UnmanagedType.Bool)]			bool	bIsPreroll );

		[PreserveSig]
	int GetActualDataLength();
		[PreserveSig]
	int SetActualDataLength( int len );

		[PreserveSig]
	int GetMediaType(
		[Out, MarshalAs(UnmanagedType.LPStruct)]	out AMMediaType	ppMediaType );

		[PreserveSig]
	int SetMediaType(
		[In, MarshalAs(UnmanagedType.LPStruct)]			AMMediaType	pMediaType );

		[PreserveSig]
	int IsDiscontinuity();
		[PreserveSig]
	int SetDiscontinuity(
		[In, MarshalAs(UnmanagedType.Bool)]			bool	bDiscontinuity );

		[PreserveSig]
	int GetMediaTime( out long pTimeStart, out long pTimeEnd );

		[PreserveSig]
	int SetMediaTime(
		[In, MarshalAs(UnmanagedType.LPStruct)]			DsOptInt64	pTimeStart,
		[In, MarshalAs(UnmanagedType.LPStruct)]			DsOptInt64	pTimeEnd );
}


} // namespace DShowNET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -