Attribute VB_Name = "FilterEditor"
Option Explicit
Private RutaArchivoAbierto As String
Private ArchivoAbierto As Appfilesadm.FFFiltro
Private ArchivoAbiertoOriginal As Appfilesadm.FFFiltro
Private BloquearRefresh As Byte
Private RutasPrueba() As String
Private RutasPruebaCount As Integer
Public EnProceso As Byte

Public Sub IniciarEditorFiltros(Optional OpenFileName As String)
Dim FormsStates() As Boolean, i As Integer, EnEjecucion As Boolean
ReDim FormsStates(0 To Forms.Count - 1)
For i = 0 To Forms.Count - 1
FormsStates(i) = Forms(i).Visible
Forms(i).Visible = False
Next
Load Form4
Form4.Frame3.Left = Form4.Frame1.Left
Form4.Frame3.Top = Form4.Frame1.Top
APIS.AddHScroll_listbox Form4.List1, 1800
If Form1.List1.ListCount > 0 Then
For i = 0 To Form1.List1.ListCount - 1: Form4.List1.AddItem Form1.List1.List(i): Next
End If
If OpenFileName <> "" Then FEAbrirArchivo (OpenFileName)
Form4.Show
EnEjecucion = True
While EnEjecucion
DoEvents
EnEjecucion = False
For i = 0 To Forms.Count - 1
If Forms(i) Is Form4 Then
EnEjecucion = True
Exit For
End If
Next
Wend
Erase RutasPrueba
RutasPruebaCount = 0
For i = 0 To Forms.Count - 1
Forms(i).Visible = FormsStates(i)
Next
End Sub

Public Sub FEAbrirArchivo(Optional FileName As String)
Dim RutaArchivo As String, NumArchivo As Integer
On Error GoTo ErrH
If FEHuboCambios Then
If FECerrarArchivo = False Then Exit Sub
End If
If FileName = "" Then
RutaArchivo = Appfilesadm.IniciarAdministrador(App.Path & "\appfiles\filters", "lfl", 1, True)
If RutaArchivo = "" Then Exit Sub
Else
RutaArchivo = App.Path & "\appfiles\filters\" & FileName & ".lfl"
End If
NumArchivo = FreeFile()
Open RutaArchivo For Binary As NumArchivo
Get NumArchivo, , ArchivoAbiertoOriginal
Close NumArchivo
ArchivoAbierto = ArchivoAbiertoOriginal
RutaArchivoAbierto = RutaArchivo
BloquearRefresh = 1
With Form4
.Combo1.ListIndex = ArchivoAbierto.Tipo
.Text1.Text = ArchivoAbierto.Comandos
.Check1.Value = ArchivoAbierto.MultiEntrada
End With
BloquearRefresh = 0
Exit Sub
ErrH:
Lang.MsgCantFileRead (App.Path & "\appfiles\filters\" & FileName & ".lfl")
End Sub

Private Function FEHuboCambios() As Boolean
FEHuboCambios = (ArchivoAbierto.Comandos <> ArchivoAbiertoOriginal.Comandos) Or (ArchivoAbierto.Tipo <> ArchivoAbiertoOriginal.Tipo) Or (ArchivoAbierto.MultiEntrada <> ArchivoAbiertoOriginal.MultiEntrada)
End Function

Public Function FEGuardarArchivo(Optional GuardarComo As Byte) As Boolean
Dim NombreArchivo As String, RutaArchivo As String, NumArchivo As Integer
On Error GoTo ErrH
If GuardarComo = 1 Or RutaArchivoAbierto = "" Then
RutaArchivo = Appfilesadm.IniciarAdministrador(App.Path & "\appfiles\filters", "lfl", 2, True)
If RutaArchivo = "" Then Exit Function
Else
RutaArchivo = RutaArchivoAbierto
End If
If ScriptObj.CrearArbol(App.Path & "\appfiles\filters") = False Then
Lang.MsgCanotCreateDir (App.Path & "\appfiles\filters")
Exit Function
End If
NumArchivo = FreeFile()
Open RutaArchivo For Binary As NumArchivo
Put NumArchivo, , ArchivoAbierto
Close NumArchivo
ArchivoAbiertoOriginal = ArchivoAbierto
RutaArchivoAbierto = RutaArchivo
FEGuardarArchivo = True
Exit Function
ErrH:
Lang.MsgCantWriteFile
End Function

Public Function FECerrarArchivo() As Boolean
Dim Buffer As FFFiltro
If FEHuboCambios Then
Select Case Lang.QuestionSaveChanges(ScriptObj.NombreBase(RutaArchivoAbierto))
Case Is = vbYes
If FEGuardarArchivo(0) = False Then Exit Function
Case Is = vbCancel: Exit Function
End Select
End If
RutaArchivoAbierto = ""
ArchivoAbierto = Buffer
ArchivoAbiertoOriginal = Buffer
With Form4
.Combo1.ListIndex = 0
.Text1.Text = ""
.Check1.Value = 0
End With
FECerrarArchivo = True
End Function

Public Function FESalir(Optional DescargarForm As Boolean) As Boolean
If FECerrarArchivo = False Then Exit Function
If DescargarForm Then Unload Form4
FESalir = True
End Function

Public Sub FERefreshBuffer()
If BloquearRefresh = 1 Then Exit Sub
With Form4
ArchivoAbierto.Comandos = .Text1.Text
ArchivoAbierto.MultiEntrada = .Check1.Value
ArchivoAbierto.Tipo = .Combo1.ListIndex
End With
End Sub

Public Sub FEDescartarCambios()
ArchivoAbierto = ArchivoAbiertoOriginal
With Form4
.Text1.Text = ArchivoAbierto.Comandos
.Check1.Value = ArchivoAbierto.MultiEntrada
.Combo1.ListIndex = ArchivoAbierto.Tipo
End With
End Sub

Public Sub FEAgregarRutasDePrueba()
Dim Rutas() As String, i As Integer
Rutas = APIS.OpenFileDialog(, Form4.hWnd, vbNullString, , True, 4092)
If Rutas(1) = "" Then Exit Sub
For i = 1 To UBound(Rutas)
RutasPruebaCount = RutasPruebaCount + 1
ReDim Preserve RutasPrueba(1 To RutasPruebaCount)
RutasPrueba(RutasPruebaCount) = Rutas(i)
Form4.List1.AddItem Rutas(i)
Next
End Sub

Public Sub ProbarFiltro()
Dim ArchivosEntrada As String, i As Integer, Ruta As String
Dim Comandos As String, MsgSM As Byte, IniDir As String
Dim NumArchivosSel As Integer, CaptionB As String
If ffmpeg.ComprobarExistenciaFFplay = False Then Exit Sub
If ffmpeg.ComprobarExistenciaFFmpeg = False Then Exit Sub

If Form4.Text1.Text = "" Then
Lang.FEMsgParNoEspecificado
Exit Sub
End If
If Form4.List1.ListCount > 0 Then
For i = 0 To Form4.List1.ListCount - 1
If Form4.List1.Selected(i) = True Then
NumArchivosSel = NumArchivosSel + 1
If i < Aplicacion.InFilesCount Then Ruta = Aplicacion.InFiles(i + 1) Else Ruta = RutasPrueba(i + 1 - Aplicacion.InFilesCount)
ArchivosEntrada = ArchivosEntrada & " -i " & Chr(34) & Ruta & Chr(34)
End If
Next
ArchivosEntrada = Trim(ArchivosEntrada)
End If
If ArchivosEntrada = "" Then
Lang.FEMsgNoFilesSelect
Exit Sub
End If
If Form4.Check1.Value = 1 Then
If NumArchivosSel < 2 Then
Lang.FEMsgSelectMasFiles
Exit Sub
End If
End If

Comandos = " " & ArchivosEntrada & " " _
& ffmpeg.FFmpegParametros.Contenedor & " matroska " _
& ffmpeg.FFmpegParametros.CodecAudio & " pcm_s16le " _
& ffmpeg.FFmpegParametros.CodecVideo & " rawvideo " _
& ffmpeg.FFmpegParametros.PixelFormat & " yuv420p"
Select Case Form4.Combo1.ListIndex
Case Is = 0: Comandos = Comandos & " " & ffmpeg.FFmpegParametros.FiltroAudio
Case Is = 1: Comandos = Comandos & " " & ffmpeg.FFmpegParametros.FiltroVideo
Case Is = 2: Comandos = Comandos & " " & ffmpeg.FFmpegParametros.Filtro
End Select
Comandos = Comandos & " " & Form4.Text1.Text
If Form4.Check2.Value = 0 Then
Comandos = ScriptObj.NombreBase(ffmpeg.ffmpegPath) & "." & ScriptObj.DevolverExtension(ffmpeg.ffmpegPath) & Comandos
Comandos = Comandos & " pipe:1 | " & Chr(34) & ffmpeg.ffplayPath & Chr(34)
If Form4.Check3.Value = 1 Then Comandos = Comandos & " " & ffmpeg.FFmpegParametros.EliminarAudio & " -i pipe:0" Else Comandos = Comandos & " -i pipe:0"
Comandos = "cmd.exe /C " & Comandos
IniDir = ScriptObj.DirectorioPadre(ffmpeg.ffmpegPath)
MsgSM = 3
Else
Comandos = Chr(34) & ffmpeg.ffmpegPath & Chr(34) & Comandos & " " & ffmpeg.FFmpegParametros.Duracion & " 1 md5:"
MsgSM = 1
End If

Form4.Frame3.Visible = True
Form4.Menu_File.Enabled = False
Form4.Menu_Help.Enabled = False
EnProceso = 1
Call CaptureConsole.ExecAndCapture(Comandos, IniDir, , , Form4.Text2, False, MsgSM, , 0)
EnProceso = 0
CaptionB = Form4.Frame3.Caption
Form4.Frame3.Caption = Form4.Frame3.Tag
Form4.Frame3.Tag = CaptionB
End Sub
