Command Line

'==========================================================================
'
'  Copyright (c) On2 Technologies Inc. All Rights Reserved.
'
'--------------------------------------------------------------------------
'
'  File:        $Workfile$
'               $Revision$
'
'  Last Update: $DateUTC$
'
'--------------------------------------------------------------------------
Imports System
Imports System.Runtime.InteropServices 'COMException
Imports flixengine_com 'Flix Engine interfaces
Module cli_encode

    Sub PrintStackTrace(ByVal flix As Flix, ByVal e As COMException)
        Console.WriteLine(e)
        If Not flix Is Nothing
            PrintEncoderStatus(flix)
        End If
        Environment.Exit(e.ErrorCode)
    End Sub

    Sub Main()
        'Create an instance of the main engine interface, IFlix
        Dim flix
        Try
            flix = New Flix
        Catch e As COMException
            PrintStackTrace(Nothing,e)
        End Try

        'enable logging, 0=none(disable), 1=info, 2=error(asserts), 3=debug, 4=heavy
        'Try
        '   flix.setLogLevel(3)
        '   flix.setLogPath("\cli_encode_vbnet.log")
        'Catch e As COMException
        '   PrintStackTrace(flix,e)
        'End Try

        'Print some library information
        Try
            Console.WriteLine("Flix Engine Com Library. Flix Engine v" & _
                              flix.version & " COM v" & flix.com_version)
            Console.WriteLine(flix.copyright)
            Console.WriteLine()
        Catch e As COMException
            PrintStackTrace(flix,e)
        End Try

        If (System.Environment.GetCommandLineArgs.GetLength(0) < 3) Then
            Console.Error.WriteLine("usage: cli_encode_vbnet.exe <infile> <outfile>")
            Environment.Exit(1)
        End If

        'Set the source file
        Try
            Console.WriteLine("Input File  : " & _
                              System.Environment.GetCommandLineArgs(1))
            flix.setInputFile(System.Environment.GetCommandLineArgs(1))
        Catch e As COMException
            PrintStackTrace(flix,e)
        End Try

        'Retrieve the video options interface, IVideoOptions
        Try
            Dim vidopts As IVideoOptions
            vidopts = flix.videoOptions
            'Print input file information
            Console.WriteLine("Width:     ".PadLeft(24) & vidopts.getSourceWidth)
            Console.WriteLine("Height:    ".PadLeft(24) & vidopts.getSourceHeight)
            Console.WriteLine("Duration:  ".PadLeft(24) & flix.getSourceDuration & "ms")
        Catch e As COMException
            PrintStackTrace(flix,e)
        End Try

        'Set the destination file
        Try
            Console.WriteLine("Output File  : " & _
                              System.Environment.GetCommandLineArgs(2))
            flix.setOutputFile(System.Environment.GetCommandLineArgs(2))
        Catch e As COMException
            PrintStackTrace(flix,e)
        End Try

        'Options may be set and codecs/filters/muxers may be added prior to encode

        'Add the scale filter
        'Try
        '   Dim scaleFilter As IFlixPlgn
        '   scaleFilter = flix.addFilter(flix.FE2_FILTER_SCALE)
        '   scaleFilter.setParam(flix.FE2_SCALE_WIDTH, 240)
        '   scaleFilter.setParam(flix.FE2_SCALE_HEIGHT, 160)
        'Catch e As COMException
        '   PrintStackTrace(flix,e)
        'End Try

        'Add the vp6 codec.  Though it is the default,
        'you must add it in order to modify its settings.
        'Try
        '   Dim vp6Codec As IFlixPlgn
        '   vp6Codec = flix.addCodec(flix.FE2_CODEC_VP6)
        '   vp6Codec.setParam(flix.FE2_VP6_RC_MODE, _
        '       flixengine_com.FE2_VideoBitrateControls.VBR_1PASSControl)
        'Catch e As COMException
        '   PrintStackTrace(flix,e)
        'End Try

        'Use the FLV muxer (default)
        'Try
        '   Dim muxer As IFlixPlgn
        '   muxer = flix.addMuxer(flix.FE2_MUXER_FLV)
        'Catch e As COMException
        '   PrintStackTrace(flix,e)
        'End Try

        'Start the encode
        Try
            flix.encode()

            'Retrieve the encoding status interface, IEncodingStatus
            Dim encStatus As IEncodingStatus
            encStatus = flix.encodingStatus

            Console.WriteLine()
            Dim isRunning As Integer
            Do
                System.Threading.Thread.Sleep(500)
                isRunning = flix.isEncoderRunning
                Console.Write(vbCr & "Encoding..." & _
                              encStatus.percentComplete.ToString.PadLeft(3) & "% ")
            Loop Until (isRunning = 0)
        Catch e As COMException
            PrintStackTrace(flix,e)
        End Try

        Console.WriteLine("Done!")
        PrintEncoderStatus(flix)

        'Force the cleanup of IFlix.
        'Though this is not strictly necessary in this sample, as
        'it is about to exit, if the script is more involved it may be
        'necessary so the input file can be moved as destruction of
        'the underlying FLIX2HANDLE occurs within IFlix's destructor.
        'By explicitly defining a WeakReference and removing the strong
        'referenece to the flix object we are guaranteeing that it will
        'not survive the garbage collection.
        Dim wkref = New WeakReference(flix)
        flix = Nothing
        System.GC.Collect(System.GC.GetGeneration(wkref))
        System.GC.WaitForPendingFinalizers()
    End Sub

    Sub PrintEncoderStatus(ByVal flix As IFlix)
        Console.WriteLine()
        Console.WriteLine("Encoder Status")
        Try
            Console.WriteLine(" flix.getEncoderState: " & flix.getEncoderState)
            Dim flixerr As FE2_errno
            Dim syserr As Integer
            flix.errno_(flixerr, syserr)
            Console.WriteLine(" flix.errno_: flixerrno:" & _
                              flixerr & " syserrno:" & syserr)
        Catch e As COMException
            PrintStackTrace(Nothing,e)
        End Try
    End Sub

End Module

On2 Technologies, Inc Flix Engine Windows documentation, generated on Tue Nov 2 15:38:07 2010 by doxygen 1.6.1