/******************************************************
DirectShow .NET
netmaster@swissonline.ch
*******************************************************/
// DsExtend
// Extended streaming interfaces, ported from axextend.idl
using System;
using System.Drawing;
using System.Runtime.InteropServices;
namespace DShowNET
{
[ComVisible(true), ComImport,
Guid("93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface ICaptureGraphBuilder2
{
[PreserveSig]
int SetFiltergraph( [In] IGraphBuilder pfg );
[PreserveSig]
int GetFiltergraph( [Out] out IGraphBuilder ppfg );
[PreserveSig]
int SetOutputFileName(
[In] ref Guid pType,
[In, MarshalAs(UnmanagedType.LPWStr)] string lpstrFile,
[Out] out IBaseFilter ppbf,
[Out] out IFileSinkFilter ppSink );
[PreserveSig]
int FindInterface(
[In] ref Guid pCategory,
[In] ref Guid pType,
[In] IBaseFilter pbf,
[In] ref Guid riid,
[Out, MarshalAs(UnmanagedType.IUnknown) ] out object ppint );
[PreserveSig]
int RenderStream(
[In] ref Guid pCategory,
[In] ref Guid pType,
[In, MarshalAs(UnmanagedType.IUnknown)] object pSource,
[In] IBaseFilter pfCompressor,
[In] IBaseFilter pfRenderer );
[PreserveSig]
int ControlStream(
[In] ref Guid pCategory,
[In] ref Guid pType,
[In] IBaseFilter pFilter,
[In] long pstart,
[In] long pstop,
[In] short wStartCookie,
[In] short wStopCookie );
[PreserveSig]
int AllocCapFile(
[In, MarshalAs(UnmanagedType.LPWStr)] string lpstrFile,
[In] long dwlSize );
[PreserveSig]
int CopyCaptureFile(
[In, MarshalAs(UnmanagedType.LPWStr)] string lpwstrOld,
[In, MarshalAs(UnmanagedType.LPWStr)] string lpwstrNew,
[In] int fAllowEscAbort,
[In] IAMCopyCaptureFileProgress pFilter );
[PreserveSig]
int FindPin(
[In] object pSource,
[In] int pindir,
[In] ref Guid pCategory,
[In] ref Guid pType,
[In, MarshalAs(UnmanagedType.Bool) ] bool fUnconnected,
[In] int num,
[Out] out IPin ppPin );
}
[ComVisible(true), ComImport,
Guid("56a868a9-0ad4-11ce-b03a-0020af0ba770"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IGraphBuilder
{
#region "IFilterGraph Methods"
[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();
#endregion
[PreserveSig]
int Connect( [In] IPin ppinOut, [In] IPin ppinIn );
[PreserveSig]
int Render( [In] IPin ppinOut );
[PreserveSig]
int RenderFile(
[In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrFile,
[In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrPlayList );
[PreserveSig]
int AddSourceFilter(
[In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrFileName,
[In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrFilterName,
[Out] out IBaseFilter ppFilter );
[PreserveSig]
int SetLogFile( IntPtr hFile );
[PreserveSig]
int Abort();
[PreserveSig]
int ShouldOperationContinue();
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("a2104830-7c70-11cf-8bce-00aa00a3f1a6"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IFileSinkFilter
{
[PreserveSig]
int SetFileName(
[In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
[In, MarshalAs(UnmanagedType.LPStruct)] AMMediaType pmt );
[PreserveSig]
int GetCurFile(
[Out, MarshalAs(UnmanagedType.LPWStr) ] out string pszFileName,
[Out, MarshalAs(UnmanagedType.LPStruct) ] AMMediaType pmt );
}
[ComVisible(true), ComImport,
Guid("00855B90-CE1B-11d0-BD4F-00A0C911CE86"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IFileSinkFilter2
{
[PreserveSig]
int SetFileName(
[In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
[In, MarshalAs(UnmanagedType.LPStruct)] AMMediaType pmt );
[PreserveSig]
int GetCurFile(
[Out, MarshalAs(UnmanagedType.LPWStr) ] out string pszFileName,
[Out, MarshalAs(UnmanagedType.LPStruct) ] AMMediaType pmt );
[PreserveSig]
int SetMode( [In] int dwFlags );
[PreserveSig]
int GetMode( [Out] out int dwFlags );
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("670d1d20-a068-11d0-b3f0-00aa003761c5"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMCopyCaptureFileProgress
{
[PreserveSig]
int Progress( int iProgress );
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("e46a9787-2b71-444d-a4b5-1fab7b708d6a"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IVideoFrameStep
{
[PreserveSig]
int Step( int dwFrames,
[In, MarshalAs(UnmanagedType.IUnknown)] object pStepObject );
[PreserveSig]
int CanStep( int bMultiple,
[In, MarshalAs(UnmanagedType.IUnknown)] object pStepObject );
[PreserveSig]
int CancelStep();
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("C6E13340-30AC-11d0-A18C-00A0C9118956"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMStreamConfig
{
[PreserveSig]
int SetFormat(
[In, MarshalAs(UnmanagedType.LPStruct)] AMMediaType pmt );
[PreserveSig]
int GetFormat(
[Out] out IntPtr pmt );
[PreserveSig]
int GetNumberOfCapabilities( out int piCount, out int piSize );
[PreserveSig]
int GetStreamCaps( int iIndex,
//[Out, MarshalAs(UnmanagedType.LPStruct)] out AMMediaType ppmt,
[Out] out IntPtr pmt,
[In] IntPtr pSCC );
}
// =============================================================================
// TUNER
// =============================================================================
[ComVisible(false)]
public enum AMTunerSubChannel
{
NoTune = -2, // AMTUNER_SUBCHAN_NO_TUNE : don't tune
Default = -1 // AMTUNER_SUBCHAN_DEFAULT : use default sub chan
}
[ComVisible(false)]
public enum AMTunerSignalStrength
{
NA = -1, // AMTUNER_HASNOSIGNALSTRENGTH : cannot indicate signal strength
NoSignal = 0, // AMTUNER_NOSIGNAL : no signal available
SignalPresent = 1 // AMTUNER_SIGNALPRESENT : signal present
}
[Flags, ComVisible(false)]
public enum AMTunerModeType
{
Default = 0x0000, // AMTUNER_MODE_DEFAULT : default tuner mode
TV = 0x0001, // AMTUNER_MODE_TV : tv
FMRadio = 0x0002, // AMTUNER_MODE_FM_RADIO : fm radio
AMRadio = 0x0004, // AMTUNER_MODE_AM_RADIO : am radio
Dss = 0x0008 // AMTUNER_MODE_DSS : dss
}
[ComVisible(false)]
public enum AMTunerEventType
{
Changed = 0x0001, // AMTUNER_EVENT_CHANGED : status changed
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("211A8761-03AC-11d1-8D13-00AA00BD8339"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMTuner
{
[PreserveSig]
int put_Channel( int lChannel, AMTunerSubChannel lVideoSubChannel, AMTunerSubChannel lAudioSubChannel );
[PreserveSig]
int get_Channel( out int plChannel, out int plVideoSubChannel, out int plAudioSubChannel );
[PreserveSig]
int ChannelMinMax( out int lChannelMin, out int lChannelMax );
[PreserveSig]
int put_CountryCode( int lCountryCode );
[PreserveSig]
int get_CountryCode( out int plCountryCode );
[PreserveSig]
int put_TuningSpace( int lTuningSpace );
[PreserveSig]
int get_TuningSpace( out int plTuningSpace );
[PreserveSig]
int Logon( IntPtr hCurrentUser );
[PreserveSig]
int Logout();
[PreserveSig]
int SignalPresent( out AMTunerSignalStrength plSignalStrength );
[PreserveSig]
int put_Mode( AMTunerModeType lMode );
[PreserveSig]
int get_Mode( out AMTunerModeType plMode );
[PreserveSig]
int GetAvailableModes( out AMTunerModeType plModes );
[PreserveSig]
int RegisterNotificationCallBack( IAMTunerNotification pNotify, AMTunerEventType lEvents );
[PreserveSig]
int UnRegisterNotificationCallBack( IAMTunerNotification pNotify );
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("211A8760-03AC-11d1-8D13-00AA00BD8339"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMTunerNotification
{
[PreserveSig]
int OnEvent( AMTunerEventType Event );
}
// ---------------------------------------------------------------------------------------
[Flags, ComVisible(false)]
public enum AnalogVideoStandard
{
None = 0x00000000, // This is a digital sensor
NTSC_M = 0x00000001, // 75 IRE Setup
NTSC_M_J = 0x00000002, // Japan, 0 IRE Setup
NTSC_433 = 0x00000004,
PAL_B = 0x00000010,
PAL_D = 0x00000020,
PAL_G = 0x00000040,
PAL_H = 0x00000080,
PAL_I = 0x00000100,
PAL_M = 0x00000200,
PAL_N = 0x00000400,
PAL_60 = 0x00000800,
SECAM_B = 0x00001000,
SECAM_D = 0x00002000,
SECAM_G = 0x00004000,
SECAM_H = 0x00008000,
SECAM_K = 0x00010000,
SECAM_K1 = 0x00020000,
SECAM_L = 0x00040000,
SECAM_L1 = 0x00080000,
PAL_N_COMBO = 0x00100000 // Argentina
}
[ComVisible(false)]
public enum TunerInputType
{
Cable,
Antenna
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("211A8766-03AC-11d1-8D13-00AA00BD8339"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMTVTuner
{
#region "IAMTuner Methods"
[PreserveSig]
int put_Channel( int lChannel, AMTunerSubChannel lVideoSubChannel, AMTunerSubChannel lAudioSubChannel );
[PreserveSig]
int get_Channel( out int plChannel, out int plVideoSubChannel, out int plAudioSubChannel );
[PreserveSig]
int ChannelMinMax( out int lChannelMin, out int lChannelMax );
[PreserveSig]
int put_CountryCode( int lCountryCode );
[PreserveSig]
int get_CountryCode( out int plCountryCode );
[PreserveSig]
int put_TuningSpace( int lTuningSpace );
[PreserveSig]
int get_TuningSpace( out int plTuningSpace );
[PreserveSig]
int Logon( IntPtr hCurrentUser );
[PreserveSig]
int Logout();
[PreserveSig]
int SignalPresent( out AMTunerSignalStrength plSignalStrength );
[PreserveSig]
int put_Mode( AMTunerModeType lMode );
[PreserveSig]
int get_Mode( out AMTunerModeType plMode );
[PreserveSig]
int GetAvailableModes( out AMTunerModeType plModes );
[PreserveSig]
int RegisterNotificationCallBack( IAMTunerNotification pNotify, AMTunerEventType lEvents );
[PreserveSig]
int UnRegisterNotificationCallBack( IAMTunerNotification pNotify );
#endregion
[PreserveSig]
int get_AvailableTVFormats( out AnalogVideoStandard lAnalogVideoStandard );
[PreserveSig]
int get_TVFormat( out AnalogVideoStandard lAnalogVideoStandard );
[PreserveSig]
int AutoTune( int lChannel, out int plFoundSignal );
[PreserveSig]
int StoreAutoTune();
[PreserveSig]
int get_NumInputConnections( out int plNumInputConnections );
[PreserveSig]
int put_InputType( int lIndex, TunerInputType inputType );
[PreserveSig]
int get_InputType( int lIndex, out TunerInputType inputType );
[PreserveSig]
int put_ConnectInput( int lIndex );
[PreserveSig]
int get_ConnectInput( out int lIndex );
[PreserveSig]
int get_VideoFrequency( out int lFreq );
[PreserveSig]
int get_AudioFrequency( out int lFreq );
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("C6E13380-30AC-11d0-A18C-00A0C9118956"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMCrossbar
{
[PreserveSig]
int get_PinCounts(
[Out] out int OutputPinCount,
[Out] out int InputPinCount );
[PreserveSig]
int CanRoute(
[In] int OutputPinIndex,
[In] int InputPinIndex );
[PreserveSig]
int Route(
[In] int OutputPinIndex,
[In] int InputPinIndex );
[PreserveSig]
int get_IsRoutedTo(
[In] int OutputPinIndex,
[Out] out int InputPinIndex );
[PreserveSig]
int get_CrossbarPinInfo(
[In, MarshalAs(UnmanagedType.Bool)] bool IsInputPin,
[In] int PinIndex,
[Out] out int PinIndexRelated,
[Out] out PhysicalConnectorType PhysicalType
);
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("54C39221-8380-11d0-B3F0-00AA003761C5"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMAudioInputMixer
{
// This interface is only supported by the input pins, not the filter
// If disabled, this channel will not be mixed in as part of the
// recorded signal.
int put_Enable (
[In] bool fEnable); // TRUE=enable FALSE=disable
//Is this channel enabled?
int get_Enable (
[Out] out bool pfEnable);
// When set to mono mode, making a stereo recording of this channel
// will have both channels contain the same data... a mixture of the
// left and right signals
int put_Mono (
[In] bool fMono); // TRUE=mono FALSE=multi channel
//all channels combined into a mono signal?
int get_Mono (
[Out] out bool pfMono);
// !!! WILL CARDS BE ABLE TO BOOST THE GAIN?
//Set the record level for this channel
int put_MixLevel (
[In] double Level); // 0 = off, 1 = full (unity?) volume
// AMF_AUTOMATICGAIN, if supported,
// means automatic
//Get the record level for this channel
int get_MixLevel (
[Out] out double pLevel);
// For instance, when panned full left, and you make a stereo recording
// of this channel, you will record a silent right channel.
int put_Pan (
[In] double Pan); // -1 = full left, 0 = centre, 1 = right
//Get the pan for this channel
int get_Pan (
[Out] out double pPan);
// Boosts the bass of low volume signals before they are recorded
// to compensate for the fact that your ear has trouble hearing quiet
// bass sounds
int put_Loudness (
[In] bool fLoudness);// TRUE=on FALSE=off
int get_Loudness (
[Out] out bool pfLoudness);
// boosts or cuts the treble of the signal before it's recorded by
// a certain amount of dB
int put_Treble (
[In] double Treble); // gain in dB (-ve = attenuate)
//Get the treble EQ for this channel
int get_Treble (
[Out] out double pTreble);
// This is the maximum value allowed in put_Treble. ie 6.0 means
// any value between -6.0 and 6.0 is allowed
int get_TrebleRange (
[Out] out double pRange); // largest value allowed
// boosts or cuts the bass of the signal before it's recorded by
// a certain amount of dB
int put_Bass (
[In] double Bass); // gain in dB (-ve = attenuate)
// Get the bass EQ for this channel
int get_Bass (
[Out] out double pBass);
// This is the maximum value allowed in put_Bass. ie 6.0 means
// any value between -6.0 and 6.0 is allowed
int get_BassRange (
[Out] out double pRange); // largest value allowed
}
// ---------------------------------------------------------------------------------------
public enum VfwCompressDialogs
{
Config = 0x01,
About = 0x02,
QueryConfig = 0x04,
QueryAbout = 0x08
}
// ---------------------------------------------------------------------------------------
[ComVisible(true), ComImport,
Guid("D8D715A3-6E5E-11D0-B3F0-00AA003761C5"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMVfwCompressDialogs
{
[PreserveSig]
// Bring up a dialog for this codec
int ShowDialog(
[In] VfwCompressDialogs iDialog,
[In] IntPtr hwnd );
// Calls ICGetState and gives you the result
int GetState(
[Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] byte[] pState,
ref int pcbState );
// Calls ICSetState
int SetState(
[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] byte[] pState,
[In] int cbState );
// Send a codec specific message
int SendDriverMessage(
int uMsg,
long dw1,
long dw2 );
}
// ---------------------------------------------------------------------------------------
[StructLayout(LayoutKind.Sequential), ComVisible(false)]
public class VideoStreamConfigCaps // VIDEO_STREAM_CONFIG_CAPS
{
public Guid Guid;
public AnalogVideoStandard VideoStandard;
public Size InputSize;
public Size MinCroppingSize;
public Size MaxCroppingSize;
public int CropGranularityX;
public int CropGranularityY;
public int CropAlignX;
public int CropAlignY;
public Size MinOutputSize;
public Size MaxOutputSize;
public int OutputGranularityX;
public int OutputGranularityY;
public int StretchTapsX;
public int StretchTapsY;
public int ShrinkTapsX;
public int ShrinkTapsY;
public long MinFrameInterval;
public long MaxFrameInterval;
public int MinBitsPerSecond;
public int MaxBitsPerSecond;
}
// ---------------------------------------------------------------------------------------
[StructLayout(LayoutKind.Sequential), ComVisible(false)]
public class AudioStreamConfigCaps // AUDIO_STREAM_CONFIG_CAPS
{
public Guid Guid;
public int MinimumChannels;
public int MaximumChannels;
public int ChannelsGranularity;
public int MinimumBitsPerSample;
public int MaximumBitsPerSample;
public int BitsPerSampleGranularity;
public int MinimumSampleFrequency;
public int MaximumSampleFrequency;
public int SampleFrequencyGranularity;
}
} // namespace DShowNET