/// <summary>Create a new stream</summary> private void CreateStreamWithoutFormat() { int scale = 1; double rate = this.frameRate; this.GetRateAndScale(ref rate, ref scale); Avi.AVISTREAMINFO strhdr = new Avi.AVISTREAMINFO(); strhdr.fccType = Avi.mmioStringToFOURCC("vids", 0); strhdr.fccHandler = Avi.mmioStringToFOURCC("CVID", 0); strhdr.dwFlags = 0; strhdr.dwCaps = 0; strhdr.wPriority = 0; strhdr.wLanguage = 0; strhdr.dwScale = (int)scale; strhdr.dwRate = (int)rate; // Frames per Second strhdr.dwStart = 0; strhdr.dwLength = 0; strhdr.dwInitialFrames = 0; strhdr.dwSuggestedBufferSize = this.frameSize; //height_ * stride_; strhdr.dwQuality = -1; //default strhdr.dwSampleSize = 0; strhdr.rcFrame.top = 0; strhdr.rcFrame.left = 0; strhdr.rcFrame.bottom = (uint)this.height; strhdr.rcFrame.right = (uint)this.width; strhdr.dwEditCount = 0; strhdr.dwFormatChangeCount = 0; strhdr.szName = new UInt16[64]; int result = Avi.AVIFileCreateStream(this.aviFile, out this.aviStream, ref strhdr); if (result != 0) { throw new Exception("Exception in AVIFileCreateStream: " + result.ToString()); } }
/// <summary>Copy the stream into a new file</summary> /// <param name="fileName">Name of the new file</param> public override void ExportStream(String fileName) { Avi.AVICOMPRESSOPTIONS_CLASS opts = new Avi.AVICOMPRESSOPTIONS_CLASS(); opts.fccType = (UInt32)Avi.mmioStringToFOURCC("auds", 0); opts.fccHandler = (UInt32)Avi.mmioStringToFOURCC("CAUD", 0); opts.dwKeyFrameEvery = 0; opts.dwQuality = 0; opts.dwFlags = 0; opts.dwBytesPerSecond = 0; opts.lpFormat = new IntPtr(0); opts.cbFormat = 0; opts.lpParms = new IntPtr(0); opts.cbParms = 0; opts.dwInterleaveEvery = 0; Avi.AVISaveV(fileName, 0, 0, 1, ref this.aviStream, ref opts); }
/// <summary>Create a compressed stream from an uncompressed stream</summary> private void CreateCompressedStream(bool dialog) { Avi.AVICOMPRESSOPTIONS structOptions; if (dialog) { //display the compression options dialog... Avi.AVICOMPRESSOPTIONS_CLASS options = new Avi.AVICOMPRESSOPTIONS_CLASS(); options.fccType = (uint)Avi.streamtypeVIDEO; options.lpParms = IntPtr.Zero; options.lpFormat = IntPtr.Zero; Avi.AVISaveOptions(IntPtr.Zero, Avi.ICMF_CHOOSE_KEYFRAME | Avi.ICMF_CHOOSE_DATARATE, 1, ref aviStream, ref options); Avi.AVISaveOptionsFree(1, ref options); structOptions = options.ToStruct(); } else { //..or set static options structOptions.fccType = (UInt32)Avi.mmioStringToFOURCC("vids", 0); structOptions.fccHandler = (UInt32)Avi.mmioStringToFOURCC("CVID", 0); structOptions.dwKeyFrameEvery = 0; structOptions.dwQuality = 0; // 0 .. 10000 structOptions.dwFlags = 0; // AVICOMRPESSF_KEYFRAMES = 4 structOptions.dwBytesPerSecond = 0; structOptions.lpFormat = new IntPtr(0); structOptions.cbFormat = 0; structOptions.lpParms = new IntPtr(0); structOptions.cbParms = 0; structOptions.dwInterleaveEvery = 0; } //get the compressed stream int result = Avi.AVIMakeCompressedStream(out compressedStream, aviStream, ref structOptions, 0); if (result != 0) { throw new Exception("Exception in AVIMakeCompressedStream: " + result.ToString()); } SetFormat(compressedStream); }
/// <summary>Create a new stream</summary> private void CreateStream() { Avi.AVISTREAMINFO strhdr = new Avi.AVISTREAMINFO(); strhdr.fccType = Avi.mmioStringToFOURCC("vids", 0); strhdr.fccHandler = Avi.mmioStringToFOURCC("CVID", 0); strhdr.dwFlags = 0; strhdr.dwCaps = 0; strhdr.wPriority = 0; strhdr.wLanguage = 0; strhdr.dwScale = 1; strhdr.dwRate = frameRate; // Frames per Second strhdr.dwStart = 0; strhdr.dwLength = 0; strhdr.dwInitialFrames = 0; strhdr.dwSuggestedBufferSize = frameSize; //height_ * stride_; strhdr.dwQuality = -1; //default strhdr.dwSampleSize = 0; strhdr.rcFrame.top = 0; strhdr.rcFrame.left = 0; strhdr.rcFrame.bottom = (uint)height; strhdr.rcFrame.right = (uint)width; strhdr.dwEditCount = 0; strhdr.dwFormatChangeCount = 0; strhdr.szName = new UInt16[64]; int result = Avi.AVIFileCreateStream(aviFile, out aviStream, ref strhdr); if (result != 0) { throw new Exception("Exception in AVIFileCreateStream: " + result.ToString()); } if (writeCompressed) { CreateCompressedStream(false); } else { SetFormat(aviStream); } }