Click here to Skip to main content
15,896,063 members
Articles / Multimedia / DirectX

Cam Alarm 2.0 - Alarm system run from a web camera

Rate me:
Please Sign up or sign in to vote.
4.86/5 (33 votes)
16 Jun 2010CPOL3 min read 86K   9.5K   150  
Simple alarm system for those on a budget..
/*
 * DirectShow structures and enumerations
 */
namespace dshow.Core
{
	using System;
	using System.Runtime.InteropServices;

	// Indicates a pin's direction
	//
	[ComVisible(false)]
	public enum PinDirection	// PIN_DIRECTION
	{
		Input,
		Output
	}

	// The AM_MEDIA_TYPE structure describes the format of a media sample
	//
	[ComVisible(false),
	StructLayout(LayoutKind.Sequential)]
	public class AMMediaType : IDisposable	// AM_MEDIA_TYPE
	{
		public Guid		majorType;
		public Guid		subType;

		[MarshalAs(UnmanagedType.Bool)]
		public bool		fixedSizeSamples = true;

		[MarshalAs(UnmanagedType.Bool)]
		public bool		temporalCompression;

		public int		sampleSize = 1;
		public Guid		formatType;
		public IntPtr	unkPtr;
		public int		formatSize;
		public IntPtr	formatPtr;

		// dispose
		public void Dispose()
		{
			if (formatSize != 0)
				Marshal.FreeCoTaskMem(formatPtr);
			if (unkPtr != IntPtr.Zero)
				Marshal.Release(unkPtr);
		}
	}

	// The PIN_INFO structure contains information about a pin
	// Used with the IPin::QueryPinInfo method
	//
	[ComVisible(false),
	StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Unicode)]
	public class PinInfo		// PIN_INFO
	{
		public IBaseFilter filter;
		public PinDirection dir;
		[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] public string name;
	}

	// The FILTER_INFO structure contains information about a filter
	//
	[ComVisible(false),
	StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
	public class FilterInfo		//  FILTER_INFO
	{
		[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
		public string		achName;

		[MarshalAs(UnmanagedType.IUnknown)]
		public object		pUnk;
	}

	// The VIDEOINFOHEADER structure describes the bitmap
	// and color information for a video image
	//
	[ComVisible(false),
	StructLayout(LayoutKind.Sequential)]
	public struct VideoInfoHeader	// VIDEOINFOHEADER
	{
		public RECT		SrcRect;
		public RECT		TargetRect;
		public int		BitRate;
		public int		BitErrorRate;
		public long		AvgTimePerFrame;
		public BitmapInfoHeader	BmiHeader;
	}

	// The BITMAPINFOHEADER structure contains information about
	// the dimensions and color format of a DIB
	//
	[ComVisible(false),
	StructLayout(LayoutKind.Sequential, Pack=2)]
	public struct BitmapInfoHeader	// BITMAPINFOHEADER
	{
		public int      Size;
		public int      Width;
		public int      Height;
		public short    Planes;
		public short    BitCount;
		public int      Compression;
		public int      ImageSize;
		public int      XPelsPerMeter;
		public int      YPelsPerMeter;
		public int      ClrUsed;
		public int      ClrImportant;
	}

	// The RECT structure defines the coordinates of the
	// upper-left and lower-right corners of a rectangle
	//
	[ComVisible(false),
	StructLayout(LayoutKind.Sequential)]
	public struct RECT		// RECT
	{
		public int Left;
		public int Top;
		public int Right;
		public int Bottom;
	}

	// event notification codes
	//
	[ComVisible(false)]
	public enum EventCode
	{
		Complete				= 0x01,
		UserAbort				= 0x02,
		ErrorAabort				= 0x03,
		Time					= 0x04,
		Repaint					= 0x05,
		StreamErrorStopped		= 0x06,
		StreamErrorStillplaying	= 0x07,

		ClockChanged			= 0x0D,
		Paused					= 0x0E,
		BufferingData			= 0x11,

		StepComplete			= 0x24
	}

	// Specifies the seeking capabilities of a media stream
	//
	[ComVisible(false), Flags]
	public enum SeekingCapabilities		// AM_SEEKING_SEEKING_CAPABILITIES
	{
		CanSeekAbsolute		= 0x001,
		CanSeekForwards		= 0x002,
		CanSeekBackwards	= 0x004,
		CanGetCurrentPos	= 0x008,
		CanGetStopPos		= 0x010,
		CanGetDuration		= 0x020,
		CanPlayBackwards	= 0x040,
		CanDoSegments		= 0x080,
		Source				= 0x100
	}

	// Positioning and Modifier Flags
	//
	[ComVisible(false), Flags]
	public enum SeekingFlags
	{
		NoPositioning			= 0x00,	// No change in position
		AbsolutePositioning		= 0x01,	// The specified position is absolute
		RelativePositioning		= 0x02,	// The specified position is relative to the previous value
		IncrementalPositioning	= 0x03,	// The stop position is relative to the current position
		SeekToKeyFrame			= 0x04,	// Seek to the nearest key frame. This might be faster, but less accurate.
		ReturnTime				= 0x08,	// Return the equivalent reference times
		Segment					= 0x10,	// Use segment seeking
		NoFlush					= 0x20	// Do not flush
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Network Administrator vtdev.com
Canada Canada
Network and programming specialist. Started in C, and have learned about 14 languages since then. Cisco programmer, and lately writing a lot of C# and WPF code, (learning Java too). If I can dream it up, I can probably put it to code. My software company, (VTDev), is on the verge of releasing a couple of very cool things.. keep you posted.

Comments and Discussions