Ejemplo n.º 1
0
 public void PopulateBITMAPINFOHEADER32(ref Win32.BITMAPINFOHEADER bmih)
 {
     bmih.Init();
     bmih.biPlanes    = 1;
     bmih.biBitCount  = 32;
     bmih.biHeight    = height;
     bmih.biWidth     = width;
     bmih.biSizeImage = (uint)(4 * width * height);
 }
Ejemplo n.º 2
0
 public void PopulateBITMAPINFOHEADER24(ref Win32.BITMAPINFOHEADER bmih)
 {
     bmih.Init();
     bmih.biPlanes   = 1;
     bmih.biBitCount = 24;
     bmih.biHeight   = height;
     //pad up width so that we end up with multiple of 4 bytes
     pitch            = width * 3;
     pitch            = (pitch + 3) & ~3;
     pitch_add        = pitch - width * 3;
     bmih.biWidth     = width;
     bmih.biSizeImage = (uint)(pitch * height);
 }
Ejemplo n.º 3
0
            public void OpenFile(string destPath, Parameters parameters, CodecToken videoCodecToken)
            {
                this.parameters          = parameters;
                this.currVideoCodecToken = videoCodecToken;

                //TODO - try creating the file once first before we let vfw botch it up?

                //open the avi output file handle
                if (File.Exists(destPath))
                {
                    File.Delete(destPath);
                }

                if (Win32.FAILED(Win32.AVIFileOpenW(ref pAviFile, destPath, Win32.OpenFileStyle.OF_CREATE | Win32.OpenFileStyle.OF_WRITE, 0)))
                {
                    throw new InvalidOperationException("Couldnt open dest path for avi file: " + destPath);
                }

                //initialize the video stream
                Win32.AVISTREAMINFOW   vidstream_header = new Win32.AVISTREAMINFOW();
                Win32.BITMAPINFOHEADER bmih             = new Win32.BITMAPINFOHEADER();
                parameters.PopulateBITMAPINFOHEADER24(ref bmih);
                vidstream_header.fccType = Win32.mmioFOURCC("vids");
                vidstream_header.dwRate  = parameters.fps;
                vidstream_header.dwScale = parameters.fps_scale;
                vidstream_header.dwSuggestedBufferSize = (int)bmih.biSizeImage;
                if (Win32.FAILED(Win32.AVIFileCreateStreamW(pAviFile, out pAviRawVideoStream, ref vidstream_header)))
                {
                    CloseFile();
                    throw new InvalidOperationException("Failed opening raw video stream. Not sure how this could happen");
                }

                //initialize audio stream
                Win32.AVISTREAMINFOW audstream_header = new Win32.AVISTREAMINFOW();
                Win32.WAVEFORMATEX   wfex             = new Win32.WAVEFORMATEX();
                parameters.PopulateWAVEFORMATEX(ref wfex);
                audstream_header.fccType         = Win32.mmioFOURCC("auds");
                audstream_header.dwQuality       = -1;
                audstream_header.dwScale         = wfex.nBlockAlign;
                audstream_header.dwRate          = (int)wfex.nAvgBytesPerSec;
                audstream_header.dwSampleSize    = wfex.nBlockAlign;
                audstream_header.dwInitialFrames = 1;                 // ??? optimal value?
                if (Win32.FAILED(Win32.AVIFileCreateStreamW(pAviFile, out pAviRawAudioStream, ref audstream_header)))
                {
                    CloseFile();
                    throw new InvalidOperationException("Failed opening raw audio stream. Not sure how this could happen");
                }

                outStatus = new OutputStatus();
                IsOpen    = true;
            }
Ejemplo n.º 4
0
            /// <summary>
            /// begin recording
            /// </summary>
            public void OpenStreams()
            {
                if (currVideoCodecToken == null)
                {
                    throw new InvalidOperationException("set a video codec token before opening the streams!");
                }

                // open compressed video stream
                Win32.AVICOMPRESSOPTIONS opts = new Win32.AVICOMPRESSOPTIONS();
                currVideoCodecToken.AllocateToAVICOMPRESSOPTIONS(ref opts);
                bool failed = Win32.FAILED(Win32.AVIMakeCompressedStream(out pAviCompressedVideoStream, pAviRawVideoStream, ref opts, IntPtr.Zero));

                CodecToken.DeallocateAVICOMPRESSOPTIONS(ref opts);

                if (failed)
                {
                    CloseStreams();
                    throw new InvalidOperationException("Failed making compressed video stream");
                }

                // set the compressed video stream input format
                Win32.BITMAPINFOHEADER bmih = new Win32.BITMAPINFOHEADER();
                if (bit32)
                {
                    parameters.PopulateBITMAPINFOHEADER32(ref bmih);
                }
                else
                {
                    parameters.PopulateBITMAPINFOHEADER24(ref bmih);
                }

                if (Win32.FAILED(Win32.AVIStreamSetFormat(pAviCompressedVideoStream, 0, ref bmih, Marshal.SizeOf(bmih))))
                {
                    bit32 = true;                     // we'll try again
                    CloseStreams();
                    throw new InvalidOperationException("Failed setting compressed video stream input format");
                }

                // set audio stream input format
                Win32.WAVEFORMATEX wfex = new Win32.WAVEFORMATEX();
                parameters.PopulateWAVEFORMATEX(ref wfex);
                if (Win32.FAILED(Win32.AVIStreamSetFormat(pAviRawAudioStream, 0, ref wfex, Marshal.SizeOf(wfex))))
                {
                    CloseStreams();
                    throw new InvalidOperationException("Failed setting raw audio stream input format");
                }
            }
Ejemplo n.º 5
0
			/// <summary>
			/// begin recording
			/// </summary>
			public void OpenStreams()
			{
				if (currVideoCodecToken == null)
					throw new InvalidOperationException("set a video codec token before opening the streams!");

				//open compressed video stream
				if (Win32.FAILED(Win32.AVIMakeCompressedStream(out pAviCompressedVideoStream, pAviRawVideoStream, ref currVideoCodecToken.comprOptions, IntPtr.Zero)))
				{
					CloseStreams();
					throw new InvalidOperationException("Failed making compressed video stream");
				}

				//set the compressed video stream input format
				Win32.BITMAPINFOHEADER bmih = new Win32.BITMAPINFOHEADER();
				if (bit32)
					parameters.PopulateBITMAPINFOHEADER32(ref bmih);
				else
					parameters.PopulateBITMAPINFOHEADER24(ref bmih);
				if (Win32.FAILED(Win32.AVIStreamSetFormat(pAviCompressedVideoStream, 0, ref bmih, Marshal.SizeOf(bmih))))
				{
					bit32 = true; // we'll try again
					CloseStreams();
					throw new InvalidOperationException("Failed setting compressed video stream input format");
				}

				//set audio stream input format
				Win32.WAVEFORMATEX wfex = new Win32.WAVEFORMATEX();
				parameters.PopulateWAVEFORMATEX(ref wfex);
				if (Win32.FAILED(Win32.AVIStreamSetFormat(pAviRawAudioStream, 0, ref wfex, Marshal.SizeOf(wfex))))
				{
					CloseStreams();
					throw new InvalidOperationException("Failed setting raw audio stream input format");
				}
			}
Ejemplo n.º 6
0
			public void OpenFile(string destPath, Parameters parameters, CodecToken videoCodecToken)
			{
				this.parameters = parameters;
				this.currVideoCodecToken = videoCodecToken;

				//TODO - try creating the file once first before we let vfw botch it up?

				//open the avi output file handle
				if (File.Exists(destPath))
					File.Delete(destPath);

				if (Win32.FAILED(Win32.AVIFileOpenW(ref pAviFile, destPath, Win32.OpenFileStyle.OF_CREATE | Win32.OpenFileStyle.OF_WRITE, 0)))
					throw new InvalidOperationException("Couldnt open dest path for avi file: " + destPath);

				//initialize the video stream
				Win32.AVISTREAMINFOW vidstream_header = new Win32.AVISTREAMINFOW();
				Win32.BITMAPINFOHEADER bmih = new Win32.BITMAPINFOHEADER();
				parameters.PopulateBITMAPINFOHEADER24(ref bmih);
				vidstream_header.fccType = Win32.mmioFOURCC("vids");
				vidstream_header.dwRate = parameters.fps;
				vidstream_header.dwScale = parameters.fps_scale;
				vidstream_header.dwSuggestedBufferSize = (int)bmih.biSizeImage;
				if (Win32.FAILED(Win32.AVIFileCreateStreamW(pAviFile, out pAviRawVideoStream, ref vidstream_header)))
				{
					CloseFile();
					throw new InvalidOperationException("Failed opening raw video stream. Not sure how this could happen");
				}

				//initialize audio stream
				Win32.AVISTREAMINFOW audstream_header = new Win32.AVISTREAMINFOW();
				Win32.WAVEFORMATEX wfex = new Win32.WAVEFORMATEX();
				parameters.PopulateWAVEFORMATEX(ref wfex);
				audstream_header.fccType = Win32.mmioFOURCC("auds");
				audstream_header.dwQuality = -1;
				audstream_header.dwScale = wfex.nBlockAlign;
				audstream_header.dwRate = (int)wfex.nAvgBytesPerSec;
				audstream_header.dwSampleSize = wfex.nBlockAlign;
				audstream_header.dwInitialFrames = 1; // ??? optimal value?
				if (Win32.FAILED(Win32.AVIFileCreateStreamW(pAviFile, out pAviRawAudioStream, ref audstream_header)))
				{
					CloseFile();
					throw new InvalidOperationException("Failed opening raw audio stream. Not sure how this could happen");
				}

				outStatus = new OutputStatus();
				IsOpen = true;
			}