zero_copy_video_player/mainwindow.h
2026-08-05 14:07:38 -03:00

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