Ejemplo n.º 1
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.º 2
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;
			}