Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/post/src/tcl/savempg.tcl
3203 views
#/*****************************************************************************
# *
# *  Elmer, A Finite Element Software for Multiphysical Problems
# *
# *  Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland
# * 
# *  This program is free software; you can redistribute it and/or
# *  modify it under the terms of the GNU General Public License
# *  as published by the Free Software Foundation; either version 2
# *  of the License, or (at your option) any later version.
# * 
# *  This program is distributed in the hope that it will be useful,
# *  but WITHOUT ANY WARRANTY; without even the implied warranty of
# *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# *  GNU General Public License for more details.
# *
# *  You should have received a copy of the GNU General Public License
# *  along with this program (in file fem/GPL-2); if not, write to the 
# *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
# *  Boston, MA 02110-1301, USA.
# *
# *****************************************************************************/

#*******************************************************************************
#*
#*    MPG save utility routines
#*
#*******************************************************************************
#*
#*                     Author:       Mikko Lyly
#*
#*                    Address: CSC - IT Center for Science Ltd.
#*                                Keilaranta 14, P.O. BOX 405
#*                                  02101 Espoo, Finland
#*                                  Tel. +358 0 457 2723
#*                                Telefax: +358 0 457 2302
#*                              EMail: [email protected]
#*
#*                       Date: 04 Oct 2007
#*
#*                Modified by:
#*
#*       Date of modification:
#*
#*******************************************************************************
set savempg_start_stop_state "Start"
set savempg_append_state "-"
set savempg_bitrate 1000000
set savempg_method 0
set savempg_bframes 2
set savempg_gopsize 20
set MPGFileName "elmerpost.es"
#
# Helper procs:
#
proc savempg_start_stop {  } {
    global savempg_start_stop_state savempg_append_state \
	savempg_bitrate MPGFileName savempg_method savempg_bframes \
	savempg_gopsize

    if { $savempg_start_stop_state == "Start" } {

	if { $savempg_method == 0 } {
	    savempg codec mpg1
	}
	if { $savempg_method == 1 } {
	    savempg codec mpg2
	}
	if { $savempg_method == 2 } {
	    savempg codec mpg4
	}
	if { $savempg_method == 3 } {
	    savempg codec yuv4
	}

	savempg bitrate $savempg_bitrate

	savempg gopsize $savempg_gopsize

	savempg bframes $savempg_bframes

	savempg start $MPGFileName

	set savempg_start_stop_state "Stop"
        set savempg_append_state "Append"
    } else {
	savempg stop
	set savempg_start_stop_state "Start"
        set savempg_append_state "-"
    }
}

proc savempg_append { } {
    global savempg_start_stop_state

    if { $savempg_start_stop_state == "Stop" } {
	savempg append
    }
}

proc savempg_close { } {
    global savempg_start_stop_state savempg_append_state

    if { $savempg_start_stop_state == "Stop" } {
	savempg stop
	set savempg_start_stop_state "Start"
	set savempg_append_state "-"
    }
}
#
# Main control:
#
proc savempg.Control { } {
    global savempg_control savempg_start_stop_state savempg_append_state \
	savempg_bitrate MPGFileName savempg_method savempg_bframes \
	savempg_gopsize

    set savempg_control .savempg_control
    
    if { [winfo exists $savempg_control] } {
	destroy $savempg_control.title
	destroy $savempg_control.bitrate 
	destroy $savempg_control.file
	destroy $savempg_control.start_stop_button
	destroy $savempg_control.append_button
	destroy $savempg_control.buttons
	destroy $savempg_control.method_buttons
	destroy $savempg_control.gop
	destroy $savempg_control.bf
    } else {
	toplevel $savempg_control
	place_window $savempg_control
    }

    wm title $savempg_control "Savempg control"
    #
    # Codec:
    #
    frame $savempg_control.method_buttons
    label $savempg_control.method_buttons.label -width 8 -text "Codec:"
    radiobutton $savempg_control.method_buttons.mpg1 -value 0 \
	-variable savempg_method -text "MPG1"
    radiobutton $savempg_control.method_buttons.mpg2 -value 1 \
	-variable savempg_method -text "MPG2"
    radiobutton $savempg_control.method_buttons.mpg4 -value 2 \
	-variable savempg_method -text "MPG4"
    radiobutton $savempg_control.method_buttons.yuv4 -value 3 \
	-variable savempg_method -text "YUV4"
    pack $savempg_control.method_buttons.label \
	$savempg_control.method_buttons.mpg1 \
	$savempg_control.method_buttons.mpg2 \
	$savempg_control.method_buttons.mpg4 \
	$savempg_control.method_buttons.yuv4 \
	-side left -fill x

    pack $savempg_control.method_buttons -side top -expand 1 -fill x
    #
    #   Bitrate control:
    #
    frame $savempg_control.bitrate

    label $savempg_control.bitrate.label1 -width 8 -text "Bitrate:"
    entry $savempg_control.bitrate.value -width 10 \
	-textvariable savempg_bitrate
    label $savempg_control.bitrate.label2 \
	-text "bps (25 fps)"
    pack $savempg_control.bitrate.label1 $savempg_control.bitrate.value \
	$savempg_control.bitrate.label2 -side left 
    
    pack $savempg_control.bitrate -expand 1 -fill both -side top
    #
    #   GOP-size:
    #
    frame $savempg_control.gop

    label $savempg_control.gop.label1 -width 8 -text "GOP-size:"
    entry $savempg_control.gop.value1 -width 10 \
	-textvariable savempg_gopsize
    label $savempg_control.gop.label2 -text "frames max."

    pack $savempg_control.gop.label1 $savempg_control.gop.value1 \
	$savempg_control.gop.label2 -side left 
    
    pack $savempg_control.gop -fill both -side top
    #
    #   B-frames:
    #
    frame $savempg_control.bf

    label $savempg_control.bf.label1 -width 8 -text "B-size:"
    entry $savempg_control.bf.value1 -width 10 \
	-textvariable savempg_bframes
    label $savempg_control.bf.label2 -text "frames max."

    pack $savempg_control.bf.label1 $savempg_control.bf.value1 \
	$savempg_control.bf.label2 -side left 
    
    pack $savempg_control.bf -fill both -side top
    #
    # File name:
    #
    frame $savempg_control.file
    
    label $savempg_control.file.label -width 8 -text "File name:"
    entry $savempg_control.file.name -width 32 -textvariable MPGFileName
    button $savempg_control.file.button -text "Browse.." \
	-command { set MPGFileName [tk_getSaveFile -parent .savempg_control \
					-title "Save Video Clip To File"]; }
    pack $savempg_control.file.label $savempg_control.file.name \
	$savempg_control.file.button -side left -expand 1

    pack $savempg_control.file -expand 1 -fill both -side top
    #
    #   Buttons:
    #
    frame $savempg_control.buttons
    #
    # Close button:
    #
    button $savempg_control.buttons.close -text "Close" \
	-command { savempg_close; destroy $savempg_control }
    #
    # Start/stop:
    #
    frame $savempg_control.start_stop_button
    button $savempg_control.start_stop_button.start_stop \
	-textvariable savempg_start_stop_state  \
	-command { savempg_start_stop }
    pack $savempg_control.start_stop_button.start_stop \
	-side left -expand 1 -fill x
    #
    # Append:
    #
    frame $savempg_control.append_button
    button $savempg_control.append_button.append \
	-textvariable savempg_append_state \
	-command savempg_append
    pack $savempg_control.append_button.append -side left -expand 1 -fill x

    #
    # Pack:
    #
    pack $savempg_control.buttons.close -side right


    pack $savempg_control.start_stop_button -side top -expand 1 -fill x
    pack $savempg_control.append_button -side top -expand 1 -fill x
    pack $savempg_control.buttons -side top -fill x -expand 1
}