mirror of
https://github.com/bdnugget/Magic-Vision.git
synced 2026-11-07 09:17:36 +00:00
568 lines
13 KiB
C#
568 lines
13 KiB
C#
/******************************************************
|
|
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 enum PhysicalConnectorType
|
|
{
|
|
Video_Tuner = 1,
|
|
Video_Composite,
|
|
Video_SVideo,
|
|
Video_RGB,
|
|
Video_YRYBY,
|
|
Video_SerialDigital,
|
|
Video_ParallelDigital,
|
|
Video_SCSI,
|
|
Video_AUX,
|
|
Video_1394,
|
|
Video_USB,
|
|
Video_VideoDecoder,
|
|
Video_VideoEncoder,
|
|
Video_SCART,
|
|
|
|
Audio_Tuner = 4096,
|
|
Audio_Line,
|
|
Audio_Mic,
|
|
Audio_AESDigital,
|
|
Audio_SPDIFDigital,
|
|
Audio_SCSI,
|
|
Audio_AUX,
|
|
Audio_1394,
|
|
Audio_USB,
|
|
Audio_AudioDecoder,
|
|
};
|
|
|
|
|
|
|
|
|
|
[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( [Out] out PinInfo 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("0000010c-0000-0000-C000-000000000046"),
|
|
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
|
|
public interface IPersistStream
|
|
{
|
|
[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=0)] IBaseFilter[] ppFilter,
|
|
[Out] out int pcFetched );
|
|
*/
|
|
|
|
[PreserveSig]
|
|
int Next(
|
|
[In] uint cFilters,
|
|
out IBaseFilter x,
|
|
[Out] out uint 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=0)] 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;
|
|
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Unicode), ComVisible(false)]
|
|
public struct PinInfo // PIN_INFO
|
|
{
|
|
public IBaseFilter filter;
|
|
public PinDirection dir;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] public string name;
|
|
}
|
|
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
|
|
[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
|