#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "glwidget.h" #include "videodecoder.h" /** * @brief Ventana principal de la aplicación. * Crea los controles de la interfaz de usuario de reproducción y maneja las conexiones * y sincronización con el decodificador de video y el renderizador OpenGL. */ class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow() override; // Método auxiliar para abrir directamente un archivo de video (ej. desde argumentos de terminal) void openVideoFileDirect(const QString &fileName); private slots: // Muestra un selector de archivos nativo del sistema operativo para buscar videos void openVideoFile(); // Conmutador Play/Pausa de la reproducción de video void togglePlayPause(); // Alternador para enmudecer (silenciar) el video void toggleMute(); // Método gatillado cuando el usuario arrastra manualmente la barra de progreso (Seek) void setVideoPosition(int position); // Actualiza la posición de la barra de progreso y el texto de tiempo mientras avanza el video void onPositionChanged(qint64 positionMs); // Restablece la UI al estado inicial cuando finaliza la reproducción void onPlaybackFinished(); private: // Construcción y personalización estilística de la UI void setupUI(); GLWidget *m_glWidget; // El Widget de pintado OpenGL/CUDA VideoDecoder *m_videoDecoder; // El hilo decodificador de video FFmpeg/CUDA bool m_updatingSeek; // Bandera lógica para evitar bucles de actualización entre el reproductor y la barra de progreso // Elementos de la interfaz de usuario multimedia QPushButton *m_playBtn; // Botón conmutador Play/Pause QPushButton *m_muteBtn; // Botón Mute QSlider *m_seekBar; // Barra de progreso interactiva (slider horizontal) QLabel *m_timeLabel; // Etiqueta de texto de tiempo (Ej: 00:30 / 02:45) }; #endif // MAINWINDOW_H