using System;
using System.Runtime.InteropServices;
using flixengine_com;
namespace cli_encode
{
public class cli_encode
{
static object createInstance(string progid)
{
Type t = Type.GetTypeFromProgID(progid);
object o = null;
try {
o = Activator.CreateInstance(t);
} catch(Exception e) {
Console.Error.WriteLine("Error creating object instance: "+e);
Environment.Exit(1);
}
return o;
}
static void printStackTrace(IFlix flix, COMException e)
{
Console.WriteLine(e);
if(flix!=null) {
printEncoderStatus(flix);
}
Environment.Exit(e.ErrorCode);
}
[MTAThread]
static void Main(string[] args)
{
IFlix flix = (IFlix)createInstance("On2.FlixEngine");
try {
Console.WriteLine("Flix Engine COM library. Flix Engine v"+
flix.version()+" COM v"+flix.com_version());
Console.WriteLine(flix.copyright()+"\n");
} catch(COMException e) {
printStackTrace(flix,e);
}
if(args.Length<2) {
Console.Error.WriteLine(
"usage: cli_encode.exe <infile> <outfile>\n");
Environment.Exit(1);
}
try {
Console.WriteLine("Input file : "+args[0]);
flix.setInputFile(args[0]);
} catch(COMException e) {
printStackTrace(flix,e);
}
try {
IVideoOptions vidopts = flix.videoOptions();
Console.WriteLine("Width: ".PadLeft(24)+
vidopts.getSourceWidth());
Console.WriteLine("Height: ".PadLeft(24)+
vidopts.getSourceHeight());
Console.WriteLine("Duration: ".PadLeft(24)+
flix.getSourceDuration()+"ms");
} catch(COMException e) {
printStackTrace(flix,e);
}
try {
Console.WriteLine("Output File : "+args[1]);
flix.setOutputFile(args[1]);
} catch(COMException e) {
printStackTrace(flix,e);
}
try {
flix.encode();
IEncodingStatus encstatus = flix.encodingStatus();
Console.WriteLine();
bool ier;
do {
System.Threading.Thread.Sleep(500);
ier = flix.isEncoderRunning()==1;
Console.Write("\rEncoding..."+
encstatus.percentComplete().ToString().PadLeft(3)+"% ");
} while(ier);
} catch(COMException e) {
printStackTrace(flix,e);
}
Console.WriteLine("Done!");
printEncoderStatus(flix);
WeakReference wkref = new WeakReference(flix); flix = null;
System.GC.Collect(System.GC.GetGeneration(wkref));
System.GC.WaitForPendingFinalizers();
}
static void printEncoderStatus(IFlix flix)
{
Console.WriteLine("\nEncoder Status");
try {
Console.WriteLine(" flix.getEncoderState: "+flix.getEncoderState());
FE2_errno flixerr = FE2_errno.ErrNone;
int syserr = 0;
flix.errno_(out flixerr,out syserr);
Console.WriteLine(" flix.errno_: flixerrno:"+flixerr+
" syserrno:" + syserr);
} catch(COMException e) {
printStackTrace(null,e);
}
}
}
}