Attribute VB_Name = "FormatEdit"
Option Explicit

Public FFAEncodersList() As String
Public FFVEncodersList() As String
Public FFSEncodersList() As String
Public FFADecodersList() As String
Public FFVDecodersList() As String
Public FFSDecodersList() As String
Public FFMuxersList() As String
Public FFDemuxersList() As String
Public FFInputPxFmt() As String
Public FFOutputPxFmt() As String

Public ArchivoAbierto As Appfilesadm.FormatPerf
Private ArchivoAbiertoOriginal As Appfilesadm.FormatPerf
Public RutaArchivoAbierto As String
Private ParCount As Integer
Public IniciarListasValS As Byte
Public FEditBloquearRefreshCtrls As Byte
Public CatIndex As Byte
Public ConfManualMode As Byte

Public Sub IniciarFormatE(Optional FileName As String, Optional ModoManual As Byte = 0)
Dim i As Integer, FormsStatus() As Boolean, EnEjecucion As Boolean
Dim BuferF As Appfilesadm.FormatPerf, OpenRuta As String
ReDim FormsStatus(0 To Forms.Count - 1)
For i = 0 To Forms.Count - 1
FormsStatus(i) = Forms(i).Visible
Forms(i).Visible = False
Next

Load Form7
Form7.Width = 5250
Form7.Height = 4845
If ModoManual = 1 Then
Form7.Picture9.Visible = True
Form7.Height = Form7.Height + Form7.Picture9.Height
Form7.File_Close.Visible = False
Form7.File_Exit.Visible = False
Form7.File_Open.Visible = False
Form7.File_sep2.Visible = False
RutaArchivoAbierto = App.Path & "\appfiles\formats\.lfm"
End If

If IniciarListasValS = 1 Then
Form7.Frame6.Visible = True
Form7.Menu_File.Enabled = False
Form7.Menu_Help.Enabled = False
Form7.Menu_Options.Enabled = False
Form7.Show
Call InicializarFFListasValores
Call ListarParametros(1)
Form7.Frame6.Visible = False
Form7.Menu_File.Enabled = True
Form7.Menu_Help.Enabled = True
Form7.Menu_Options.Enabled = True
Else
Call ListarParametros(1)
Form7.Show
End If

If FileName <> "" Then Call FEAbrir(Replace(App.Path & "\appfiles\formats\" & FileName & ".lfm", "*", ""))
ConfManualMode = ModoManual

EnEjecucion = True
While EnEjecucion
DoEvents
EnEjecucion = False
For i = 0 To Forms.Count - 1
If Forms(i) Is Form7 Then
EnEjecucion = True
Exit For
End If
Next
Wend

Finalizar:
If ModoManual = 1 Then
ArchivoAbierto = BuferF
ArchivoAbiertoOriginal = BuferF
RutaArchivoAbierto = ""
ConfManualMode = 0
End If

For i = 0 To Forms.Count - 1
Forms(i).Visible = FormsStatus(i)
Next
ParCount = 0
End Sub

Public Sub InicializarFFListasValores()

ReDim FFAEncodersList(1 To 1)
FFAEncodersList(1) = " "
ReDim FFVEncodersList(1 To 1)
FFVEncodersList(1) = " "
ReDim FFSEncodersList(1 To 1)
FFSEncodersList(1) = " "
ReDim FFADecodersList(1 To 1)
ReDim FFVDecodersList(1 To 1)
ReDim FFSDecodersList(1 To 1)
ReDim FFMuxersList(1 To 1)
FFMuxersList(1) = " "
ReDim FFDemuxersList(1 To 1)
ReDim FFInputPxFmt(1 To 1)
ReDim FFOutputPxFmt(1 To 1)

Call InicializarFFEncodersLists
Call InicializarFFDecodersLists
Call InicializarFFFormatsLists
Call InicializarFFPixFmtsLists

Call OrdenarListaAlfabetica(FFAEncodersList)
Call OrdenarListaAlfabetica(FFVEncodersList)
Call OrdenarListaAlfabetica(FFSEncodersList)
Call OrdenarListaAlfabetica(FFADecodersList)
Call OrdenarListaAlfabetica(FFVDecodersList)
Call OrdenarListaAlfabetica(FFSDecodersList)
Call OrdenarListaAlfabetica(FFMuxersList)
Call OrdenarListaAlfabetica(FFDemuxersList)
Call OrdenarListaAlfabetica(FFInputPxFmt)
Call OrdenarListaAlfabetica(FFOutputPxFmt)

FFMuxersList(1) = "<copy>"
FFAEncodersList(1) = "copy"
FFVEncodersList(1) = "copy"
FFSEncodersList(1) = "copy"

IniciarListasValS = 0
End Sub

Private Sub InicializarFFEncodersLists()
Dim BufferOut As String, BufferSplit() As String, i As Integer, k As Integer
Dim j As Integer, n As Integer, l As Integer, NameLen As Integer
On Error GoTo Finalizar
Call CaptureConsole.ExecAndCapture(Chr(34) & ffmpegPath & Chr(34) & " -encoders", , , , , , , BufferOut)
If BufferOut = "" Then Exit Sub
BufferSplit = Split(BufferOut, vbCrLf)

i = LBound(BufferSplit)
n = 0
While i < UBound(BufferSplit) And n = 0
If BufferSplit(i) = "Encoders:" Then n = i + 10
i = i + 1
Wend

k = 1
j = 1
l = 1
For i = n To UBound(BufferSplit)

If Left(BufferSplit(i), 2) = " A" Then
NameLen = InStr(9, BufferSplit(i), " ") - 8
If NameLen > 0 Then
k = k + 1
ReDim Preserve FFAEncodersList(1 To k)
FFAEncodersList(k) = Trim(Mid(BufferSplit(i), 8, NameLen))
End If
End If

If Left(BufferSplit(i), 2) = " V" Then
NameLen = InStr(9, BufferSplit(i), " ") - 8
If NameLen > 0 Then
j = j + 1
ReDim Preserve FFVEncodersList(1 To j)
FFVEncodersList(j) = Trim(Mid(BufferSplit(i), 8, NameLen))
End If
End If

If Left(BufferSplit(i), 2) = " S" Then
NameLen = InStr(9, BufferSplit(i), " ") - 8
If NameLen > 0 Then
l = l + 1
ReDim Preserve FFSEncodersList(1 To l)
FFSEncodersList(l) = Trim(Mid(BufferSplit(i), 8, NameLen))
End If
End If

Next

Finalizar:
End Sub

Private Sub InicializarFFDecodersLists()
Dim BufferOut As String, BufferSplit() As String, i As Integer, k As Integer
Dim j As Integer, n As Integer, l As Integer, NameLen As Integer
On Error GoTo Finalizar
Call CaptureConsole.ExecAndCapture(Chr(34) & ffmpegPath & Chr(34) & " -decoders", , , , , , , BufferOut)
If BufferOut = "" Then Exit Sub
BufferSplit = Split(BufferOut, vbCrLf)

i = LBound(BufferSplit)
n = 0
While i < UBound(BufferSplit) And n = 0
If BufferSplit(i) = "Decoders:" Then n = i + 10
i = i + 1
Wend

k = 0
j = 0
l = 0
For i = n To UBound(BufferSplit)

If Left(BufferSplit(i), 2) = " A" Then
NameLen = InStr(9, BufferSplit(i), " ") - 8
If NameLen > 0 Then
k = k + 1
ReDim Preserve FFADecodersList(1 To k)
FFADecodersList(k) = Trim(Mid(BufferSplit(i), 8, NameLen))
End If
End If

If Left(BufferSplit(i), 2) = " V" Then
NameLen = InStr(9, BufferSplit(i), " ") - 8
If NameLen > 0 Then
j = j + 1
ReDim Preserve FFVDecodersList(1 To j)
FFVDecodersList(j) = Trim(Mid(BufferSplit(i), 8, NameLen))
End If
End If

If Left(BufferSplit(i), 2) = " S" Then
NameLen = InStr(9, BufferSplit(i), " ") - 8
If NameLen > 0 Then
l = l + 1
ReDim Preserve FFSDecodersList(1 To l)
FFSDecodersList(l) = Trim(Mid(BufferSplit(i), 8, NameLen))
End If
End If

Next

Finalizar:
End Sub

Private Sub InicializarFFFormatsLists()
Dim BufferOut As String, BufferSplit() As String, i As Integer, k As Integer
Dim j As Integer, n As Integer, NameLen As Long, l As Integer
Dim FormatNameSplit() As String
On Error GoTo Finalizar
Call CaptureConsole.ExecAndCapture(Chr(34) & ffmpegPath & Chr(34) & " -formats", , , , , , , BufferOut)
If BufferOut = "" Then Exit Sub
BufferSplit = Split(BufferOut, vbCrLf)

i = LBound(BufferSplit)
n = 0
While i < UBound(BufferSplit) And n = 0
If BufferSplit(i) = "File formats:" Then n = i + 4
i = i + 1
Wend

k = 0
j = 1

For i = n To UBound(BufferSplit)


If Mid(BufferSplit(i), 2, 1) = "D" Then
NameLen = InStr(5, BufferSplit(i), Chr(32))
NameLen = NameLen - 5
If NameLen > 0 Then
If InStr(1, Mid(BufferSplit(i), 5, NameLen), ",") > 0 Then
Erase FormatNameSplit
FormatNameSplit = Split(Mid(BufferSplit(i), 5, NameLen), ",")
For l = LBound(FormatNameSplit) To UBound(FormatNameSplit)
k = k + 1
ReDim Preserve FFDemuxersList(1 To k)
FFDemuxersList(k) = FormatNameSplit(l)
Next
Else
k = k + 1
ReDim Preserve FFDemuxersList(1 To k)
FFDemuxersList(k) = Mid(BufferSplit(i), 5, NameLen)
End If
End If
End If

If Mid(BufferSplit(i), 3, 1) = "E" Then
NameLen = InStr(5, BufferSplit(i), Chr(32))
NameLen = NameLen - 5
If NameLen > 0 Then
If InStr(1, Mid(BufferSplit(i), 5, NameLen), ",") > 0 Then
Erase FormatNameSplit
FormatNameSplit = Split(Mid(BufferSplit(i), 5, NameLen), ",")
For l = LBound(FormatNameSplit) To UBound(FormatNameSplit)
j = j + 1
ReDim Preserve FFMuxersList(1 To j)
FFMuxersList(j) = FormatNameSplit(l)
Next
Else
j = j + 1
ReDim Preserve FFMuxersList(1 To j)
FFMuxersList(j) = Mid(BufferSplit(i), 5, NameLen)
End If
End If
End If

Next

Finalizar:
End Sub

Private Sub InicializarFFPixFmtsLists()
Dim BufferOut As String, BufferSplit() As String, i As Integer, k As Integer
Dim j As Integer, n As Integer, NameLen As Long, l As Integer
Dim FormatNameSplit() As String
On Error GoTo Finalizar
Call CaptureConsole.ExecAndCapture(Chr(34) & ffmpegPath & Chr(34) & " -pix_fmts", , , , , , , BufferOut)
If BufferOut = "" Then Exit Sub
BufferSplit = Split(BufferOut, vbCrLf)

i = LBound(BufferSplit)
n = 0
While i < UBound(BufferSplit) And n = 0
If BufferSplit(i) = "Pixel formats:" Then n = i + 8
i = i + 1
Wend

k = 0
j = 0

For i = n To UBound(BufferSplit)

If Mid(BufferSplit(i), 1, 1) = "I" Then
NameLen = InStr(7, BufferSplit(i), Chr(32))
NameLen = NameLen - 7
If NameLen > 0 Then
k = k + 1
ReDim Preserve FFInputPxFmt(1 To k)
FFInputPxFmt(k) = Mid(BufferSplit(i), 7, NameLen)
End If
End If

If Mid(BufferSplit(i), 2, 1) = "O" Then
NameLen = InStr(7, BufferSplit(i), Chr(32))
NameLen = NameLen - 7
If NameLen > 0 Then
j = j + 1
ReDim Preserve FFOutputPxFmt(1 To j)
FFOutputPxFmt(j) = Mid(BufferSplit(i), 7, NameLen)
End If
End If

Next
Finalizar:
End Sub

Public Sub ListarParametros(Indice As Byte)
Dim i As Integer, Etiquetas() As String, Valores() As String, j As Integer
Dim ValoresSugeridos() As Variant
Dim ControlLock() As Integer, UsaECodec As Byte, ControlDis() As Integer
Dim FFEtiq As String
Dim ValorSugerido As String, ScapePos As Long
'On Error GoTo ErrH

FEditBloquearRefreshCtrls = 1
Form7.Combo6.ListIndex = Indice
ReDim ControlLock(1 To 1)
ReDim ControlDis(1 To 1)
ControlLock(1) = -1
ControlDis(1) = -1

For i = 1 To ParCount - 1
Form7.Text1(i).Visible = False
Form7.Combo2(i).Visible = False
Unload Form7.Text1(i)
Unload Form7.Combo2(i)
Next
Form7.Text1(0) = ""
Form7.Combo2(0) = ""
Form7.Combo2(0).Clear
Form7.Combo2(0).Tag = ""
Form7.Combo2(0).Enabled = True
Form7.Text1(0).Visible = False
Form7.Combo2(0).Visible = False
Form7.Label1.Visible = True

Select Case Indice

Case Is = 0
ParCount = 7
ReDim Etiquetas(1 To ParCount)
ReDim Valores(1 To ParCount)
ReDim ValoresSugeridos(1 To ParCount)
With ffmpeg.FFmpegParametrosEtiq
Etiquetas(1) = .Contenedor
Etiquetas(2) = .CodecAudio
Etiquetas(3) = .CodecVideo
Etiquetas(4) = .CodecSubtitulo
Etiquetas(5) = .PixelFormat
Etiquetas(6) = .ParametrosAdicionales
Etiquetas(7) = .ReadInputAtNFR
End With
With ArchivoAbierto
Valores(1) = .ContenedorE
Valores(2) = .CodecAudioE
Valores(3) = .CodecVideoE
Valores(4) = .CodecSubtituloE
Valores(5) = .PixelFormatE
Valores(6) = .ParAdicionalE
Valores(7) = .ReadInputAtNFR
End With
ValoresSugeridos(1) = FFDemuxersList
ValoresSugeridos(2) = FFADecodersList
ValoresSugeridos(3) = FFVDecodersList
ValoresSugeridos(4) = FFSDecodersList
ValoresSugeridos(5) = FFInputPxFmt
ValoresSugeridos(6) = Split("", ",")
ValoresSugeridos(7) = Split("0,1", ",")

ReDim ControlLock(1 To 1)
ControlLock(1) = 6

Case Is = 1
ParCount = 10
ReDim Etiquetas(1 To ParCount)
ReDim Valores(1 To ParCount)
ReDim ValoresSugeridos(1 To ParCount)
With ffmpeg.FFmpegParametrosEtiq
Etiquetas(1) = .Contenedor
Etiquetas(2) = .CodecAudio
Etiquetas(3) = .CodecVideo
Etiquetas(4) = .CodecSubtitulo
Etiquetas(5) = .Objetivo
Etiquetas(6) = .EliminarS
Etiquetas(7) = .ParametrosAdicionales
Etiquetas(8) = .Extension
Etiquetas(9) = .Multisalida
Etiquetas(10) = .BufferSize
End With
With ArchivoAbierto
Valores(1) = .ContenedorS
Valores(2) = .CodecAudioS
Valores(3) = .CodecVideoS
Valores(4) = .CodecSubtituloS
Valores(5) = .Objetivo
Valores(6) = .EliminarSubtitulos
Valores(7) = .ParAdicionalS
Valores(8) = .ExtensionS
Valores(9) = .Multisalida
Valores(10) = .BufferSize
End With
ValoresSugeridos(1) = FFMuxersList
ValoresSugeridos(2) = FFAEncodersList
ValoresSugeridos(3) = FFVEncodersList
ValoresSugeridos(4) = FFSEncodersList
ValoresSugeridos(5) = Split("ntsc-vcd,ntsc-svcd,ntsc-dvd,ntsc-dv,ntsc-dv50,pal-vcd,pal-svcd,pal-dvd,pal-dv,pal-dv50,film-vcd,film-svcd,film-dvd,film-dv,film-dv50", ",")
ValoresSugeridos(6) = Split("0,1", ",")
ValoresSugeridos(7) = Split("", ",")
ValoresSugeridos(8) = Split("3gp,aac,ac3,ape,asf,avi,fla,flac,flv,it,m4a,m4v,Mac,mp1,mp2,mp3,mp4,mpc,mpeg,mpeg1,mpeg2,mpeg4,mpg,mtk,mts,mtv,ogg,ogm,ogv,ogx,vob,wav,wma,wmv,wv", ",")
ValoresSugeridos(9) = Split("0,1", ",")
ValoresSugeridos(10) = Split("512k,1m,2m,3m,5m", ",")

ReDim ControlLock(1 To 2)
ControlLock(1) = 5
ControlLock(2) = 8
If ArchivoAbierto.ECodecANombre <> "" Then
ReDim ControlDis(1 To 1)
ControlDis(1) = 1
If ArchivoAbierto.InfoECodecA.RutaEXE <> "<ffmpeg.exe>" Then Valores(2) = "<" & ArchivoAbierto.ECodecANombre & ">" Else Valores(2) = ArchivoAbierto.ECodecANombre
End If
If ArchivoAbierto.ECodecVNombre <> "" Then
If ControlDis(1) = -1 Then ReDim ControlDis(1 To 1) Else ReDim Preserve ControlDis(1 To 2)
ControlDis(UBound(ControlDis)) = 2
If ArchivoAbierto.InfoECodecV.RutaEXE <> "<ffmpeg.exe>" Then Valores(3) = "<" & ArchivoAbierto.ECodecVNombre & ">" Else Valores(3) = ArchivoAbierto.ECodecVNombre
End If

Case Is = 2
If ArchivoAbierto.ECodecANombre <> "" Then UsaECodec = 1 Else UsaECodec = 0

If UsaECodec = 0 Then
ParCount = 7
ReDim Etiquetas(1 To ParCount)
ReDim Valores(1 To ParCount)
ReDim ValoresSugeridos(1 To ParCount)
With ffmpeg.FFmpegParametrosEtiq
Etiquetas(1) = .Bitrate
Etiquetas(2) = .BitrateMax
Etiquetas(3) = .BitrateMin
Etiquetas(4) = .Calidad
Etiquetas(5) = .Canales
Etiquetas(6) = .SampleRate
Etiquetas(7) = .EliminarA
End With
With ArchivoAbierto
Valores(1) = .BitrateAudio
Valores(2) = .BitrateMaxAudio
Valores(3) = .BitrateMinAudio
Valores(4) = .AudioCalidad
Valores(5) = .Canales
Valores(6) = .SampleRate
Valores(7) = .EliminarAudio
End With
ValoresSugeridos(1) = Split("8k,16k,24k,32k,48k,64k,96k,128k,192k,256k,320k,512k,1m,2m,3m,5m", ",")
ValoresSugeridos(2) = ValoresSugeridos(1)
ValoresSugeridos(3) = ValoresSugeridos(1)
ValoresSugeridos(4) = Split("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31", ",")
ValoresSugeridos(5) = Split("1,2,3,4,5,6,7,8", ",")
ValoresSugeridos(6) = Split("16000,22050,24000,32000,44100,48000", ",")
ValoresSugeridos(7) = Split("0,1", ",")
ReDim ControlLock(1 To 1)
ControlLock(1) = 6
End If

If UsaECodec = 1 Then
ParCount = 0
j = 1
With ArchivoAbierto.InfoECodecA
If ECodecEdit.ElementosEnMatrizPar(.Parametros) > 0 Then
    'Mostrar opcion para elegir pipe si se habilitó su uso
    For i = LBound(.Parametros) To UBound(.Parametros)
        If .Parametros(i).Nombre = "<InFile>" Then
            If .Parametros(i).SoloValoresSugeridos = 1 Then
                ParCount = ParCount + 1
                ReDim Etiquetas(1 To 1)
                ReDim Valores(1 To 1)
                ReDim ValoresSugeridos(1 To 1)
                ReDim ControlLock(1 To 1)
                Etiquetas(ParCount) = "<InFile>"
                ValoresSugeridos(ParCount) = Split("file,pipe", ",")
                If .Parametros(i).Valor = "" Then .Parametros(i).Valor = "file"
                ControlLock(1) = 0
                Valores(1) = .Parametros(i).Valor
                j = j + 1
            End If
            Exit For
        End If
    Next
    For i = LBound(.Parametros) To UBound(.Parametros)
        If .Parametros(i).Tipo <> 1 Then
            ParCount = ParCount + 1
            If .Parametros(i).SoloValoresSugeridos = 1 Or .Parametros(i).Tipo = 2 Then
                ReDim Preserve ControlLock(1 To j)
                ControlLock(j) = ParCount - 1
                j = j + 1
            End If
            ReDim Preserve Etiquetas(1 To ParCount)
            ReDim Preserve Valores(1 To ParCount)
            ReDim Preserve ValoresSugeridos(1 To ParCount)
            Etiquetas(ParCount) = .Parametros(i).Nombre
            Valores(ParCount) = .Parametros(i).Valor
            If .Parametros(i).Tipo = 2 Then ValoresSugeridos(ParCount) = Split("0,1", ",") Else ValoresSugeridos(ParCount) = Split(vbCrLf & Replace(.Parametros(i).ValoresSugeridos, "*", Chr(0)), vbCrLf)
        End If
    Next
End If
For i = 1 To 6
If .UserParCodecsffmpeg(i) = 1 Then
ParCount = ParCount + 1
ReDim Preserve Etiquetas(1 To ParCount)
ReDim Preserve Valores(1 To ParCount)
ReDim Preserve ValoresSugeridos(1 To ParCount)
If .RutaEXE <> "<ffmpeg.exe>" Then FFEtiq = "FF>"
Select Case i
Case Is = 1
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.Bitrate
ValoresSugeridos(ParCount) = Split("8k,16k,24k,32k,48k,64k,96k,128k,192k,256k,320k,512k,1m,2m,3m,5m", ",")
Case Is = 2
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.BitrateMax
ValoresSugeridos(ParCount) = Split("8k,16k,24k,32k,48k,64k,96k,128k,192k,256k,320k,512k,1m,2m,3m,5m", ",")
Case Is = 3
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.BitrateMin
ValoresSugeridos(ParCount) = Split("8k,16k,24k,32k,48k,64k,96k,128k,192k,256k,320k,512k,1m,2m,3m,5m", ",")
Case Is = 4
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.Calidad
ValoresSugeridos(ParCount) = Split("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31", ",")
Case Is = 5
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.Canales
ValoresSugeridos(ParCount) = Split("1,2,3,4,5,6,7,8", ",")
Case Is = 6
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.SampleRate
ValoresSugeridos(ParCount) = Split("16000,22050,24000,32000,44100,48000", ",")
End Select
Valores(ParCount) = .FFParUserValues(i)
End If
Next
End With
End If

Case Is = 3
If ArchivoAbierto.ECodecVNombre <> "" Then UsaECodec = 1 Else UsaECodec = 0

If UsaECodec = 0 Then
ParCount = 11
ReDim Etiquetas(1 To ParCount)
ReDim Valores(1 To ParCount)
ReDim ValoresSugeridos(1 To ParCount)
With ffmpeg.FFmpegParametrosEtiq
Etiquetas(1) = .Bitrate
Etiquetas(2) = .BitrateMax
Etiquetas(3) = .BitrateMin
Etiquetas(4) = .Calidad
Etiquetas(5) = .CalidadMax
Etiquetas(6) = .CalidadMin
Etiquetas(7) = .fps
Etiquetas(8) = .TamanoCuadro
Etiquetas(9) = .RelAspect
Etiquetas(10) = .PixelFormat
Etiquetas(11) = .EliminarV
End With
With ArchivoAbierto
Valores(1) = .BitrateVideo
Valores(2) = .BitrateMaxVideo
Valores(3) = .BitrateMinVideo
Valores(4) = .VideoCalidad
Valores(5) = .CalidadMax
Valores(6) = .CalidadMin
Valores(7) = .Videofps
Valores(8) = .TamanoCuadro
Valores(9) = .RelAspect
Valores(10) = .PixelFormatS
Valores(11) = .EliminarVideo
End With
ValoresSugeridos(1) = Split("256k,512k,720k,1m,2m,3m,5m", ",")
ValoresSugeridos(2) = ValoresSugeridos(1)
ValoresSugeridos(3) = ValoresSugeridos(1)
ValoresSugeridos(4) = Split("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31", ",")
ValoresSugeridos(5) = ValoresSugeridos(4)
ValoresSugeridos(6) = ValoresSugeridos(4)
ValoresSugeridos(7) = Split("1/8,1/5,1/4,1/2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30", ",")
ValoresSugeridos(8) = Split("64x64,160x120,176x144,320x240,640x480,720x576,800x600,1024x768,1280x1024,1600x1200,1280x800,1440x900,1680x1050,1920x1200,2560x1600", ",")
ValoresSugeridos(9) = Split("4:3,16:9", ",")
ValoresSugeridos(10) = FFOutputPxFmt
ValoresSugeridos(11) = Split("0,1", ",")
ReDim ControlLock(1 To 1)
ControlLock(1) = 10
End If

If UsaECodec = 1 Then
ParCount = 0
j = 1
With ArchivoAbierto.InfoECodecV
If ECodecEdit.ElementosEnMatrizPar(.Parametros) > 0 Then
    'Mostrar opcion para elegir pipe si se habilitó su uso
    For i = LBound(.Parametros) To UBound(.Parametros)
        If .Parametros(i).Nombre = "<InFile>" Then
            If .Parametros(i).SoloValoresSugeridos = 1 Then
                ParCount = ParCount + 1
                ReDim Etiquetas(1 To 1)
                ReDim Valores(1 To 1)
                ReDim ValoresSugeridos(1 To 1)
                ReDim ControlLock(1 To 1)
                Etiquetas(ParCount) = "<InFile>"
                ValoresSugeridos(ParCount) = Split("file,pipe", ",")
                If .Parametros(i).Valor = "" Then .Parametros(i).Valor = "file"
                ControlLock(1) = 0
                Valores(1) = .Parametros(i).Valor
                j = j + 1
            End If
            Exit For
        End If
    Next
    For i = LBound(.Parametros) To UBound(.Parametros)
        If .Parametros(i).Tipo <> 1 Then
            ParCount = ParCount + 1
            If .Parametros(i).SoloValoresSugeridos = 1 Or .Parametros(i).Tipo = 2 Then
                ReDim Preserve ControlLock(1 To j)
                ControlLock(j) = ParCount - 1
            j = j + 1
        End If
            ReDim Preserve Etiquetas(1 To ParCount)
            ReDim Preserve Valores(1 To ParCount)
            ReDim Preserve ValoresSugeridos(1 To ParCount)
            Etiquetas(ParCount) = .Parametros(i).Nombre
            Valores(ParCount) = .Parametros(i).Valor
            If .Parametros(i).Tipo = 2 Then ValoresSugeridos(ParCount) = Split("0,1", ",") Else ValoresSugeridos(ParCount) = Split(vbCrLf & Replace(.Parametros(i).ValoresSugeridos, "*", Chr(0)), vbCrLf)
        End If
    Next
End If
For i = 1 To 10
If .UserParCodecsffmpeg(i) = 1 Then
ParCount = ParCount + 1
ReDim Preserve Etiquetas(1 To ParCount)
ReDim Preserve Valores(1 To ParCount)
ReDim Preserve ValoresSugeridos(1 To ParCount)
If .RutaEXE <> "<ffmpeg.exe>" Then FFEtiq = "FF>"
Select Case i
Case Is = 1
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.Bitrate
ValoresSugeridos(ParCount) = Split("256k,512k,720k,1m,2m,3m,5m", ",")
Case Is = 2
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.BitrateMax
ValoresSugeridos(ParCount) = Split("256k,512k,720k,1m,2m,3m,5m", ",")
Case Is = 3
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.BitrateMin
ValoresSugeridos(ParCount) = Split("256k,512k,720k,1m,2m,3m,5m", ",")
Case Is = 4
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.Calidad
ValoresSugeridos(ParCount) = Split("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31", ",")
Case Is = 5
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.CalidadMax
ValoresSugeridos(ParCount) = Split("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31", ",")
Case Is = 6
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.CalidadMin
ValoresSugeridos(ParCount) = Split("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31", ",")
Case Is = 7
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.fps
ValoresSugeridos(ParCount) = Split("1/8,1/5,1/4,1/2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30", ",")
Case Is = 8
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.TamanoCuadro
ValoresSugeridos(ParCount) = Split("64x64,160x120,176x144,320x240,640x480,720x576,800x600,1024x768,1280x1024,1600x1200,1280x800,1440x900,1680x1050,1920x1200,2560x1600", ",")
Case Is = 9
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.RelAspect
ValoresSugeridos(ParCount) = Split("4:3,16:9", ",")
Case Is = 10
Etiquetas(ParCount) = FFEtiq & ffmpeg.FFmpegParametrosEtiq.PixelFormat
ValoresSugeridos(ParCount) = FFOutputPxFmt
End Select
Valores(ParCount) = .FFParUserValues(i)
End If
Next
End With
End If

End Select

If ParCount = 0 Then Exit Sub

Form7.Text1(0).Text = Etiquetas(1)
Form7.Combo2(0).Text = Valores(1)
Form7.Text1(0).Visible = True
Form7.Combo2(0).Visible = True
Form7.Label1.Visible = False
For j = LBound(ValoresSugeridos(1)) To UBound(ValoresSugeridos(1))
Form7.Combo2(0).AddItem ValoresSugeridos(1)(j)
Next
For i = 1 To ParCount - 1
Load Form7.Text1(i)
Load Form7.Combo2(i)
Form7.Text1(i).Text = Etiquetas(i + 1)
Form7.Combo2(i).Text = Valores(i + 1)
For j = LBound(ValoresSugeridos(i + 1)) To UBound(ValoresSugeridos(i + 1))
    Form7.Combo2(i).AddItem ValoresSugeridos(i + 1)(j)
Next
Next
If ControlLock(1) <> -1 Then
For i = 1 To UBound(ControlLock)
Form7.Combo2(ControlLock(i)).Tag = "1"
Next
End If
If ControlDis(1) <> -1 Then
For i = 1 To UBound(ControlDis)
Form7.Combo2(ControlDis(i)).Enabled = False
Next
End If

If Int(Form7.Picture1.Height / Form7.Text1(0).Height) > ParCount - 1 Then Form7.VScroll1.Max = 0 Else Form7.VScroll1.Max = ParCount - Int(Form7.Picture1.Height / Form7.Text1(0).Height)
Call ScrollView

FEditBloquearRefreshCtrls = 0
Exit Sub
ErrH:
FEditBloquearRefreshCtrls = 0
End Sub

Public Sub ScrollView()
Dim k As Integer, i As Integer
With Form7
For i = 0 To ParCount - 1
.Text1(i).Visible = False
.Combo2(i).Visible = False
Next
k = Int(.Picture1.Height / .Text1(0).Height) - 1
If .VScroll1.Value + k > ParCount - 1 Then k = ParCount - .VScroll1.Value - 1
For i = .VScroll1.Value To .VScroll1.Value + k
.Text1(i).Top = (i - .VScroll1.Value) * .Text1(i).Height
.Text1(i).Left = .Text1(0).Left
.Combo2(i).Top = (i - .VScroll1.Value) * .Combo2(i).Height
.Combo2(i).Left = .Combo2(0).Left
.Text1(i).Visible = True
.Combo2(i).Visible = True
Next
End With
End Sub

Public Sub AsgignarValor(CatIndex As Byte, ParIndex As Integer)
Dim Valor As String, CargarECodec As Byte, NumArchivo As Integer
Dim ECodecIndex As Integer, i As Integer, j As Integer
Valor = Form7.Combo2(ParIndex).Text
With ArchivoAbierto
Select Case CatIndex
Case Is = 0
    Select Case ParIndex
    Case Is = 0: .ContenedorE = Valor
    Case Is = 1: .CodecAudioE = Valor
    Case Is = 2: .CodecVideoE = Valor
    Case Is = 3: .CodecSubtituloE = Valor
    Case Is = 4: .PixelFormatE = Valor
    Case Is = 5: .ParAdicionalE = Valor
    Case Is = 6: .ReadInputAtNFR = CByte(Valor)
    End Select
Case Is = 1
    Select Case ParIndex
    Case Is = 0
        If LCase(Valor) = "<copy>" And (.ECodecANombre = "" Or (.ECodecANombre <> "" And .InfoECodecA.RutaEXE = "<ffmpeg.exe>")) And (.ECodecVNombre = "" Or (.ECodecVNombre <> "" And .InfoECodecV.RutaEXE = "<ffmpeg.exe>")) Then
            MsgBox Lang.Msg_OutputMuxerCannotbecopy, vbOKOnly, Form7.Caption
            FormatEdit.FEditBloquearRefreshCtrls = 1
            Form7.Combo2(ParIndex) = .ContenedorS
            FormatEdit.FEditBloquearRefreshCtrls = 0
            Exit Sub
        End If
        .ContenedorS = Valor
    Case Is = 1: .CodecAudioS = Valor
    Case Is = 2: .CodecVideoS = Valor
    Case Is = 3: .CodecSubtituloS = Valor
    Case Is = 4: .Objetivo = Valor
    Case Is = 5: .EliminarSubtitulos = CByte(Valor)
    Case Is = 6: .ParAdicionalS = Valor
    Case Is = 7: .ExtensionS = Valor
    Case Is = 8: .Multisalida = CByte(Valor)
    Case Is = 9: .BufferSize = Valor
    End Select
Case Is = 2
If ArchivoAbierto.ECodecANombre <> "" Then CargarECodec = 1 Else CargarECodec = 0
    If CargarECodec = 0 Then
        Select Case ParIndex
        Case Is = 0: .BitrateAudio = Valor
        Case Is = 1: .BitrateMaxAudio = Valor
        Case Is = 2: .BitrateMinAudio = Valor
        Case Is = 3: .AudioCalidad = Valor
        Case Is = 4: .Canales = Valor
        Case Is = 5: .SampleRate = Valor
        Case Is = 6: .EliminarAudio = CByte(Valor)
        End Select
    End If
    If CargarECodec = 1 Then
        ECodecIndex = -1
        i = LBound(.InfoECodecA.Parametros)
        While i <= UBound(.InfoECodecA.Parametros) And ECodecIndex = -1
        If .InfoECodecA.Parametros(i).Nombre = Form7.Text1(ParIndex).Text Then ECodecIndex = i
        i = i + 1
        Wend
        If ECodecIndex <> -1 Then
            If .InfoECodecA.Parametros(ECodecIndex).Nombre = "<InFile>" Then
                If Valor <> "pipe" Then Valor = ""
            End If
            .InfoECodecA.Parametros(ECodecIndex).Valor = Valor
        Else
            i = Form7.Combo2.Count - ParIndex
            ECodecIndex = 0
            For j = UBound(.InfoECodecA.UserParCodecsffmpeg) To LBound(.InfoECodecA.UserParCodecsffmpeg) Step -1
            If .InfoECodecA.UserParCodecsffmpeg(j) = 1 Then ECodecIndex = ECodecIndex + 1
            If ECodecIndex = i Then
            .InfoECodecA.FFParUserValues(j) = Valor
            Exit For
            End If
            Next
        End If
    End If
Case Is = 3
If ArchivoAbierto.ECodecVNombre <> "" Then CargarECodec = 1 Else CargarECodec = 0
    If CargarECodec = 0 Then
        Select Case ParIndex
        Case Is = 0: .BitrateVideo = Valor
        Case Is = 1: .BitrateMaxVideo = Valor
        Case Is = 2: .BitrateMinVideo = Valor
        Case Is = 3: .VideoCalidad = Valor
        Case Is = 4: .CalidadMax = Valor
        Case Is = 5: .CalidadMin = Valor
        Case Is = 6: .Videofps = Valor
        Case Is = 7: .TamanoCuadro = Valor
        Case Is = 8: .RelAspect = Valor
        Case Is = 9: .PixelFormatS = Valor
        Case Is = 10: .EliminarVideo = CByte(Valor)
        End Select
    End If
    If CargarECodec = 1 Then
        ECodecIndex = -1
        i = LBound(.InfoECodecV.Parametros)
        While i <= UBound(.InfoECodecV.Parametros) And ECodecIndex = -1
        If .InfoECodecV.Parametros(i).Nombre = Form7.Text1(ParIndex).Text Then ECodecIndex = i
        i = i + 1
        Wend
        If ECodecIndex <> -1 Then
        .InfoECodecV.Parametros(ECodecIndex).Valor = Valor
        Else
            i = Form7.Combo2.Count - ParIndex
            ECodecIndex = 0
            For j = UBound(.InfoECodecV.UserParCodecsffmpeg) To LBound(.InfoECodecV.UserParCodecsffmpeg) Step -1
            If .InfoECodecV.UserParCodecsffmpeg(j) = 1 Then ECodecIndex = ECodecIndex + 1
            If ECodecIndex = i Then
            .InfoECodecV.FFParUserValues(j) = Valor
            Exit For
            End If
            Next
        End If
    End If
End Select
End With
End Sub

Public Sub CargarExternalCodecInfo(Tipo As Byte, Optional Nombre As String)
Dim Ruta As String, Extension As String, NumArchivo As Integer, Buffer As Appfilesadm.ExternalCodec
Dim i As Integer
Select Case Tipo
    Case 0: Extension = "lca"
    Case 1: Extension = "lcv"
    Case 2: Extension = "fca"
    Case 3: Extension = "fcv"
End Select
If Nombre = "" Then
Ruta = Appfilesadm.IniciarAdministrador(App.Path & "\appfiles\ecodec", Extension, 1, True)
Else
Ruta = App.Path & "\appfiles\ecodec\" & Nombre & "." & Extension
End If
If Ruta = "" Then Exit Sub
If ScriptObj.ExisteArchivo(Ruta) = False Then
Lang.MsgFileNotFound (Ruta)
Exit Sub
End If
NumArchivo = FreeFile()
On Error GoTo ErrH
Open Ruta For Binary As NumArchivo
Get NumArchivo, , Buffer
Close NumArchivo
If Tipo > 1 Then
    If Buffer.ExtensionSalida = "" Then
        Lang.Msg_ECodecNoContieneInfo
        Exit Sub
    End If
End If
If Tipo = 0 Or Tipo = 2 Then
    ArchivoAbierto.InfoECodecA = Buffer
    ReDim ArchivoAbierto.InfoECodecA.FFParUserValues(LBound(ArchivoAbierto.InfoECodecA.UserParCodecsffmpeg) To UBound(ArchivoAbierto.InfoECodecA.UserParCodecsffmpeg))
    ArchivoAbierto.ECodecANombre = ScriptObj.NombreBase(Ruta)
    If Tipo > 1 Then ArchivoAbierto.ECodecANombre = "FF>" & ArchivoAbierto.ECodecANombre
    If ECodecEdit.ElementosEnMatrizPar(ArchivoAbierto.InfoECodecA.Parametros) > 0 Then
        For i = LBound(ArchivoAbierto.InfoECodecA.Parametros) To UBound(ArchivoAbierto.InfoECodecA.Parametros)
            If ArchivoAbierto.InfoECodecA.Parametros(i).Tipo = 2 Then ArchivoAbierto.InfoECodecA.Parametros(i).Valor = "0"
        Next
    End If
    Form7.LoadECA_Menu.Visible = False
    Form7.LoadFCA_Menu.Visible = False
    Form7.UnloadECA_Menu.Visible = True
    Form7.ReloadECA_Menu.Visible = True
    Form7.Help_AboutECA.Visible = True
    Form7.FindEXE_A.Visible = (Tipo = 0)
    ArchivoAbierto.EliminarAudio = 0
Else
    ArchivoAbierto.InfoECodecV = Buffer
    ReDim ArchivoAbierto.InfoECodecV.FFParUserValues(LBound(ArchivoAbierto.InfoECodecV.UserParCodecsffmpeg) To UBound(ArchivoAbierto.InfoECodecV.UserParCodecsffmpeg))
    If ECodecEdit.ElementosEnMatrizPar(ArchivoAbierto.InfoECodecV.Parametros) > 0 Then
        For i = LBound(ArchivoAbierto.InfoECodecV.Parametros) To UBound(ArchivoAbierto.InfoECodecV.Parametros)
            If ArchivoAbierto.InfoECodecV.Parametros(i).Tipo = 2 Then ArchivoAbierto.InfoECodecV.Parametros(i).Valor = "0"
        Next
    End If
    ArchivoAbierto.ECodecVNombre = ScriptObj.NombreBase(Ruta)
    If Tipo > 1 Then ArchivoAbierto.ECodecVNombre = "FF>" & ArchivoAbierto.ECodecVNombre
    Form7.LoadECV_Menu.Visible = False
    Form7.LoadFCV_Menu.Visible = False
    Form7.UnloadECV_Menu.Visible = True
    Form7.ReloadECV_Menu.Visible = True
    Form7.Help_AboutECV.Visible = True
    Form7.FindEXE_V.Visible = (Tipo = 1)
    ArchivoAbierto.EliminarVideo = 0
End If
Form7.Opt_FindExe.Visible = Form7.FindEXE_V.Visible Or Form7.FindEXE_A.Visible
'Form7.FindEXE_Sep1.Visible = Form7.Opt_FindExe.Visible
Call ListarParametros(CatIndex)
Exit Sub
ErrH:
Lang.FormatEditMsgCantLoadECodec (ScriptObj.NombreBase(Ruta))
End Sub

Public Sub DescargarExternalCodecInfo(Tipo As Byte)
Dim Buffer As Appfilesadm.ExternalCodec, Ruta As String, Extension As String
If Tipo = 0 Then
    If ArchivoAbierto.ECodecANombre = "" Then Exit Sub
    If Len(ArchivoAbierto.ECodecANombre) > 2 Then
        If Left(ArchivoAbierto.ECodecANombre, 3) = "FF>" Then
            Ruta = App.Path & "\appfiles\ecodec\" & Right(ArchivoAbierto.ECodecANombre, Len(ArchivoAbierto.ECodecANombre) - 3) & ".fca"
        Else
            Ruta = App.Path & "\appfiles\ecodec\" & ArchivoAbierto.ECodecANombre & ".lca"
        End If
    Else
        Ruta = App.Path & "\appfiles\ecodec\" & ArchivoAbierto.ECodecANombre & ".lca"
    End If
Else
    If Len(ArchivoAbierto.ECodecVNombre) > 2 Then
        If Left(ArchivoAbierto.ECodecVNombre, 3) = "FF>" Then
            Ruta = App.Path & "\appfiles\ecodec\" & Right(ArchivoAbierto.ECodecVNombre, Len(ArchivoAbierto.ECodecVNombre) - 3) & ".fcv"
        Else
            Ruta = App.Path & "\appfiles\ecodec\" & ArchivoAbierto.ECodecVNombre & ".lcv"
        End If
    Else
        Ruta = App.Path & "\appfiles\ecodec\" & ArchivoAbierto.ECodecVNombre & ".lcv"
    End If
End If

If ScriptObj.ExisteArchivo(Ruta) = False Then
    If Lang.FormatEditQstUnloadCodec <> vbYes Then Exit Sub
End If

If Tipo = 0 Then
ArchivoAbierto.ECodecANombre = ""
ArchivoAbierto.InfoECodecA = Buffer
Form7.LoadECA_Menu.Visible = True
Form7.LoadFCA_Menu.Visible = True
Form7.UnloadECA_Menu.Visible = False
Form7.ReloadECA_Menu.Visible = False
Form7.Help_AboutECA.Visible = False
Form7.FindEXE_Sep1.Visible = Not Form7.FindEXE_V.Visible
Form7.FindEXE_A.Visible = False
Else
ArchivoAbierto.ECodecVNombre = ""
ArchivoAbierto.InfoECodecV = Buffer
Form7.LoadECV_Menu.Visible = True
Form7.LoadFCV_Menu.Visible = True
Form7.UnloadECV_Menu.Visible = False
Form7.ReloadECV_Menu.Visible = False
Form7.Help_AboutECV.Visible = False
Form7.FindEXE_Sep1.Visible = Not Form7.FindEXE_A.Visible
Form7.FindEXE_V.Visible = False
End If
Form7.Opt_FindExe.Visible = (Form7.FindEXE_A.Visible = True Or Form7.FindEXE_V.Visible = True)
If ArchivoAbierto.ContenedorS = "<copy>" Then
    If (ArchivoAbierto.ECodecANombre = "" Or (ArchivoAbierto.ECodecANombre <> "" And ArchivoAbierto.InfoECodecA.RutaEXE = "<ffmpeg.exe>")) _
        And (ArchivoAbierto.ECodecVNombre = "" Or (ArchivoAbierto.ECodecVNombre <> "" And ArchivoAbierto.InfoECodecV.RutaEXE = "<ffmpeg.exe>")) _
    Then ArchivoAbierto.ContenedorS = ""
End If
Call ListarParametros(CatIndex)
End Sub

Private Function FEHuboCambios() As Boolean
Dim Ret As Boolean, i As Integer
Ret = False
Ret = (ArchivoAbierto.AudioCalidad <> ArchivoAbiertoOriginal.AudioCalidad) Or _
(ArchivoAbierto.BitrateAudio <> ArchivoAbiertoOriginal.BitrateAudio) Or _
(ArchivoAbierto.BitrateMaxAudio <> ArchivoAbiertoOriginal.BitrateMaxAudio) Or _
(ArchivoAbierto.BitrateMaxVideo <> ArchivoAbiertoOriginal.BitrateMaxVideo) Or _
(ArchivoAbierto.BitrateMinAudio <> ArchivoAbiertoOriginal.BitrateMinAudio) Or _
(ArchivoAbierto.BitrateMinVideo <> ArchivoAbiertoOriginal.BitrateMinVideo) Or _
(ArchivoAbierto.BitrateVideo <> ArchivoAbiertoOriginal.BitrateVideo) Or _
(ArchivoAbierto.CalidadMax <> ArchivoAbiertoOriginal.CalidadMax) Or _
(ArchivoAbierto.CalidadMin <> ArchivoAbiertoOriginal.CalidadMin) Or _
(ArchivoAbierto.Canales <> ArchivoAbiertoOriginal.Canales) Or _
(ArchivoAbierto.CodecAudioE <> ArchivoAbiertoOriginal.CodecAudioE) Or _
(ArchivoAbierto.CodecAudioS <> ArchivoAbiertoOriginal.CodecAudioS) Or _
(ArchivoAbierto.CodecSubtituloE <> ArchivoAbiertoOriginal.CodecSubtituloE) Or _
(ArchivoAbierto.CodecVideoE <> ArchivoAbiertoOriginal.CodecVideoE) Or _
(ArchivoAbierto.CodecVideoS <> ArchivoAbiertoOriginal.CodecVideoS) Or _
(ArchivoAbierto.ContenedorE <> ArchivoAbiertoOriginal.ContenedorE) Or _
(ArchivoAbierto.ContenedorS <> ArchivoAbiertoOriginal.ContenedorS) Or _
(ArchivoAbierto.ECodecANombre <> ArchivoAbiertoOriginal.ECodecANombre) Or _
(ArchivoAbierto.ECodecVNombre <> ArchivoAbiertoOriginal.ECodecVNombre) Or _
(ArchivoAbierto.EliminarAudio <> ArchivoAbiertoOriginal.EliminarAudio) Or _
(ArchivoAbierto.EliminarSubtitulos <> ArchivoAbiertoOriginal.EliminarSubtitulos) Or _
(ArchivoAbierto.EliminarVideo <> ArchivoAbiertoOriginal.EliminarVideo) Or _
(ArchivoAbierto.ExtensionS <> ArchivoAbiertoOriginal.ExtensionS) Or _
(ArchivoAbierto.Multisalida <> ArchivoAbiertoOriginal.Multisalida) Or _
(ArchivoAbierto.Objetivo <> ArchivoAbiertoOriginal.Objetivo)
FEHuboCambios = Ret
If Ret = True Then Exit Function
Ret = (ArchivoAbierto.ParAdicionalE <> ArchivoAbiertoOriginal.ParAdicionalE) Or _
(ArchivoAbierto.ParAdicionalS <> ArchivoAbiertoOriginal.ParAdicionalS) Or _
(ArchivoAbierto.PixelFormatE <> ArchivoAbiertoOriginal.PixelFormatE) Or _
(ArchivoAbierto.PixelFormatS <> ArchivoAbiertoOriginal.PixelFormatS) Or _
(ArchivoAbierto.RelAspect <> ArchivoAbiertoOriginal.RelAspect) Or _
(ArchivoAbierto.SampleRate <> ArchivoAbiertoOriginal.SampleRate) Or _
(ArchivoAbierto.TamanoCuadro <> ArchivoAbiertoOriginal.TamanoCuadro) Or _
(ArchivoAbierto.VideoCalidad <> ArchivoAbiertoOriginal.VideoCalidad) Or _
(ArchivoAbierto.Videofps <> ArchivoAbiertoOriginal.Videofps) Or _
(ArchivoAbierto.CodecSubtituloS <> ArchivoAbiertoOriginal.CodecSubtituloS)
FEHuboCambios = Ret
If Ret = True Then Exit Function
Ret = (ArchivoAbierto.ReadInputAtNFR <> ArchivoAbiertoOriginal.ReadInputAtNFR) Or _
(ArchivoAbierto.BufferSize <> ArchivoAbiertoOriginal.BufferSize)
FEHuboCambios = Ret
If Ret = True Then Exit Function
On Error GoTo ErrH
If ArchivoAbierto.ECodecANombre <> "" Then
Ret = (ArchivoAbierto.InfoECodecA.AcercaDe <> ArchivoAbiertoOriginal.InfoECodecA.AcercaDe) Or _
(ArchivoAbierto.InfoECodecA.RutaEXE <> ArchivoAbiertoOriginal.InfoECodecA.RutaEXE) Or _
(ArchivoAbierto.InfoECodecA.CmdLffmpeg <> ArchivoAbiertoOriginal.InfoECodecA.CmdLffmpeg) Or _
(ArchivoAbierto.InfoECodecA.ExtensionSalida <> ArchivoAbiertoOriginal.InfoECodecA.ExtensionSalida) Or _
(ArchivoAbierto.InfoECodecA.ffFileExtension <> ArchivoAbiertoOriginal.InfoECodecA.ffFileExtension)
FEHuboCambios = Ret
If Ret = True Then Exit Function
For i = LBound(ArchivoAbierto.InfoECodecA.Parametros) To UBound(ArchivoAbierto.InfoECodecA.Parametros)
If ArchivoAbierto.InfoECodecA.Parametros(i).Valor <> ArchivoAbiertoOriginal.InfoECodecA.Parametros(i).Valor Then
Ret = True
Exit For
End If
Next
FEHuboCambios = Ret
If Ret = True Then Exit Function
For i = LBound(ArchivoAbierto.InfoECodecA.FFParUserValues) To UBound(ArchivoAbierto.InfoECodecA.FFParUserValues)
If ArchivoAbierto.InfoECodecA.FFParUserValues(i) <> ArchivoAbiertoOriginal.InfoECodecA.FFParUserValues(i) Then
Ret = True
Exit For
End If
Next
FEHuboCambios = Ret
If Ret = True Then Exit Function
End If
If ArchivoAbierto.ECodecVNombre <> "" Then
Ret = (ArchivoAbierto.InfoECodecV.AcercaDe <> ArchivoAbiertoOriginal.InfoECodecV.AcercaDe) Or _
(ArchivoAbierto.InfoECodecV.RutaEXE <> ArchivoAbiertoOriginal.InfoECodecV.RutaEXE) Or _
(ArchivoAbierto.InfoECodecV.CmdLffmpeg <> ArchivoAbiertoOriginal.InfoECodecV.CmdLffmpeg) Or _
(ArchivoAbierto.InfoECodecV.ExtensionSalida <> ArchivoAbiertoOriginal.InfoECodecV.ExtensionSalida) Or _
(ArchivoAbierto.InfoECodecV.ffFileExtension <> ArchivoAbiertoOriginal.InfoECodecV.ffFileExtension)
FEHuboCambios = Ret
If Ret = True Then Exit Function
For i = LBound(ArchivoAbierto.InfoECodecV.Parametros) To UBound(ArchivoAbierto.InfoECodecV.Parametros)
If ArchivoAbierto.InfoECodecV.Parametros(i).Valor <> ArchivoAbiertoOriginal.InfoECodecV.Parametros(i).Valor Then
Ret = True
Exit For
End If
Next
FEHuboCambios = Ret
If Ret = True Then Exit Function
For i = LBound(ArchivoAbierto.InfoECodecV.FFParUserValues) To UBound(ArchivoAbierto.InfoECodecV.FFParUserValues)
If ArchivoAbierto.InfoECodecV.FFParUserValues(i) <> ArchivoAbiertoOriginal.InfoECodecV.FFParUserValues(i) Then
Ret = True
Exit For
End If
Next
FEHuboCambios = Ret
If Ret = True Then Exit Function
End If
Exit Function
ErrH:
FEHuboCambios = True
End Function

Public Function FEGuardar(Optional Ruta As String) As Boolean
Dim NumeroArchivo As Integer, SavePath As String
On Error GoTo ErrH
FEGuardar = False
If Ruta = "" Then
Ruta = Appfilesadm.IniciarAdministrador(App.Path & "\appfiles\formats", "lfm", 2, True)
If Ruta = "" Then Exit Function
End If
If ScriptObj.CrearArbol(App.Path & "\appfiles\formats") = False Then
Lang.MsgCanotCreateDir (App.Path & "\appfiles\formats")
Exit Function
End If
NumeroArchivo = FreeFile()
Open Ruta For Binary As NumeroArchivo
Put NumeroArchivo, , ArchivoAbierto
Close NumeroArchivo
If ConfManualMode = 0 Or (LCase(Ruta) = LCase(RutaArchivoAbierto)) Then ArchivoAbiertoOriginal = ArchivoAbierto
If ConfManualMode = 0 Then RutaArchivoAbierto = Ruta
FEGuardar = True
Exit Function
ErrH:
Lang.MsgCantWriteFile
End Function

Public Function FECerrar() As Boolean
Dim Buffer As Appfilesadm.FormatPerf
FECerrar = False
If FEHuboCambios Then
Select Case Lang.QuestionSaveChanges(Replace(Chr(34) & ScriptObj.NombreBase(RutaArchivoAbierto) & Chr(34), Chr(34) & Chr(34), ""))
Case Is = vbYes
If FEGuardar(RutaArchivoAbierto) = False Then Exit Function
Case Is = vbCancel: Exit Function
End Select
End If
ArchivoAbierto = Buffer
ArchivoAbiertoOriginal = Buffer
RutaArchivoAbierto = ""
Form7.LoadECA_Menu.Visible = True
Form7.LoadFCA_Menu.Visible = True
Form7.LoadECV_Menu.Visible = True
Form7.LoadFCV_Menu.Visible = True
Form7.UnloadECA_Menu.Visible = False
Form7.UnloadECV_Menu.Visible = False
Form7.ReloadECA_Menu.Visible = False
Form7.ReloadECV_Menu.Visible = False
Form7.Help_AboutECA.Visible = False
Form7.Help_AboutECV.Visible = False
Form7.Opt_FindExe.Visible = False
CatIndex = 1
Call ListarParametros(CatIndex)
FECerrar = True
End Function

Public Sub FEAbrir(Optional Ruta As String)
Dim NArchivo As Integer, BufPerfil As Appfilesadm.FormatPerf
If ConfManualMode = 0 Then: If FECerrar = False Then Exit Sub
If Ruta = "" Then
Ruta = Appfilesadm.IniciarAdministrador(App.Path & "\appfiles\formats", "lfm", 1, True)
If Ruta = "" Then Exit Sub
End If
If ScriptObj.ExisteArchivo(Ruta) = False Then
If ScriptObj.NombreBase(Ruta) <> "" Then
Lang.MsgFileNotFound (ScriptObj.NombreBase(Ruta))
Else
ArchivoAbierto = BufPerfil
GoTo Actualizar
End If
End If
On Error GoTo ErrH
NArchivo = FreeFile()
Open Ruta For Binary As NArchivo
Get NArchivo, , ArchivoAbierto
Close NArchivo
Actualizar:
If ConfManualMode <> 1 Then
RutaArchivoAbierto = Ruta
ArchivoAbiertoOriginal = ArchivoAbierto
End If
If ArchivoAbierto.ECodecANombre <> "" Then
Form7.LoadECA_Menu.Visible = False
Form7.LoadFCA_Menu.Visible = False
Form7.UnloadECA_Menu.Visible = True
Form7.ReloadECA_Menu.Visible = True
Form7.Help_AboutECA.Visible = True
Form7.FindEXE_A.Visible = (ArchivoAbierto.InfoECodecA.RutaEXE <> "<ffmpeg.exe>")
Form7.Opt_FindExe.Visible = Form7.FindEXE_A.Visible
If Form7.Opt_FindExe.Visible Then Form7.FindEXE_Sep1.Visible = False
End If
If ArchivoAbierto.ECodecVNombre <> "" Then
Form7.LoadECV_Menu.Visible = False
Form7.LoadFCV_Menu.Visible = False
Form7.UnloadECV_Menu.Visible = True
Form7.ReloadECV_Menu.Visible = True
Form7.Help_AboutECV.Visible = True
Form7.FindEXE_V.Visible = (ArchivoAbierto.InfoECodecV.RutaEXE <> "<ffmpeg.exe>")
Form7.Opt_FindExe.Visible = (Form7.FindEXE_V.Visible Or Form7.FindEXE_A.Visible)
If Form7.Opt_FindExe.Visible Then Form7.FindEXE_Sep1.Visible = False
End If
Call ListarParametros(CatIndex)
Exit Sub
ErrH:
Lang.MsgCantFileRead (Ruta)
End Sub

Public Sub FEDescartarCambios()
ArchivoAbierto = ArchivoAbiertoOriginal
Form7.LoadECA_Menu.Visible = (ArchivoAbierto.ECodecANombre = "")
Form7.UnloadECA_Menu.Visible = (ArchivoAbierto.ECodecANombre <> "")
Form7.ReloadECA_Menu.Visible = (ArchivoAbierto.ECodecANombre <> "")
Form7.Help_AboutECA.Visible = (ArchivoAbierto.ECodecANombre <> "")
Form7.LoadECV_Menu.Visible = (ArchivoAbierto.ECodecVNombre = "")
Form7.UnloadECV_Menu.Visible = (ArchivoAbierto.ECodecVNombre <> "")
Form7.ReloadECV_Menu.Visible = (ArchivoAbierto.ECodecVNombre <> "")
Form7.Help_AboutECV.Visible = (ArchivoAbierto.ECodecVNombre <> "")
Call ListarParametros(CatIndex)
End Sub

Public Sub ParLimpiarTodos()
Dim Buffer As Appfilesadm.FormatPerf, i As Integer
If ArchivoAbierto.ECodecANombre <> "" Then
Buffer.ECodecANombre = ArchivoAbierto.ECodecANombre
Buffer.InfoECodecA = ArchivoAbierto.InfoECodecA
For i = LBound(Buffer.InfoECodecA.Parametros) To UBound(Buffer.InfoECodecA.Parametros)
If Buffer.InfoECodecA.Parametros(i).Tipo <> 2 Then Buffer.InfoECodecA.Parametros(i).Valor = "" Else Buffer.InfoECodecA.Parametros(i).Valor = "0"
Next
For i = LBound(Buffer.InfoECodecA.FFParUserValues) To UBound(Buffer.InfoECodecA.FFParUserValues)
Buffer.InfoECodecA.FFParUserValues(i) = ""
Next
End If
If ArchivoAbierto.ECodecVNombre <> "" Then
Buffer.ECodecVNombre = ArchivoAbierto.ECodecVNombre
Buffer.InfoECodecV = ArchivoAbierto.InfoECodecV
For i = LBound(Buffer.InfoECodecV.Parametros) To UBound(Buffer.InfoECodecV.Parametros)
If Buffer.InfoECodecV.Parametros(i).Tipo <> 2 Then Buffer.InfoECodecV.Parametros(i).Valor = "" Else Buffer.InfoECodecV.Parametros(i).Valor = "0"
Next
For i = LBound(Buffer.InfoECodecV.FFParUserValues) To UBound(Buffer.InfoECodecV.FFParUserValues)
Buffer.InfoECodecV.FFParUserValues(i) = ""
Next
End If
ArchivoAbierto = Buffer
Call ListarParametros(CatIndex)
End Sub

Public Sub ParLimpiarActual()
Dim i As Integer
With ArchivoAbierto
Select Case CatIndex
Case Is = 0
.ContenedorE = ""
.CodecAudioE = ""
.CodecVideoE = ""
.CodecSubtituloE = ""
.PixelFormatE = ""
.ParAdicionalE = ""
Case Is = 1
.ContenedorS = ""
.CodecAudioS = ""
.CodecVideoS = ""
.CodecSubtituloS = ""
.PixelFormatS = ""
.Objetivo = ""
.RelAspect = ""
.EliminarSubtitulos = 0
.ParAdicionalS = ""
.ExtensionS = ""
.Multisalida = 0
Case Is = 2
If .ECodecANombre = "" Then
.BitrateAudio = ""
.BitrateMaxAudio = ""
.BitrateMinAudio = ""
.AudioCalidad = ""
.Canales = ""
.SampleRate = ""
.EliminarAudio = 0
End If
If .ECodecANombre <> "" Then
For i = LBound(.InfoECodecA.Parametros) To UBound(.InfoECodecA.Parametros)
If .InfoECodecA.Parametros(i).Tipo = 2 Then .InfoECodecA.Parametros(i).Valor = "0" Else .InfoECodecA.Parametros(i).Valor = ""
Next
For i = LBound(.InfoECodecA.FFParUserValues) To UBound(.InfoECodecA.FFParUserValues)
.InfoECodecA.FFParUserValues(i) = ""
Next
End If
Case Is = 3
If .ECodecVNombre = "" Then
.BitrateVideo = ""
.BitrateMaxVideo = ""
.BitrateMinVideo = ""
.VideoCalidad = ""
.CalidadMax = ""
.CalidadMin = ""
.Videofps = ""
.TamanoCuadro = ""
.EliminarVideo = 0
End If
If .ECodecVNombre <> "" Then
For i = LBound(.InfoECodecV.Parametros) To UBound(.InfoECodecV.Parametros)
If .InfoECodecV.Parametros(i).Tipo = 2 Then .InfoECodecV.Parametros(i).Valor = "0" Else .InfoECodecV.Parametros(i).Valor = ""
Next
For i = LBound(.InfoECodecV.FFParUserValues) To UBound(.InfoECodecV.FFParUserValues)
.InfoECodecV.FFParUserValues(i) = ""
Next
End If
End Select
End With
Call ListarParametros(CatIndex)
End Sub

Public Sub LlenarCombosAyudaAvanzadaFmts(Indice As Byte)
Dim i As Integer
If Indice = 0 Then
If FFMuxersList(1) <> "" Then
If Form7.Combo1.ListCount = 0 Then
For i = LBound(FFMuxersList) To UBound(FFMuxersList)
Form7.Combo1.AddItem FFMuxersList(i)
Next
End If
End If
If FFDemuxersList(1) <> "" Then
If Form7.Combo3.ListCount = 0 Then
For i = LBound(FFDemuxersList) To UBound(FFDemuxersList)
Form7.Combo3.AddItem FFDemuxersList(i)
Next
End If
End If
End If
If Indice = 1 Then
If Form7.Option5.Value Then
If FFAEncodersList(1) <> "" Then
For i = LBound(FFAEncodersList) To UBound(FFAEncodersList)
Form7.Combo4.AddItem FFAEncodersList(i)
Next
End If
If FFVEncodersList(1) <> "" Then
For i = LBound(FFVEncodersList) To UBound(FFVEncodersList)
Form7.Combo5.AddItem FFVEncodersList(i)
Next
End If
Else
If FFADecodersList(1) <> "" Then
For i = LBound(FFADecodersList) To UBound(FFADecodersList)
Form7.Combo4.AddItem FFADecodersList(i)
Next
End If
If FFVDecodersList(1) <> "" Then
For i = LBound(FFVDecodersList) To UBound(FFVDecodersList)
Form7.Combo5.AddItem FFVDecodersList(i)
Next
End If
End If
End If
End Sub

Public Sub ImportarDeCmdL(Salida As String, Entrada As String)
Dim i As Long, j As Long
Entrada = " " & Entrada & " "
Salida = " " & Salida & " "
With ArchivoAbierto

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.BufferSize & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.BufferSize) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.BufferSize = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.BufferSize & " " & .BufferSize, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.AudioCalidad & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.AudioCalidad) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.AudioCalidad = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.AudioCalidad & " " & .AudioCalidad, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.BitrateAudio & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.BitrateAudio) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.BitrateAudio = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.BitrateAudio & " " & .BitrateAudio, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.BitrateMaxAudio & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.BitrateMaxAudio) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.BitrateMaxAudio = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.BitrateMaxAudio & " " & .BitrateMaxAudio, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.BitrateMaxVideo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.BitrateMaxVideo) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.BitrateMaxVideo = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.BitrateMaxVideo & " " & .BitrateMaxVideo, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.BitrateMinAudio & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.BitrateMinAudio) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.BitrateMinAudio = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.BitrateMinAudio & " " & .BitrateMinAudio, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.BitrateMinVideo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.BitrateMinVideo) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.BitrateMinVideo = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.BitrateMinVideo & " " & .BitrateMinVideo, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.BitrateVideo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.BitrateVideo) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.BitrateVideo = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.BitrateVideo & " " & .BitrateVideo, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.Canales & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.Canales) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.Canales = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.Canales & " " & .Canales, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.VideoCalidadMax & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.VideoCalidadMax) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.CalidadMax = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.VideoCalidadMax & " " & .CalidadMax, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.VideoCalidadMin & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.VideoCalidadMin) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.CalidadMin = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.VideoCalidadMin & " " & .CalidadMin, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.CodecAudio & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.CodecAudio) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.CodecAudioS = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.CodecAudio & " " & .CodecAudioS, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.CodecSubtitulo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.CodecSubtitulo) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.CodecSubtituloS = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.CodecSubtitulo & " " & .CodecSubtituloS, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.CodecVideo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.CodecVideo) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.CodecVideoS = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.CodecVideo & " " & .CodecVideoS, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.Contenedor & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.Contenedor) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.ContenedorS = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.Contenedor & " " & .ContenedorS, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.EliminarAudio & " ")
If i > 0 Then
.EliminarAudio = 1
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.EliminarAudio, "")
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.EliminarSubtitulos & " ")
If i > 0 Then
.EliminarSubtitulos = 1
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.EliminarSubtitulos, "")
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.EliminarVideo & " ")
If i > 0 Then
.EliminarVideo = 1
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.EliminarVideo, "")
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.Objetivo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.Objetivo) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.Objetivo = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.Objetivo & " " & .Objetivo, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.PixelFormat & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.PixelFormat) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.PixelFormatS = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.PixelFormat & " " & .PixelFormatS, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.RelAspect & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.RelAspect) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.RelAspect = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.RelAspect & " " & .RelAspect, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.SampleRate & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.SampleRate) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.SampleRate = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.SampleRate & " " & .SampleRate, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.TamanoCuadro & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.TamanoCuadro) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.TamanoCuadro = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.TamanoCuadro & " " & .TamanoCuadro, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.VideoCalidad & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.VideoCalidad) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.VideoCalidad = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.VideoCalidad & " " & .VideoCalidad, "")
End If
End If

i = InStr(1, Salida, " " & ffmpeg.FFmpegParametros.Videofps & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.Videofps) + 2
j = InStr(i, Salida, " ")
If j > 0 Then
.Videofps = Mid(Salida, i, j - i)
Salida = Replace(Salida, " " & ffmpeg.FFmpegParametros.Videofps & " " & .Videofps, "")
End If
End If

Salida = Trim(Salida)
If Salida <> "" Then .ParAdicionalS = Salida

i = InStr(1, Entrada, " " & ffmpeg.FFmpegParametros.CodecAudio & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.CodecAudio) + 2
j = InStr(i, Entrada, " ")
If j > 0 Then
.CodecAudioE = Mid(Entrada, i, j - i)
Entrada = Replace(Entrada, " " & ffmpeg.FFmpegParametros.CodecAudio & " " & .CodecAudioE, "")
End If
End If

i = InStr(1, Entrada, " " & ffmpeg.FFmpegParametros.CodecSubtitulo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.CodecSubtitulo) + 2
j = InStr(i, Entrada, " ")
If j > 0 Then
.CodecSubtituloE = Mid(Entrada, i, j - i)
Entrada = Replace(Entrada, " " & ffmpeg.FFmpegParametros.Videofps & " " & .CodecSubtituloE, "")
End If
End If

i = InStr(1, Entrada, " " & ffmpeg.FFmpegParametros.CodecVideo & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.CodecVideo) + 2
j = InStr(i, Entrada, " ")
If j > 0 Then
.CodecVideoE = Mid(Salida, i, j - i)
Entrada = Replace(Entrada, " " & ffmpeg.FFmpegParametros.CodecVideo & " " & .CodecVideoE, "")
End If
End If

i = InStr(1, Entrada, " " & ffmpeg.FFmpegParametros.Contenedor & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.Contenedor) + 2
j = InStr(i, Entrada, " ")
If j > 0 Then
.ContenedorE = Mid(Entrada, i, j - i)
Entrada = Replace(Entrada, " " & ffmpeg.FFmpegParametros.Contenedor & " " & .ContenedorE, "")
End If
End If

i = InStr(1, Entrada, " " & ffmpeg.FFmpegParametros.PixelFormat & " ")
If i > 0 Then
i = i + Len(ffmpeg.FFmpegParametros.PixelFormat) + 2
j = InStr(i, Entrada, " ")
If j > 0 Then
.PixelFormatE = Mid(Entrada, i, j - i)
Entrada = Replace(Entrada, " " & ffmpeg.FFmpegParametros.PixelFormat & " " & .PixelFormatE, "")
End If
End If

i = InStr(1, Entrada, " " & ffmpeg.FFmpegParametros.ReadInputAtNFR & " ")
If i > 0 Then
.ReadInputAtNFR = 1
Entrada = Replace(Entrada, " " & ffmpeg.FFmpegParametros.ReadInputAtNFR, "")
End If

Entrada = Trim(Entrada)
If Entrada <> "" Then .ParAdicionalE = Entrada
End With

Call ListarParametros(CatIndex)
End Sub

Public Sub BuscarEjecutableCodecs(Tipo As Byte)
Dim Ruta() As String, NombreInicial As String, DirectorioInicial As String
If Tipo = 0 Then
NombreInicial = Aplicacion.CompletarRuta(ArchivoAbierto.InfoECodecA.RutaEXE)
DirectorioInicial = ScriptObj.DirectorioPadre(NombreInicial) & "\"
NombreInicial = ScriptObj.NombreBase(NombreInicial) & "." & ScriptObj.DevolverExtension(NombreInicial)
If NombreInicial = "." Then NombreInicial = ""
Ruta = APIS.OpenFileDialog("*.exe" & Chr(0) & "*.exe", Form7.hWnd, DirectorioInicial, , False, , NombreInicial)
If Ruta(1) = "" Then Exit Sub
ArchivoAbierto.InfoECodecA.RutaEXE = Replace(Ruta(1), App.Path, "")
Else
NombreInicial = Aplicacion.CompletarRuta(ArchivoAbierto.InfoECodecV.RutaEXE)
DirectorioInicial = ScriptObj.DirectorioPadre(NombreInicial) & "\"
NombreInicial = ScriptObj.NombreBase(NombreInicial) & "." & ScriptObj.DevolverExtension(NombreInicial)
If NombreInicial = "." Then NombreInicial = ""
Ruta = APIS.OpenFileDialog("*.exe" & Chr(0) & "*.exe", Form7.hWnd, DirectorioInicial, , False, , NombreInicial)
If Ruta(1) = "" Then Exit Sub
ArchivoAbierto.InfoECodecV.RutaEXE = Replace(Ruta(1), App.Path, "")
End If
End Sub

Private Sub OrdenarListaAlfabetica(ByRef Lista() As String)
Dim i As Long, Temp As String, j As Integer, NumMov As Long
Dim ChC1 As Integer, ChC2 As Integer, Len1 As Integer, Len2 As Integer
NumMov = 1
While NumMov > 0
    NumMov = 0
    i = LBound(Lista)
    While i < UBound(Lista)
        ChC1 = 0
        ChC2 = 0
        If Lista(i) <> "" Then
            If Lista(i) <> Lista(i + 1) Then
                Len1 = Len(Lista(i))
                Len2 = Len(Lista(i + 1))
                j = 1
                While ChC1 = ChC2 And Len1 >= j And Len2 >= j
                    ChC1 = Asc(Mid(Lista(i), j, 1))
                    ChC2 = Asc(Mid(Lista(i + 1), j, 1))
                    j = j + 1
                Wend
                If ChC1 = ChC2 Then
                    If Len1 > Len2 Then ChC1 = ChC1 + 1 Else ChC1 = ChC1 - 1
                End If
            End If
        Else
            If Lista(i + 1) <> "" Then ChC2 = 1
        End If
        If ChC1 > ChC2 Then
            Temp = Lista(i + 1)
            Lista(i + 1) = Lista(i)
            Lista(i) = Temp
            NumMov = NumMov + 1
        End If
        i = i + 1
    Wend
Wend
End Sub

