61 lines
2.1 KiB
C++
61 lines
2.1 KiB
C++
#ifndef MAINWINDOW_H
|
|
#define MAINWINDOW_H
|
|
|
|
#include <QMainWindow>
|
|
#include <QSlider>
|
|
#include <QPushButton>
|
|
#include <QLabel>
|
|
#include <QCheckBox>
|
|
#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
|