# =============================================================================
# MOUvie Converter                           Date: 2009-06-22    Version: 0.0.4
# -----------------------------------------------------------------------------
# Check Functions.
# -----------------------------------------------------------------------------
# Created by Marc Ulfig                            mail: m.ulfig@googlemail.com
#                                                  web :    http://marculfig.de
#                                                  Movie Converter home:
# Main Project Page: http://sourceforge.net/projects/mouvieconverter/
# or
# http://www.gnome-look.org/content/show.php/MOUvie+Converter?content=100060
# =============================================================================


# -----------------------------------------------------------------------------
# Check Basic Variables
# -----------------------------------------------------------------------------
Check_Basic_Variables ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Basic_Variables ()${CONFIG_TXT_NORMAL}"

    local Allowed_TV_Systems="PAL  NTSC  PAL_ONLY  NTSC_ONLY"
    local Allowed_Logfile="yes  no"
    local Allowed_Quant_Matrix="1  2  3  4  5  6  7  8  9  10"
    local Allowed_Multithreads="yes no"
    local Found_TV_Systems=FALSE
    local Found_Logfile=FALSE
    local Found_Quant_Matrix=FALSE
    local Found_Multithreads=FALSE
    local ErrorText="\n"

    for i in $Allowed_TV_Systems ; do
        if [ "$NTSC_OR_PAL" = "$i" ] && [ $Found_TV_Systems = FALSE ]; then
            Found_TV_Systems=TRUE
			break
        fi
    done

    for i in $Allowed_Logfile ; do
        if [ "$LOGFILE" = "$i" ] && [ $Found_Logfile = FALSE ]; then
            Found_Logfile=TRUE
			break
        fi
    done

    for i in $Allowed_Quant_Matrix ; do
        if [ $QUANT_MATRIX_DEFAULT = $i ] && [ $Found_Quant_Matrix = FALSE ]; then
            Found_Quant_Matrix=TRUE
			break
        fi
    done

    for i in $Allowed_Multithreads ; do
        if [ "$MULTITHREADS" = "$i" ] && [ $Found_Multithreads = FALSE ]; then
            Found_Multithreads=TRUE
			break
        fi
    done


    if [ $Found_Quant_Matrix = FALSE ] || [ $Found_Logfile = FALSE ] || [ $Found_TV_Systems = FALSE ] || [ $Found_Multithreads = FALSE ] ; then
        if [ $Found_TV_Systems = FALSE ] ; then
            ErrorText="${ErrorText}NTSC_OR_PAL=\"<b>$NTSC_OR_PAL</b>\"\n\tAllowed is: $Allowed_TV_Systems\n\n"
        fi

        if [ $Found_Logfile = FALSE ] ; then
            ErrorText="${ErrorText}LOGFILE=\"<b>$LOGFILE</b>\"\n\tAllowed is: $Allowed_Logfile\n\n"
        fi

        if [ $Found_Quant_Matrix = FALSE ] ; then
            ErrorText="${ErrorText}QUANT_MATRIX_DEFAULT=\"<b>$QUANT_MATRIX_DEFAULT</b>\"\n\tAllowed is: $Allowed_Quant_Matrix\n\n"
        fi

        if [ $Found_Multithreads = FALSE ] ; then
            ErrorText="${ErrorText}MULTITHREADS=\"<b>$MULTITHREADS</b>\"\n\tAllowed is: $Allowed_Multithreads\n\n"
        fi

        Message_Error "$Lang_Error_Variables_Title" "$Lang_Error_Variables_Text\n\n" "$ErrorText $Lang_Error_Variables_Text2"
    fi
}


# -----------------------------------------------------------------------------
# Check and Set Logfile Management
# -----------------------------------------------------------------------------
Check_Set_LogFile ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Set_LogFile ()${CONFIG_TXT_NORMAL}"

	if [ "$LOGFILE" = "yes" ] ; then
	    local LS_BIN=`which ls`

	    # check log dir
	    if [ ! -d ${CONFIG_TMP} ] ; then
	        mkdir ${CONFIG_TMP}
	    fi

	    # find all logsfiles inside and delete the oldest before we create the new one
	    local FILES=`$LS_BIN ${CONFIG_TMP}/mouvie.*.log`
	
	    local COUNTER_FILE=0
	    for i in $FILES ; do
	        COUNTER_FILE=`expr $COUNTER_FILE + 1`
	    done

	    if [ $COUNTER_FILE -gt $CONFIG_MAX_LOGFILES ] ; then
	        for i in $FILES ; do
	            local OLDEST_FILE="$i"
	            break
	        done

	        rm "$OLDEST_FILE"
	    fi

	    # get linux life time in seconds
	    local DATE=`date "+%s"`

	    LOG_FILE="${CONFIG_TMP}/mouvie.${DATE}.log"
	fi
}


# -----------------------------------------------------------------------------
# Check for the required Software
# -----------------------------------------------------------------------------
Check_Required_Software ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Required_Software ()${CONFIG_TXT_NORMAL}"

    local log=''

    # lsdvd
    CHECK_LSDVD=`which lsdvd | grep -c lsdvd`
    if [ $CHECK_LSDVD -gt 0 ]; then		# if return value is not 0 packages is not present
	    CHECK_LSDVD=TRUE
        local log="        Found: LSDVD\n"
    else
        Message_Error "$Lang_Missing_Software_Title" "$Lang_Missing_Software_Text_lsdvd"
    fi

    # mencoder
    CHECK_MENCODER=`which mencoder | grep -c mencoder`
    if [ $CHECK_MENCODER -gt 0 ]; then
        CHECK_MENCODER=TRUE
        local log="$log        Found: MEncoder\n"
    else
        Message_Error "$Lang_Missing_Software_Title" "$Lang_Missing_Software_Text_mencoder"
    fi

    # ffmpeg
    CHECK_FFMPEG=`which ffmpeg | grep -c ffmpeg`
    if [ $CHECK_FFMPEG -gt 0 ]; then
        CHECK_FFMPEG=TRUE
        local log="$log        Found: FFMPEG\n"

        CHECK_FFMPEG_XVID=`ffmpeg -formats 2>&1 | grep -c "EV    xvid"`
        CHECK_FFMPEG_AAC=`ffmpeg -formats 2>&1 | grep -c "DEA    aac"`
        CHECK_FFMPEG_MPEGTS=`ffmpeg -formats 2>&1 | grep -c "DEVSDT mpeg2video"`
        if [ "$CHECK_FFMPEG_XVID" -gt 0 ]   ; then CHECK_FFMPEG_XVID=TRUE   ; fi
        if [ "$CHECK_FFMPEG_AAC" -gt 0 ]    ; then CHECK_FFMPEG_AAC=TRUE    ; fi
        if [ "$CHECK_FFMPEG_MPEGTS" -gt 0 ] ; then CHECK_FFMPEG_MPEGTS=TRUE ; fi
    else
        Message_Error "$Lang_Missing_Software_Title" "$Lang_Missing_Software_Text_ffmpeg"
    fi

    # mediainfo
    CHECK_MEDIAINFO=`which mediainfo | grep -c mediainfo`
    if [ "$CHECK_MEDIAINFO" -gt 0 ]; then
    	CHECK_MEDIAINFO=TRUE
        local log="$log        Found: MediaInfo\n"
    else
        Message_Error "$Lang_Missing_Software_Title" "$Lang_Missing_Software_Text_mediainfo"
    fi


    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        (
        echo "Check_Required_Software()"
        echo -e "$log"
        ) >> "$LOG_FILE"
    fi

}


# -----------------------------------------------------------------------------
# Check for valid video input types in each file
# -----------------------------------------------------------------------------
Check_Valid_Video_Input_Files ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Valid_Video_Input_Files ()${CONFIG_TXT_NORMAL}"

    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        echo "Check_Valid_Video_Input_Files()" >> "$LOG_FILE"
    fi


    local found=''
    local input_format=`mediainfo --Inform="General;%Format%" "$1" | tr "[:upper:]" "[:lower:]" | tr -d " "`

    MIMETYPE=`file -bi "$1"`
    MIMETYPE2=`file -b "$1"`

    for format in $CONFIG_ALLOWD_G_FORMATS ; do
        format=`echo $format | tr "[:upper:]" "[:lower:]"`
        if [ "$format" = "$input_format" ] ; then
            found="TRUE"

            # Logfile Output
            if [ "$LOGFILE" = "yes" ] ; then
                (
                echo "        MOVIE       : $1"
                echo "        MOVIE FORMAT: $input_format found in list"
                echo "-------------------------------------------------------------------------------"
                echo "    OUTPUT of MEDIAINFO"
                echo "-------------------------------------------------------------------------------"
                ) >> "$LOG_FILE"
                mediainfo $1 |tr -d '\r' >> "$LOG_FILE"
                (
                echo "-------------------------------------------------------------------------------"
                ) >> "$LOG_FILE"
            fi
            return
        fi
    done

    if [ "$found" != "TRUE" ]; then
        # Logfile Output
        if [ "$LOGFILE" != "yes" ] ; then
        	LOGFILE="yes"
			Check_Set_LogFile
			LOG_HEADER
		fi
        if [ "$LOGFILE" = "yes" ] ; then
            (
            echo "        MOVIE FORMAT : $input_format is invalid"
            echo "            MIMETYPE : $MIMETYPE"
            echo "            MIMETYPE2: $MIMETYPE2"
            echo
            echo "-------------------------------------------------------------------------------"
            echo "OUTPUT of MEDIAINFO"
            echo "-------------------------------------------------------------------------------"
            ) >> "$LOG_FILE"
            mediainfo -full $1 | tr -d '\r' >> "$LOG_FILE"
            (
            echo "-------------------------------------------------------------------------------"
            ) >> "$LOG_FILE"
        fi
        Message_Error_Invalid_Input_Type "$MIMETYPE" "$MIMETYPE2" $1
    fi
}


# -----------------------------------------------------------------------------
# Selecting Video informations
# -----------------------------------------------------------------------------
Check_Source_Video_Information ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Source_Video_Information ()${CONFIG_TXT_NORMAL}"

    # getting GENERAL infos
    local inform="General;%FileExtension%|%Format%|%AudioCount%|%Duration%|%Duration/String1%|"
    local general=`mediainfo --Inform="$inform" "$1"`

    # getting VIDEO infos
    local inform="Video;%FrameRate%|%FrameCount%|%BitRate%|%DisplayAspectRatio/String%|%DisplayAspectRatio%|%Width%|%Height%|%Codec%|%ScanType%|"
    local video=`mediainfo --Inform="$inform" "$1"`

    # getting AUDIO infos
    local inform="Audio;%Channels%|%ID%|%Video_Delay%|%BitRate%|%SamplingRate%|%Codec%|%ID/String%|%Language/String%|%Title%|\n"
    local audio=`mediainfo --Inform="$inform" "$1"`

    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        echo "Check_Source_Video_Information ()" >> "$LOG_FILE"
    fi

    IN_FILE_EXTENSION=`echo "$general " | awk -F "|" '{print $1}'`
    IN_MAIN_FORMAT=`echo "$general " | awk -F "|" '{print $2}'`
    IN_AUDIO_COUNT=`echo "$general " | awk -F "|" '{print $3}'`
    IN_PLAYTIME=`echo "$general " | awk -F "|" '{print $4}'`
    IN_PLAYTIME2=`echo "$general " | awk -F "|" '{print $5}'`
    IN_PLAYTIME2=${IN_PLAYTIME2/h/}
    IN_PLAYTIME2=${IN_PLAYTIME2/mn/}
    IN_PLAYTIME2=${IN_PLAYTIME2/s/}

    IN_FPS=`echo "$video " | awk -F "|" '{print $1}'`
    IN_TOTAL_FRAMES=`echo "$video " | awk -F "|" '{print $2}'`
    IN_BITRATE=`echo "$video " | awk -F "|" '{print $3}'`
    IN_ASPECT_RATIO=`echo "$video " | awk -F "|" '{print $4}'`
    IN_ASPECT_RATIO_INT=`echo "$video " | awk -F "|" '{print $5}'`
    IN_SIZE_WIDTH=`echo "$video " | awk -F "|" '{print $6}'`
    IN_SIZE_HEIGHT=`echo "$video " | awk -F "|" '{print $7}'`
    IN_VIDEO_CODEC=`echo "$video " | awk -F "|" '{print $8}'`
    IN_VIDEO_INTERLACE=`echo "$video " | awk -F "|" '{print $9}'`

    IN_AUDIO_CHANNELS=`echo "$audio " | awk -F "|" '{print $1}'`
    IN_AUDIO_STREAMID=`echo "$audio " | awk -F "|" '{print $2}'`
    IN_AUDIO_DELAY=`echo "$audio " | awk -F "|" '{print $3}'`
    IN_AUDIO_BITRATE=`echo "$audio " | awk -F "|" '{print $4}'`
    IN_AUDIO_SAMPLERATE=`echo "$audio " | awk -F "|" '{print $5}'`
    IN_AUDIO_CODEC=`echo "$audio " | awk -F "|" '{print $6}'`
    IN_AUDIO_STREAMID_HEX=`echo "$audio " | awk -F "|" '{print $7}'`
    IN_AUDIO_LANGUAGE=`echo "$audio " | awk -F "|" '{print $8}'`
    IN_AUDIO_TITLE=`echo "$audio " | awk -F "|" '{print $9}'`

    #echo "IN_FILE_EXTENSION     : $IN_FILE_EXTENSION"
    #echo "IN_MAIN_FORMAT        : $IN_MAIN_FORMAT"
    #echo "IN_PLAYTIME           : $IN_PLAYTIME"
    #echo "IN_PLAYTIME2          : $IN_PLAYTIME2"
    #echo "IN_FPS                : $IN_FPS"
    #echo "IN_TOTAL_FRAMES       : $IN_TOTAL_FRAMES"
    #echo "IN_BITRATE            : $IN_BITRATE"
    #echo "IN_ASPECT_RATIO       : $IN_ASPECT_RATIO"
    #echo "IN_ASPECT_RATIO_INT   : $IN_ASPECT_RATIO_INT"
    #echo "IN_SIZE_WIDTH         : $IN_SIZE_WIDTH"
    #echo "IN_SIZE_HEIGHT        : $IN_SIZE_HEIGHT"
    #echo "IN_VIDEO_CODEC        : $IN_VIDEO_CODEC"
    #echo "IN_VIDEO_INTERLACE    : $IN_VIDEO_INTERLACE"
    #echo "IN_AUDIO_COUNT        : $IN_AUDIO_COUNT"
    #echo "IN_AUDIO_CHANNELS     : $IN_AUDIO_CHANNELS"
    #echo "IN_AUDIO_STREAMID     : $IN_AUDIO_STREAMID"
    #echo "IN_AUDIO_DELAY        : $IN_AUDIO_DELAY"
    #echo "IN_AUDIO_BITRATE      : $IN_AUDIO_BITRATE"
    #echo "IN_AUDIO_SAMPLERATE   : $IN_AUDIO_SAMPLERATE"
    #echo "IN_AUDIO_CODEC        : $IN_AUDIO_CODEC"
    #echo "IN_AUDIO_STREAMID_HEX : $IN_AUDIO_STREAMID_HEX"
    #echo "IN_AUDIO_LANGUAGE     : $IN_AUDIO_LANGUAGE"
    #echo "IN_AUDIO_TITLE        : $IN_AUDIO_TITLE"
    #echo ; echo

    if [ $IN_AUDIO_COUNT -gt 1 ] ; then
    OLDIFS="$IFS"
IFS='
'
        # put all info in arrays
        local counter=0
        local tmp=$IN_AUDIO_CHANNELS
        for i in $tmp ; do
            IN_AUDIO_CHANNELS[$counter]="$i"
            counter=`expr $counter + 1`
        done

        local tmp=$IN_AUDIO_STREAMID
        local tmp2=$IN_AUDIO_STREAMID_HEX
        if [ "$tmp" = "" ] ; then
            local counter=1
            while [ $counter -le $IN_AUDIO_COUNT ] ; do
                tmp="$tmp
$counter"
                counter=`expr $counter + 1`
            done
        fi        
        local counter=0
        for i in $tmp ; do
            IN_AUDIO_STREAMID[$counter]="$i"

            if [ $counter = 0 ] ; then
                local tmp3=`echo $tmp2 | awk '{print $2}'`
                tmp3=${tmp3/(/}
                tmp3=${tmp3/)/}
                IN_AUDIO_STREAMID_HEX[$counter]="$tmp3"
            fi
            if [ $counter = 1 ] ; then
                local tmp3=`echo $tmp2 | awk '{print $4}'`
                tmp3=${tmp3/(/}
                tmp3=${tmp3/)/}
                IN_AUDIO_STREAMID_HEX[$counter]="$tmp3"
            fi
            if [ $counter = 2 ] ; then
                local tmp3=`echo $tmp2 | awk '{print $6}'`
                tmp3=${tmp3/(/}
                tmp3=${tmp3/)/}
                IN_AUDIO_STREAMID_HEX[$counter]="$tmp3"
            fi
            if [ $counter = 3 ] ; then
                local tmp3=`echo $tmp2 | awk '{print $8}'`
                tmp3=${tmp3/(/}
                tmp3=${tmp3/)/}
                IN_AUDIO_STREAMID_HEX[$counter]="$tmp3"
            fi
            if [ $counter = 4 ] ; then
                local tmp3=`echo $tmp2 | awk '{print $10}'`
                tmp3=${tmp3/(/}
                tmp3=${tmp3/)/}
                IN_AUDIO_STREAMID_HEX[$counter]="$tmp3"
            fi
            counter=`expr $counter + 1`
        done

        local counter=0
        local tmp=$IN_AUDIO_DELAY
        for i in $tmp ; do
            IN_AUDIO_DELAY[$counter]="$i"
            counter=`expr $counter + 1`
        done

        local counter=0
        local tmp=$IN_AUDIO_BITRATE
        for i in $tmp ; do
            IN_AUDIO_BITRATE[$counter]="${i:0:3}"
            counter=`expr $counter + 1`
        done
        local counter=0
        local tmp=$IN_AUDIO_SAMPLERATE
        for i in $tmp ; do
            IN_AUDIO_SAMPLERATE[$counter]="$i"
            counter=`expr $counter + 1`
        done
        local counter=0
        local tmp=$IN_AUDIO_CODEC
        for i in $tmp ; do
            if [ "$i" = "MPA1L2" ] ; then
                IN_AUDIO_CODEC[$counter]="MP2"
            elif [ "$i" = "MPA1L3" ] ; then
                IN_AUDIO_CODEC[$counter]="MP3"
            elif [ "$i" = "AC3" ] ; then
                IN_AUDIO_CODEC[$counter]="AC3"
            elif [ "$i" = "DTS" ] ; then
                IN_AUDIO_CODEC[$counter]="DTS"
            else
                IN_AUDIO_CODEC[$counter]="$i"
            fi
            counter=`expr $counter + 1`
        done
        local counter=0
        local tmp=$IN_AUDIO_LANGUAGE
        for i in $tmp ; do
            IN_AUDIO_LANGUAGE[$counter]="$i"
            counter=`expr $counter + 1`
        done

        local counter=0
#        IFS='
#'
        for i in $IN_AUDIO_TITLE ; do
            IN_AUDIO_TITLE[$counter]="$i"
            counter=`expr $counter + 1`
        done
#        IFS=' '

        # Logfile Output
        if [ "$LOGFILE" = "yes" ] ; then
            echo "    Found multiple audio track in source file: $IN_AUDIO_COUNT" >> "$LOG_FILE"
        fi
    else
        IN_AUDIO_BITRATE=${IN_AUDIO_BITRATE:0:3}
    fi


    # Input Video TV-Sytem
    if [ "$IN_FPS" = "25.000" ] ; then
        IN_TV_SYSTEM="PAL"
        IN_FPS="25"
        # Logfile Output
        if [ "$LOGFILE" = "yes" ] ; then
            echo "    Movie is: $IN_TV_SYSTEM - $IN_FPS" >> "$LOG_FILE"
        fi
    fi
    if [ "$IN_FPS" = "23.976" ] || [ "$IN_FPS" = "29.970" ] ; then
        IN_TV_SYSTEM="NTSC"
        if [ "$IN_FPS" = "23.976" ] ; then
            IN_FPS="24000/1001"
        fi
        if [ "$IN_FPS" = "29.970" ] ; then
            IN_FPS="30000/1001"
        fi
        # Logfile Output
        if [ "$LOGFILE" = "yes" ] ; then
            echo "    Movie is: $IN_TV_SYSTEM - $IN_FPS" >> "$LOG_FILE"
        fi
    fi

    # correction for Aspect Ratio (the easy and ugly way)
    if [ "$IN_ASPECT_RATIO_INT" != "1.333" ] && [ "$IN_ASPECT_RATIO_INT" != "1.777" ] ; then
        local res43=$(echo  "$IN_ASPECT_RATIO_INT <=  1.450" | bc)
        local res169=$(echo  "$IN_ASPECT_RATIO_INT >   1.550" | bc)
        #local resWide=$(echo  "$IN_ASPECT_RATIO_INT >= 2.100" | bc)

        IN_ASPECT_RATIO_ORI="$IN_ASPECT_RATIO"

        if [ $res43 = 1 ] && [ $res169 = 0 ] ; then
            IN_ASPECT_RATIO="4/3"
        else
            IN_ASPECT_RATIO="16/9"
        fi

        # Logfile Output
        if [ "$LOGFILE" = "yes" ] ; then
            echo "    Correcting Aspect Ratio: Corected: $IN_ASPECT_RATIO ($IN_ASPECT_RATIO_INT)      original: $IN_ASPECT_RATIO_ORI" >> "$LOG_FILE"
        fi
    fi

    # setting Video OUT aspect to Video IN aspect - exception SVCD and VCD (they know only 4/3)
    if [ "$VIDEO_OUT_TYPE" = "VCD" ] || [ "$VIDEO_OUT_TYPE" = "SVCD" ] ; then
        VIDEO_OUT_ASPECT="4/3"
    else
        VIDEO_OUT_ASPECT=$IN_ASPECT_RATIO
    fi
    #echo
    #echo "IN_ASPECT_RATIO_ORI    : $IN_ASPECT_RATIO_ORI"
    #echo "IN_ASPECT_RATIO        : $IN_ASPECT_RATIO"
    #echo "IN_ASPECT_RATIO_INT    : $IN_ASPECT_RATIO_INT"
    #echo "VIDEO_OUT_ASPECT       : $VIDEO_OUT_ASPECT"
    #echo
    local counter=0
    while [ $counter -lt $IN_AUDIO_COUNT ] ; do
        echo "C:$counter  SID:${IN_AUDIO_STREAMID[$counter]}  HEX:${IN_AUDIO_STREAMID_HEX[$counter]}  CODEC:${IN_AUDIO_CODEC[$counter]}  CH:${IN_AUDIO_CHANNELS[$counter]}  BIT:${IN_AUDIO_BITRATE[$counter]}   RATE:${IN_AUDIO_SAMPLERATE[$counter]}   DELEY:${IN_AUDIO_DELAY[$counter]}   LANG:${IN_AUDIO_LANGUAGE[$counter]}   TITLE:${IN_AUDIO_TITLE[$counter]}"
        counter=`expr $counter + 1`
    done
    IFS="$OLDIFS"
#exit
}


# -----------------------------------------------------------------------------
# Check for different tv systems
# -----------------------------------------------------------------------------
Check_Different_TV_Sytems ()
{  
    echo -e "${CONFIG_TXT_COLOR}Check_Different_TV_Sytems ()${CONFIG_TXT_NORMAL}"

    ADDITIONAL_VF_PARAMETER=''
    ADDITIONAL_PARAMETER=''

    # if $VIDEO_OUT_TYPE = VCD or DVD and $VIDEO_OUT_SYSTEM = NTSC
    # we can ask for telecine convertion
    if [ "$VIDEO_OUT_SYSTEM" = "NTSC" ] ; then
        if [ "$VIDEO_OUT_TYPE" = "VCD" ] || [ "$VIDEO_OUT_TYPE" = "DVD" ] ; then

            # if we TELECINE
            if [ "$DVD_NTSC_FORMAT" = "TELECINE" ] ; then
                VIDEO_OUT_FPS="24000/1001"
                VIDEO_OUT_KEY_INTERVAL="15"
                ADDITIONAL_VF_PARAMETER="pullup,softskip"
                ADDITIONAL_PARAMETER="-fps $IN_FPS"
            fi # -> END of Telecine pulldown

            # if NORMAL we have to optimize convertion
            if [ "$DVD_NTSC_FORMAT" = "NORMAL" ] ; then

                # if IN and OUT are video is NTSC and fps is 29,97 and OUT is 23.976
                if [ "$IN_TV_SYSTEM" = "NTSC" ] && [ "$VIDEO_OUT_SYSTEM" = "NTSC" ] && [ "$IN_FPS" = "30000/1001" ] && [ "$VIDEO_OUT_FPS" = "24000/1001" ] ; then
                    ADDITIONAL_PARAMETER="-fps $IN_FPS"
                fi

                # if IN and OUT are video is NTSC and fps is 23,976 and OUT is 30.97
                if [ "$IN_TV_SYSTEM" = "NTSC" ] && [ "$VIDEO_OUT_SYSTEM" = "NTSC" ] && [ "$IN_FPS" = "24000/1001" ] && [ "$VIDEO_OUT_FPS" = "30000/1001" ] ; then
                    ADDITIONAL_VF_PARAMETER="pullup,softskip"
                    ADDITIONAL_PARAMETER="-noskip -fps $IN_FPS"
                    VIDEO_OUT_FORMAT="$VIDEO_OUT_FORMAT:telecine"
                fi
            fi # -> END of NORMAL

        fi
    fi # -> END of NTSC Video out


    # if we have NTSC input and and PAL output
    # we have do change some settings for a better result    
    if [ "$IN_TV_SYSTEM" = "NTSC" ] && [ "$VIDEO_OUT_SYSTEM" = "PAL" ] ; then
        if [ "$IN_FPS" = "23.976" ] ; then
            VIDEO_OUT_FORMAT="$VIDEO_OUT_FORMAT:film2pal:tsaf"
            ADDITIONAL_PARAMETER="-noskip"
        fi

        if [ "$IN_FPS" = "29.970" ] ; then
            VIDEO_OUT_FORMAT="$VIDEO_OUT_FORMAT:film2pal:tsaf:telecine"
            ADDITIONAL_PARAMETER="-noskip"
        fi
    fi
}


# -----------------------------------------------------------------------------
# Check multiple Audio tracks
# -----------------------------------------------------------------------------
Check_Multiple_Audio_Tracks ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Multiple_Audio_Tracks ()${CONFIG_TXT_NORMAL}"

    if [ $IN_AUDIO_COUNT -gt 1 ] ; then
        Select_Multiple_Audio_Tracks               

        # Set options for convert command
        AUDIO_OUT_STREAM_ID="${IN_AUDIO_STREAMID[$AUDIO_OUT_STREAM_NO]}"
        AUDIO_OUT_STREAM_ID_HEX="${IN_AUDIO_STREAMID_HEX[$AUDIO_OUT_STREAM_NO]}"
    else
        AUDIO_OUT_STREAM_ID="$IN_AUDIO_STREAMID"
        AUDIO_OUT_STREAM_ID_HEX="$IN_AUDIO_STREAMID_HEX"
    fi

    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        (
        echo "Check_Multiple_Audio_Tracks ()"
        echo "        AUDIO_OUT_STREAM_ID:     $AUDIO_OUT_STREAM_ID"
        echo "        AUDIO_OUT_STREAM_ID_HEX: $AUDIO_OUT_STREAM_ID_HEX"
        ) >> "$LOG_FILE"
    fi
}


# -----------------------------------------------------------------------------
# Check if Source and Destination Audio is the same
# -----------------------------------------------------------------------------
Check_Audio_Source_and_Destination ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Audio_Source_and_Destination ()${CONFIG_TXT_NORMAL}"

    if [ $IN_AUDIO_COUNT -gt 1 ] && [ ! $USE_LAST_PROFILE ] ; then
        if [ "${IN_AUDIO_CODEC[$AUDIO_OUT_STREAM_NO]}" = "$AUDIO_OUT_CODEC" ] \
        && [ "${IN_AUDIO_SAMPLERATE[$AUDIO_OUT_STREAM_NO]}" = "$AUDIO_OUT_RATE" ] ; then
            Message_Same_Audio_Format

            local ret=$?

            # Logfile Output
            if [ "$LOGFILE" = "yes" ] ; then
                echo "Check_Audio_Source_and_Destination (): return: $ret    MULTIPLE FOUND" >> "$LOG_FILE"
            fi

            if [ $ret = 1 ] ; then
                return 1
            else
                return 0
            fi
        fi
    else
        if [ "$IN_AUDIO_CODEC" = "$AUDIO_OUT_CODEC" ] \
        && [ "$IN_AUDIO_SAMPLERATE" = "$AUDIO_OUT_RATE" ] && [ ! $USE_LAST_PROFILE ] ; then
            Message_Same_Audio_Format

            local ret=$?

            # Logfile Output
            if [ "$LOGFILE" = "yes" ] ; then
                echo "Check_Audio_Source_and_Destination (): return: $ret    SINGLE FOUND" >> "$LOG_FILE"
            fi

            if [ $ret = 1 ] ; then
                return 1
            else
                return 0
            fi
        fi
    fi    

    if [ -n $USE_LAST_PROFILE ] && [ "$AUDIO_OUT_COPY" = "TRUE" ] ; then
        if [ $IN_AUDIO_COUNT -gt 1 ] ; then
            if [ "${IN_AUDIO_CODEC[$AUDIO_OUT_STREAM_NO]}" = "$AUDIO_OUT_CODEC" ] \
            && [ "${IN_AUDIO_SAMPLERATE[$AUDIO_OUT_STREAM_NO]}" = "$AUDIO_OUT_RATE" ] ; then
                # Logfile Output
                if [ "$LOGFILE" = "yes" ] ; then
                    echo "Check_Audio_Source_and_Destination (): return: $ret    MULTIPLE FOUND - COPY" >> "$LOG_FILE"
                fi

                return 1
            fi
        else
            if [ "$IN_AUDIO_CODEC" = "$AUDIO_OUT_CODEC" ] \
            && [ "$IN_AUDIO_SAMPLERATE" = "$AUDIO_OUT_RATE" ] ; then
                # Logfile Output
                if [ "$LOGFILE" = "yes" ] ; then
                    echo "Check_Audio_Source_and_Destination (): return: $ret    SINGLE FOUND - COPY" >> "$LOG_FILE"
                fi

                return 1
            fi
        fi
    fi

     # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        echo "Check_Audio_Source_and_Destination (): NOT FOUND" >> "$LOG_FILE"
    fi

    return 0
}


# -----------------------------------------------------------------------------
# Check for 6-channel audio input
# -----------------------------------------------------------------------------
Check_Audio_Input_For_Surround_Sound ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Audio_Input_For_Surround_Sound ()${CONFIG_TXT_NORMAL}"

    if [ $IN_AUDIO_COUNT -gt 1 ] && [ "${IN_AUDIO_CODEC[$AUDIO_OUT_STREAM_NO]}" = "$AUDIO_OUT_CODEC" ] ; then
        if [ ${IN_AUDIO_CHANNELS[$AUDIO_OUT_STREAM_NO]} = 6 ] ; then
             # Logfile Output
            if [ "$LOGFILE" = "yes" ] ; then
                echo "Check_Audio_Input_For_Surround_Sound (): 6 CHANNELS FOUND - MULTIPLE" >> "$LOG_FILE"
            fi

            return 1
        fi
    elif [ "$IN_AUDIO_CODEC" = "$AUDIO_OUT_CODEC" ] ; then
        if [ $IN_AUDIO_CHANNELS = 6 ] ; then
            if [ "$LOGFILE" = "yes" ] ; then
                echo "Check_Audio_Input_For_Surround_Sound (): 6 CHANNELS FOUND - SINGLE" >> "$LOG_FILE"
            fi
            return 2
        fi
    fi    

    if [ "$LOGFILE" = "yes" ] ; then
       echo "Check_Audio_Input_For_Surround_Sound (): NOT FOUND" >> "$LOG_FILE"
    fi

    return 0
}

# -----------------------------------------------------------------------------
# Check for audio delay
# -----------------------------------------------------------------------------
Check_Audio_Delay ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Audio_Delay ()${CONFIG_TXT_NORMAL}"

    MC_AUDIO_DELAY=''

    if [ $IN_AUDIO_COUNT -gt 1 ] && [ "${IN_AUDIO_DELAY[$AUDIO_OUT_STREAM_NO]}" != "0" ] ; then
        MC_AUDIO_DELAY="${IN_AUDIO_DELAY[$AUDIO_OUT_STREAM_NO]}"
    elif [ "$IN_AUDIO_DELAY" != "0" ] ; then
        MC_AUDIO_DELAY="$IN_AUDIO_DELAY"
    fi    

    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        echo "Check_Audio_Delay () : Audio Delay = $IN_AUDIO_DELAY" >> "$LOG_FILE"
    fi
}


# -----------------------------------------------------------------------------
# FFMPEG: Check Audio stream ID
# -----------------------------------------------------------------------------
Check_FFMPEG_Audio_Stream_IDs ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_FFMPEG_Audio_Stream_IDs ()${CONFIG_TXT_NORMAL}"

    if [ -n "$AUDIO_OUT_STREAM_NO" ] ; then 
        if [ "$AUDIO_OUT_STREAM_ID_HEX" != "" ] ; then
            FF_AUDIO_STREAM_ID=`ffmpeg -i "$1" 2>&1 | grep -i $AUDIO_OUT_STREAM_ID_HEX | awk -vRS='\r' '$1 ~ /Stream/ {gsub(/\[/," \["); gsub(/#0./,""); print $2 ; fflush();}'`
        else
            FF_AUDIO_STREAM_ID=$AUDIO_OUT_STREAM_ID
        fi
    fi

    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        echo "Check_FFMPEG_Audio_Stream_IDs () : FF_AUDIO_STREAM_ID = $FF_AUDIO_STREAM_ID" >> "$LOG_FILE"
    fi
}


# -----------------------------------------------------------------------------
# checks for free space on device/folder
# -----------------------------------------------------------------------------
Check_Free_Disk_Space ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_Free_Disk_Space ()${CONFIG_TXT_NORMAL}"

    local dirname=`dirname "$1"`

    local freespace=`df "$dirname" | awk '{print $4}' | tr '\n' '|' | awk -F "|" '{print $2}'`
    local needspace=$(($2 * 2))

    SPACE_FREE_ON_DISK=$freespace
    SPACE_NEEDED_ON_DISK=$needspace
    if [ $freespace -gt $needspace ] ; then
        return 1
    fi

    return 0
}


# -----------------------------------------------------------------------------
# Check numbers of CPU Threads
# -----------------------------------------------------------------------------
Check_CPU_THREADS ()
{
    echo -e "${CONFIG_TXT_COLOR}Check_CPU_THREADS ()${CONFIG_TXT_NORMAL}"

	if [ "$MULTITHREADS" = "yes" ] ; then
		local CORES_detect
		local CORES_use

		CORES_detect=`grep cores /proc/cpuinfo | tr -d '[:blank:]' | tr -d '[:alpha:]' | tr -d '[:punct:]'`

		for i in $CORES_detect ; do
			CORES_detect=$i
		done

		CORES_use=$CORES_detect

		if [ "$CORES_detect" -gt 4 ] ; then
			CORES_use=4
		fi

		if [ "$CORES_detect" -lt 1 ] ; then
			CORES_use=1
			MC_OPTS_CPU_THREADS=""
			FF_OPTS_CPU_THREADS=""
		else
			MC_OPTS_CPU_THREADS=$CORES_use
			FF_OPTS_CPU_THREADS=$CORES_use
		fi

		local logtext="Cores = $CORES_detect detected => $CORES_use used"
	else
		local logtext="Multithreads DISABLED"
	fi

    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        echo "Check_CPU_THREADS () : $logtext" >> "$LOG_FILE"
    fi
}

# -----------------------------------------------------------------------------
# LOG
# -----------------------------------------------------------------------------
LOG_HEADER ()
{
    echo -e "${CONFIG_TXT_COLOR}LOG_HEADER ()${CONFIG_TXT_NORMAL}"

    timestamp=`date`
    (
    echo "==============================================================================="
    echo "MOU MOVIE CONVERTER 0.0.4 - LOGFILE                $timestamp"
    echo "==============================================================================="
    echo
    ) > $LOG_FILE
}
LOG_NEW_CONVERT_START ()
{
    echo -e "${CONFIG_TXT_COLOR}LOG_NEW_CONVERT_START ()${CONFIG_TXT_NORMAL}"

    timestamp=`date`
    (
    echo
    echo "-------------------------------------------------------------------------------"
    echo "START CONVERTING NEW FILE                          $timestamp"
    echo "-------------------------------------------------------------------------------"
    echo "    Filename: $1"
    echo "        File $2 / $TOTAL_FILES"
    echo
    )  >> "$LOG_FILE"
}
LOG_VARIABLES ()
{
    echo -e "${CONFIG_TXT_COLOR}LOG_VARIABLES ()${CONFIG_TXT_NORMAL}"

    (
    echo "-------------------------------------------------------------------------------"
    echo "VARIABLES"
    echo "-------------------------------------------------------------------------------"
    echo "IN_MAIN_FORMAT:      $IN_MAIN_FORMAT"
    echo "IN_FPS:              $IN_FPS"
    echo "IN_TOTAL_FRAMES:     $IN_TOTAL_FRAMES"
    echo "IN_BITRATE:          $IN_BITRATE"
    echo "IN_ASPECT_RATIO:     $IN_ASPECT_RATIO ($IN_ASPECT_RATIO_INT)"
    echo "IN_SIZE:             $IN_SIZE_WIDTH:$IN_SIZE_HEIGHT"
    echo "IN_VIDEO_CODEC:      $IN_VIDEO_CODEC"
    echo "IN_VIDEO_INTERLACE:  $IN_VIDEO_INTERLACE"
    echo "IN_TV_SYSTEM:        $IN_TV_SYSTEM"
    echo "IN_AUDIO_COUNT:      $IN_AUDIO_COUNT"
    echo "IN_AUDIO_FORMATS:    $IN_AUDIO_FORMATS"
    echo "IN_AUDIO_CHANNELS:   $IN_AUDIO_CHANNELS"
    echo "IN_AUDIO_STREAMID:   $IN_AUDIO_STREAMID"
    echo "IN_AUDIO_SAMPLERATE: $IN_AUDIO_SAMPLERATE"
    echo "IN_AUDIO_CODEC:      $IN_AUDIO_CODEC"
    echo
    echo "VIDEO_OUT_TYPE:           $VIDEO_OUT_TYPE"
    echo "VIDEO_OUT_SYSTEM:         $VIDEO_OUT_SYSTEM"
    echo "VIDEO_OUT_FORMAT:         $VIDEO_OUT_FORMAT"
    echo "VIDEO_OUT_CODEC:          $VIDEO_OUT_CODEC"
    echo "VIDEO_OUT_SCALE:          $VIDEO_OUT_SCALE"
    echo "VIDEO_OUT_FPS:            $VIDEO_OUT_FPS"
    echo "VIDEO_OUT_ASPECT:         $VIDEO_OUT_ASPECT"
    echo "VIDEO_OUT_KEY_INTERVAL:   $VIDEO_OUT_KEY_INTERVAL"
    echo "VIDEO_OUT_BUFFER_SIZE:    $VIDEO_OUT_BUFFER_SIZE"
    echo "VIDEO_OUT_BITRATE_MIN:    $VIDEO_OUT_BITRATE_MIN"
    echo "VIDEO_OUT_BITRATE_MAX:    $VIDEO_OUT_BITRATE_MAX"
    echo "VIDEO_OUT_BITRATE_VBR:    $VIDEO_OUT_BITRATE_VBR"
    echo "VIDEO_OUT_QUALITY:        $VIDEO_OUT_QUALITY"
    echo "VIDEO_OUT_PASSES:         $VIDEO_OUT_PASSES"
    echo "AUDIO_OUT_CODEC:          $AUDIO_OUT_CODEC"
    echo "AUDIO_OUT_BITRATE:        $AUDIO_OUT_BITRATE"
    echo "AUDIO_OUT_RATE:           $AUDIO_OUT_RATE"
    echo "AUDIO_OUT_RESAMPLE_RATE:  $AUDIO_OUT_RESAMPLE_RATE"
    echo "AUDIO_OUT_STREAM_ID:      $AUDIO_OUT_STREAM_ID"
    echo "AUDIO_OUT_COPY:           $AUDIO_OUT_COPY"
    echo "QUANT_MATRIX:             $QUANT_MATRIX"
    echo "TARGET_CD_SIZE:           $TARGET_CD_SIZE"
    echo
    )  >> "$LOG_FILE"
}


SAVE_LAST_PROFILE ()
{
    echo -e "${CONFIG_TXT_COLOR}SAVE_LAST_PROFILE ()${CONFIG_TXT_NORMAL}"

    timestamp=`date`
    (
    echo "#-------------------------------------------------------------------------------"
    echo "#VARIABLES                                         $timestamp"
    echo "#-------------------------------------------------------------------------------"
    echo
    echo "VIDEO_OUT_TYPE=\"$VIDEO_OUT_TYPE\""
    echo "QUICK_MAIN_SELECTION=\"$QUICK_MAIN_SELECTION\""
    echo "MANUAL_MAIN_SELECTION=\"$MANUAL_MAIN_SELECTION\""
    echo "VIDEO_OUT_SYSTEM=\"$VIDEO_OUT_SYSTEM\""
    echo "VIDEO_OUT_FORMAT=\"$VIDEO_OUT_FORMAT\""
    echo "VIDEO_OUT_CODEC=\"$VIDEO_OUT_CODEC\""
    echo "VIDEO_OUT_SCALE=\"$VIDEO_OUT_SCALE\""
    echo "VIDEO_OUT_FPS=\"$VIDEO_OUT_FPS\""
    echo "VIDEO_OUT_ASPECT=\"$VIDEO_OUT_ASPECT\""
    echo "VIDEO_OUT_KEY_INTERVAL=\"$VIDEO_OUT_KEY_INTERVAL\""
    echo "VIDEO_OUT_BUFFER_SIZE=\"$VIDEO_OUT_BUFFER_SIZE\""
    echo "VIDEO_OUT_BITRATE_MIN=\"$VIDEO_OUT_BITRATE_MIN\""
    echo "VIDEO_OUT_BITRATE_MAX=\"$VIDEO_OUT_BITRATE_MAX\""
    echo "VIDEO_OUT_BITRATE_VBR=\"$VIDEO_OUT_BITRATE_VBR\""
    echo "VIDEO_OUT_QUALITY=\"$VIDEO_OUT_QUALITY\""
    echo "VIDEO_OUT_PASSES=\"$VIDEO_OUT_PASSES\""
    echo "AUDIO_OUT_CODEC=\"$AUDIO_OUT_CODEC\""
    echo "AUDIO_OUT_BITRATE=\"$AUDIO_OUT_BITRATE\""
    echo "AUDIO_OUT_RATE=\"$AUDIO_OUT_RATE\""
    echo "AUDIO_OUT_RESAMPLE_RATE=\"$AUDIO_OUT_RESAMPLE_RATE\""
    echo "AUDIO_OUT_STREAM_ID=\"$AUDIO_OUT_STREAM_ID\""
    echo "AUDIO_OUT_COPY=\"$AUDIO_OUT_COPY\""
    echo "QUANT_MATRIX=\"$QUANT_MATRIX\""
    echo "TARGET_CD_SIZE=\"$TARGET_CD_SIZE\""
    )  > "$LAST_PROFILE_FILE"

    # Logfile Output
    if [ "$LOGFILE" = "yes" ] ; then
        echo "Saved Last User Profile!" >> "$LOG_FILE"
    fi

}

