Workaround for have avi options button

This commit is contained in:
Jaex 2014-05-03 23:06:02 +03:00
parent 45a08f4350
commit 2d7840e08e
5 changed files with 28 additions and 5 deletions

View file

@ -39,5 +39,6 @@ public class AVIOptions
public int FPS;
public Size Size;
public bool ShowOptionsDialog;
public IntPtr ParentWindow;
}
}

View file

@ -206,7 +206,15 @@ public void Open()
if (Options.ShowOptionsDialog)
{
NativeMethods.AVISaveOptions(stream, ref Options.CompressOptions);
AVICOMPRESSOPTIONS options = new AVICOMPRESSOPTIONS();
options.handler = Options.CompressOptions.handler;
options.quality = Options.CompressOptions.quality;
options.flags = 8; // AVICOMPRESSF_VALID
int result = NativeMethods.AVISaveOptions(stream, ref options, Options.ParentWindow);
if (result == 1)
{
Options.CompressOptions = options;
}
}
// create compressed stream

View file

@ -379,7 +379,7 @@ public static void RestoreWindow(IntPtr handle)
/// <param name="options">Stream options.</param>
///
/// <returns>Returns TRUE if the user pressed OK, FALSE for CANCEL, or an error otherwise.</returns>
public static int AVISaveOptions(IntPtr stream, ref AVICOMPRESSOPTIONS options)
public static int AVISaveOptions(IntPtr stream, ref AVICOMPRESSOPTIONS options, IntPtr parentWindow)
{
IntPtr[] streams = new IntPtr[1];
IntPtr[] infPtrs = new IntPtr[1];
@ -394,7 +394,7 @@ public static int AVISaveOptions(IntPtr stream, ref AVICOMPRESSOPTIONS options)
infPtrs[0] = mem;
// show dialog with a list of available compresors and configuration
int ret = AVISaveOptions(IntPtr.Zero, 0, 1, streams, infPtrs);
int ret = AVISaveOptions(parentWindow, 0, 1, streams, infPtrs);
// copy from unmanaged memory to managed structure
options = (AVICOMPRESSOPTIONS)Marshal.PtrToStructure(mem, typeof(AVICOMPRESSOPTIONS));

View file

@ -121,7 +121,6 @@ public ScreenRecorder(int fps, float durationSeconds, Rectangle captureRectangle
CompressOptions = compressOptions,
FPS = FPS,
OutputPath = CachePath,
ShowOptionsDialog = OutputType == ScreenRecordOutput.AVI,
Size = CaptureRectangle.Size
};

View file

@ -28,6 +28,7 @@
using ScreenCaptureLib;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using UploadersLib;
@ -650,7 +651,21 @@ private void cbScreenRecorderOutput_SelectedIndexChanged(object sender, EventArg
private void btnScreenRecorderAVIOptions_Click(object sender, EventArgs e)
{
//NativeMethods.AVISaveOptions(IntPtr.Zero, ref TaskSettings.CaptureSettings.ScreenRecordAVIOptions);
AVIOptions options = new AVIOptions
{
CompressOptions = TaskSettings.CaptureSettings.ScreenRecordCompressOptions,
FPS = 10,
OutputPath = Program.ScreenRecorderCacheFilePath,
ParentWindow = this.Handle,
ShowOptionsDialog = true,
Size = new Size(100, 100)
};
// Ugly workaround for show AVI compression dialog
using (AVICache aviCache = new AVICache(options))
{
TaskSettings.CaptureSettings.ScreenRecordCompressOptions = options.CompressOptions;
}
}
private void cboEncoder_SelectedIndexChanged(object sender, EventArgs e)