Win32.cs ( File view )

Description:A s...
  • By vaselly 2014-09-16
  • View(s):40
  • Download(s):0
  • Point(s): 1
			namespace Tiger.Video.VFW
{

	using System;
	using System.Runtime.InteropServices;

	/// <summary>
	/// Windows API functions and structures
	/// </summary>
	internal class Win32
	{

		// --- AVI Functions

		// Initialize the AVIFile library
		[DllImport("avifil32.dll")]
		public static extern void AVIFileInit();

		// Exit the AVIFile library 
		[DllImport("avifil32.dll")]
		public static extern void AVIFileExit();

		// Open an AVI file
		[DllImport("avifil32.dll", CharSet=CharSet.Unicode)]
		public static extern int AVIFileOpen(
			out IntPtr ppfile,
			String szFile,
			OpenFileMode mode,
			IntPtr pclsidHandler);

		// Release an open AVI stream
		[DllImport("avifil32.dll")]
		public static extern int AVIFileRelease(
			IntPtr pfile);

		// Get address of a stream interface that is associated
		// with a specified AVI file
		[DllImport("avifil32.dll")]
		public static extern int AVIFileGetStream(
			IntPtr pfile,
			out IntPtr ppavi,
			int fccType,
			int lParam);

		// Create a new stream in an existing file and creates an interface to the new stream
		[DllImport("avifil32.dll")]
		public static extern int AVIFileCreateStream(
			IntPtr pfile,
			out IntPtr ppavi, 
			ref AVISTREAMINFO psi);

		// Release an open AVI stream
		[DllImport("avifil32.dll")]
		public static extern int AVIStreamRelease(
			IntPtr pavi);

		// Set the format of a stream at the specified position
		[DllImport("avifil32.dll")]
		public static extern int AVIStreamSetFormat(
			IntPtr pavi,
			int lPos, 
			ref BITMAPINFOHEADER lpFormat,
			int cbFormat);

		// Get the starting sample number for the stream
		[DllImport("avifil32.dll")]
		public static extern int AVIStreamStart(
			IntPtr pavi);

		// Get the length of the stream
		[DllImport("avifil32.dll")]
		public static extern int AVIStreamLength(
			IntPtr pavi);

		// Obtain stream header information
		[DllImport("avifil32.dll", CharSet=CharSet.Unicode)]
		public static extern int AVIStreamInfo(
			IntPtr pavi,
			ref AVISTREAMINFO psi,
			int lSize);

		// Prepare to decompress video frames from the specified video stream
		[DllImport("avifil32.dll")]
		public static extern IntPtr AVIStreamGetFrameOpen(
			IntPtr pavi,
			ref BITMAPINFOHEADER lpbiWanted);
		[DllImport("avifil32.dll")]
		public static extern IntPtr AVIStreamGetFrameOpen(
			IntPtr pavi,
			int lpbiWanted);

		// Releases resources used to decompress video frames
		[DllImport("avifil32.dll")]
		public static extern int AVIStreamGetFrameClose(
			IntPtr pget);

		// Return the address of a decompressed video frame
		[DllImport("avifil32.dll")]
		public static extern IntPtr AVIStreamGetFrame(
			IntPtr pget,
			int lPos);

		// Write data to a stream
		[DllImport("avifil32.dll")]
		public static extern int AVIStreamWrite(
			IntPtr pavi,
			int lStart,
			int lSamples,
			IntPtr lpBuffer,
			int cbBuffer,
			int dwFlags, 
			IntPtr plSampWritten,
			IntPtr plBytesWritten);

		// Retrieve the save options for a file and returns them in a buffer
		[DllImport("avifil32.dll")]
		public static extern int AVISaveOptions(
			IntPtr hwnd,
			int flags,
			int streams,
			[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] IntPtr [] ppavi,
			[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] IntPtr [] plpOptions);

		// Free the resources allocated by the AVISaveOptions function
		[DllImport("avifil32.dll")]
		public static extern int AVISaveOptionsFree(
			int streams,
			[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] IntPtr [] plpOptions);

		// Create a compressed stream from an uncompressed stream and a
		// compression filter, and returns the address of a pointer to
		// the compressed stream
		[DllImport("avifil32.dll")]
		public static extern int AVIMakeCompressedStream(
			out IntPtr ppsCompressed,
			IntPtr psSource,
			ref AVICOMPRESSOPTIONS lpOptions,
			IntPtr pclsidHandler);

		// --- memory functions

		// memcpy - copy a block of memery
		[DllImport("ntdll.dll")]
		public static extern IntPtr memcpy(
			IntPtr dst,
			IntPtr src,
			int count);
		[DllImport("ntdll.dll")]
		public static extern int memcpy(
			int dst,
			int src,
			int count);

		// --- structures

		// Define the coordinates of the upper-left and
		// lower-right corners of a rectangle
		[StructLayout(LayoutKind.Sequential, Pack=1)]
		public struct RECT
		{

			[MarshalAs(UnmanagedType.I4)] public int left;
			[MarshalAs(UnmanagedType.I4)] public int top;
			[MarshalAs(UnmanagedType.I4)] public int right;
			[MarshalAs(UnmanagedType.I4)] public int bottom;
		
}

		// Contains information for a single stream
		[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode, Pack=1)]
		public struct AVISTREAMINFO
		{

			[MarshalAs(UnmanagedType.I4)] public int fccType;
			[MarshalAs(UnmanagedType.I4)] public int fccHandler;
			[MarshalAs(UnmanagedType.I4)] public int dwFlags;
			[MarshalAs(UnmanagedType.I4)] public int dwCaps;
			[MarshalAs(UnmanagedType.I2)] public short wPriority;
			[MarshalAs(UnmanagedType.I2)] public short wLanguage;
			[MarshalAs(UnmanagedType.I4)] public int dwScale;
			[MarshalAs(UnmanagedType.I4)] public int dwRate;		// dwRate / dwScale == samples/second
			[MarshalAs(UnmanagedType.I4)] public int dwStart;
			[MarshalAs(UnmanagedType.I4)] public int dwLength;
			[MarshalAs(UnmanagedType.I4)] public int dwInitialFrames;
			[MarshalAs(UnmanagedType.I4)] public int dwSuggestedBufferSize;
			[MarshalAs(UnmanagedType.I4)] public int dwQuality;
			[MarshalAs(UnmanagedType.I4)] public int dwSampleSize;
			[MarshalAs(UnmanagedType.Struct, SizeConst=16)] public RECT rcFrame;
			[MarshalAs(UnmanagedType.I4)] public int dwEditCount;
			[MarshalAs(UnmanagedType.I4)] public int dwFormatChangeCount;
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public string szName;
		
}

		// Contains information about the dimensions and color format of a DIB
		[StructLayout(LayoutKind.Sequential, Pack=1)]
		public struct BITMAPINFOHEADER
		{

			[MarshalAs(UnmanagedType.I4)] public int biSize;
			[MarshalAs(UnmanagedType.I4)] public int biWidth;
			[MarshalAs(UnmanagedType.I4)] public int biHeight;
			[MarshalAs(UnmanagedType.I2)] public short biPlanes;
			[MarshalAs(UnmanagedType.I2)] public short biBitCount;
			[MarshalAs(UnmanagedType.I4)] public int biCompression;
			[MarshalAs(UnmanagedType.I4)] public int biSizeImage;
			[MarshalAs(UnmanagedType.I4)] public int biXPelsPerMeter;
			[MarshalAs(UnmanagedType.I4)] public int biYPelsPerMeter;
			[MarshalAs(UnmanagedType.I4)] public int biClrUsed;
			[MarshalAs(UnmanagedType.I4)] public int biClrImportant;
		
}

		// Contains information about a stream and how it is compressed and saved
		[StructLayout(LayoutKind.Sequential, Pack=1)]
		public struct AVICOMPRESSOPTIONS
		{

			[MarshalAs(UnmanagedType.I4)] public int fccType;
			[MarshalAs(UnmanagedType.I4)] public int fccHandler;
			[MarshalAs(UnmanagedType.I4)] public int dwKeyFrameEvery;
			[MarshalAs(UnmanagedType.I4)] public int dwQuality;
			[MarshalAs(UnmanagedType.I4)] public int dwBytesPerSecond;
			[MarshalAs(UnmanagedType.I4)] public int dwFlags;
			[MarshalAs(UnmanagedType.I4)] public int lpFormat;
			[MarshalAs(UnmanagedType.I4)] public int cbFormat;
			[MarshalAs(UnmanagedType.I4)] public int lpParms;
			[MarshalAs(UnmanagedType.I4)] public int cbParms;
			[MarshalAs(UnmanagedType.I4)] public int dwInterleaveEvery;
		
}

		// --- enumerations

		// File access modes
		[Flags]
		public enum OpenFileMode
		{

			Read            = 0x00000000,
			Write			= 0x00000001,
			ReadWrite		= 0x00000002,
			ShareCompat     = 0x00000000,
			ShareExclusive	= 0x00000010,
			ShareDenyWrite	= 0x00000020,
			ShareDenyRead	= 0x00000030,
			ShareDenyNone	= 0x00000040,
			Parse			= 0x00000100,
			Delete			= 0x00000200,
			Verify			= 0x00000400,
			Cancel			= 0x00000800,
			Create			= 0x00001000,
			Prompt			= 0x00002000,
			Exist			= 0x00004000,
			Reopen			= 0x00008000
		
}

		// ---

		// Replacement of mmioFOURCC macros
		public static int mmioFOURCC(string str)
		{

			return (
				((int)(byte)(str[0])) |
				((int)(byte)(str[1]) << 8) |
				((int)(byte)(str[2]) << 16) |
				((int)(byte)(str[3]) << 24));
		
}

		// Inverse of mmioFOURCC
		public static string decode_mmioFOURCC(int code)
		{

			char[]	chs = new char [4];

			for (int i = 0; i < 4; i++)
			{

				chs[i] = (char)(byte)((code >> (i << 3)) & 0xFF);
				if (!char.IsLetterOrDigit(chs[i]))
					chs[i] = ' ';
			
}
			return new string(chs);
		
}

		// --- public methods

		// Version of AVISaveOptions for one stream only
		//
		// I don't find a way to interop AVISaveOptions more likely, so the
		// usage of original version is not easy. The version makes it more
		// usefull.
		//
		public static int AVISaveOptions(IntPtr stream, ref AVICOMPRESSOPTIONS opts, IntPtr owner)
		{

			IntPtr[]	streams = new IntPtr[1];
			IntPtr[]	infPtrs = new IntPtr[1];
			IntPtr		mem;
			int			ret;

			// alloc unmanaged memory
			mem	= Marshal.AllocHGlobal(Marshal.SizeOf(typeof(AVICOMPRESSOPTIONS)));

			// copy from managed structure to unmanaged memory
			Marshal.StructureToPtr(opts, mem, false);

			streams[0] = stream;
			infPtrs[0] = mem;

			// show dialog with a list of available compresors and configuration
			ret = AVISaveOptions(IntPtr.Zero, 0, 1, streams, infPtrs);

			// copy from unmanaged memory to managed structure
			opts = (AVICOMPRESSOPTIONS) Marshal.PtrToStructure(mem, typeof(AVICOMPRESSOPTIONS));

			// free AVI compression options
			AVISaveOptionsFree(1, infPtrs);

			// clear it, because the information already freed by AVISaveOptionsFree
			opts.cbFormat	= 0;
			opts.cbParms	= 0;
			opts.lpFormat	= 0;
			opts.lpParms	= 0;

			// free unmanaged memory
			Marshal.FreeHGlobal(mem);

			return ret;
		
}
	
}

}
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
01.96 kB
01.96 kB
AssemblyInfo.cs2.37 kB2006-04-11 11:57
01.96 kB
01.96 kB
dshow.dll32.00 kB2007-06-13 21:51
dshow.pdb25.50 kB2007-06-13 21:51
01.96 kB
dshow.dll32.00 kB2007-06-07 20:26
01.96 kB
1.txt45.00 B2006-04-11 11:57
IBaseFilter.cs2.14 kB2006-04-11 11:57
IBasicVideo.cs4.70 kB2006-04-11 11:57
ICreateDevEnum.cs592.00 B2006-04-11 11:57
IEnumPins.cs831.00 B2006-04-11 11:57
IFileSourceFilter.cs861.00 B2006-04-11 11:57
IFilterGraph.cs1.58 kB2006-04-11 11:57
IGraphBuilder.cs2.84 kB2006-04-11 11:57
IMediaControl.cs1.49 kB2006-04-11 11:57
IMediaEvent.cs3.06 kB2006-04-11 11:57
IMediaPosition.cs1.88 kB2006-04-11 11:57
IMediaSeeking.cs2.79 kB2006-04-11 11:57
IPin.cs2.36 kB2006-04-11 11:57
IPropertyBag.cs853.00 B2006-04-11 11:57
ISampleGrabber.cs2.21 kB2006-04-11 11:57
IVideoFrameStep.cs747.00 B2006-04-11 11:57
IVideoWindow.cs5.90 kB2006-04-11 11:57
Structures.cs4.37 kB2006-04-11 11:57
Uuids.cs4.87 kB2006-04-11 11:57
Win32.cs919.00 B2006-04-11 11:57
dshow.csproj5.38 kB2007-03-16 20:38
Filter.cs2.57 kB2006-04-11 11:57
FilterCollection.cs2.14 kB2006-04-11 11:57
01.96 kB
01.96 kB
dshow.dll32.00 kB2007-06-13 21:51
dshow.pdb25.50 kB2007-06-13 21:51
01.96 kB
dshow.csproj.FileList.txt216.00 B2007-06-15 15:17
01.96 kB
dshow.dll32.00 kB2007-06-07 20:26
01.96 kB
dshow.dll28.00 kB2007-06-07 18:09
01.96 kB
Tools.cs1.11 kB2006-04-11 11:57
motion.sln1.79 kB2007-03-16 20:38
motion.suo35.00 kB2007-06-15 15:08
01.96 kB
AboutForm.cs11.91 kB2007-06-15 15:17
AboutForm.resx9.77 kB2007-06-15 15:17
App.ico26.07 kB2006-04-11 11:57
AssemblyInfo.cs2.47 kB2007-03-20 08:40
01.96 kB
01.96 kB
AForge.dll20.00 kB2007-03-16 19:54
AForge.Imaging.dll108.00 kB2007-03-19 18:42
AForge.Math.dll28.00 kB2007-03-16 19:54
App.ico26.07 kB2006-04-11 11:57
dshow.dll32.00 kB2007-06-13 21:51
dshow.pdb25.50 kB2007-06-13 21:51
motion.exe132.00 kB2007-06-15 15:17
motion.exe.config147.00 B2007-03-19 09:20
motion.pdb181.50 kB2007-06-15 15:17
motion.vshost.exe5.50 kB2005-09-23 07:56
motion.vshost.exe.config147.00 B2007-03-19 09:20
Tiger.Video.VFW.dll24.00 kB2007-06-13 21:51
Tiger.Video.VFW.pdb27.50 kB2007-06-13 21:51
01.96 kB
AForge.dll20.00 kB2007-03-16 19:54
AForge.Imaging.dll108.00 kB2007-03-19 18:42
AForge.Math.dll28.00 kB2007-03-16 19:54
dshow.dll32.00 kB2007-06-07 20:26
motion.exe124.00 kB2007-06-07 20:40
motion.exe.config147.00 B2007-03-19 09:20
motion.vshost.exe5.50 kB2005-09-23 07:56
motion.vshost.exe.config147.00 B2007-03-19 09:20
Tiger.Video.VFW.dll24.00 kB2007-06-07 20:26
Camera.cs3.47 kB2006-04-11 11:57
CameraWindow.cs5.17 kB2006-04-11 11:57
CameraWindow.resx5.55 kB2006-04-11 11:57
CaptureDeviceForm.cs4.49 kB2007-06-15 15:17
CaptureDeviceForm.resx5.37 kB2006-04-11 11:57
ClassDiagram1.cd1.00 B2007-06-07 18:39
Copyright.txt913.00 B2007-06-15 15:17
IMotionDetector.cs785.00 B2007-06-07 20:36
MainForm.cs21.34 kB2007-06-13 21:54
MainForm.resx45.81 kB2007-06-13 21:51
motion.csproj7.33 kB2007-06-07 18:45
MotionDetector1.cs9.95 kB2007-06-07 20:37
MotionDetector2.cs4.44 kB2007-06-07 20:38
MotionDetector3.cs5.06 kB2007-06-07 20:38
MotionDetector3Optimized.cs6.57 kB2007-06-07 20:38
MotionDetector4.cs4.89 kB2007-06-07 20:38
01.96 kB
01.96 kB
motion.AboutForm.resources3.00 kB2007-06-15 15:17
motion.CameraWindow.resources581.00 B2007-06-13 21:51
motion.CaptureDeviceForm.resources279.00 B2007-06-13 21:51
motion.csproj.GenerateResource.Cache1.00 kB2007-06-15 15:17
motion.exe132.00 kB2007-06-15 15:17
motion.MainForm.resources26.62 kB2007-06-13 21:51
motion.pdb181.50 kB2007-06-15 15:17
motion.Resources.1.gif828.00 B2006-04-11 11:57
motion.Resources.2.gif822.00 B2006-04-11 11:57
motion.Resources.3.gif830.00 B2006-04-11 11:57
motion.Resources.4.gif822.00 B2006-04-11 11:57
motion.Resources.5.gif822.00 B2006-04-11 11:57
motion.Resources.6.gif830.00 B2006-04-11 11:57
motion.Resources.7.gif821.00 B2006-04-11 11:57
motion.Resources.8.gif822.00 B2006-04-11 11:57
motion.Resources.9.gif822.00 B2006-04-11 11:57
motion.URLForm.resources269.00 B2007-06-13 21:51
ResolveAssemblyReference.cache13.42 kB2007-06-15 14:58
01.96 kB
motion.csproj.FileList.txt1.64 kB2007-06-15 15:17
01.96 kB
motion.AboutForm.resources3.00 kB2007-06-07 20:26
motion.CameraWindow.resources581.00 B2007-06-07 20:26
motion.CaptureDeviceForm.resources279.00 B2007-06-07 20:26
motion.csproj.GenerateResource.Cache1.00 kB2007-06-07 20:27
motion.exe124.00 kB2007-06-07 20:40
motion.MainForm.resources26.62 kB2007-06-07 20:27
motion.Resources.1.gif828.00 B2006-04-11 11:57
motion.Resources.2.gif822.00 B2006-04-11 11:57
motion.Resources.3.gif830.00 B2006-04-11 11:57
motion.Resources.4.gif822.00 B2006-04-11 11:57
motion.Resources.5.gif822.00 B2006-04-11 11:57
motion.Resources.6.gif830.00 B2006-04-11 11:57
motion.Resources.7.gif821.00 B2006-04-11 11:57
motion.Resources.8.gif822.00 B2006-04-11 11:57
motion.Resources.9.gif822.00 B2006-04-11 11:57
motion.URLForm.resources269.00 B2007-06-07 20:26
01.96 kB
ResolveAssemblyReference.cache10.44 kB2007-06-07 20:26
01.96 kB
01.96 kB
1.gif828.00 B2006-04-11 11:57
2.gif822.00 B2006-04-11 11:57
3.gif830.00 B2006-04-11 11:57
4.gif822.00 B2006-04-11 11:57
5.gif822.00 B2006-04-11 11:57
6.gif830.00 B2006-04-11 11:57
7.gif821.00 B2006-04-11 11:57
8.gif822.00 B2006-04-11 11:57
9.gif822.00 B2006-04-11 11:57
UnsafeBitmap.cs2.76 kB2007-06-15 14:58
URLForm.cs3.98 kB2006-04-11 11:57
URLForm.resx5.36 kB2006-04-11 11:57
01.96 kB
ByteArrayUtils.cs1.25 kB2006-04-11 11:57
CameraEvents.cs626.00 B2006-04-11 11:57
CaptureDevice.cs8.15 kB2006-04-11 11:57
IVideoSource.cs1.57 kB2006-04-11 11:57
JPEGStream.cs6.89 kB2006-04-11 11:57
MJPEGStream.cs9.12 kB2006-04-11 11:57
VideoFileSource.cs3.45 kB2006-04-11 11:57
VideoStream.cs8.47 kB2006-04-11 11:57
01.96 kB
AForge.dll20.00 kB2007-03-16 19:54
AForge.Imaging.dll108.00 kB2007-03-19 18:42
AForge.Math.dll28.00 kB2007-03-16 19:54
01.96 kB
AssemblyInfo.cs2.37 kB2006-04-11 11:57
AVIReader.cs5.29 kB2006-04-11 11:57
AVIWriter.cs5.59 kB2006-04-11 11:57
01.96 kB
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-13 21:51
Tiger.Video.VFW.pdb27.50 kB2007-06-13 21:51
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-07 20:26
01.96 kB
01.96 kB
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-13 21:51
Tiger.Video.VFW.pdb27.50 kB2007-06-13 21:51
01.96 kB
01.96 kB
Tiger.Video.VFW.dll20.00 kB2007-06-07 18:09
01.96 kB
Tiger.Video.VFW.dll24.00 kB2007-06-07 20:26
vfw.csproj.FileList.txt276.00 B2007-06-15 15:17
vfw.csproj3.55 kB2007-03-16 20:38
Win32.cs9.81 kB2006-04-11 11:57
...
Sponsored links

Win32.cs (805.82 kB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D