Files
QtAV/examples/player/MainWindow.h
T
wang-bin 4851402f30 add signal parameter AVPlayer.seekFinished(qint64)
The position() you get in the slot is not exactly the video seek finish
timestamp, but the clock value. You must use the signal parameter. So if
audio stream seeking is not finished, the value can be very different
from video timestamp.
TODO: emit seekFinished when all streams done the seeking?
2016-01-24 22:21:25 +08:00

210 lines
5.8 KiB
C++

/******************************************************************************
QtAV Player Demo: this file is part of QtAV examples
Copyright (C) 2012-2015 Wang Bin <wbsecg1@gmail.com>
* This file is part of QtAV
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QUrl>
class QWidgetAction;
class QToolButton;
namespace QtAV {
class AudioOutput;
class AVError;
class AVPlayer;
class AVClock;
class VideoRenderer;
class LibAVFilterAudio;
class LibAVFilterVideo;
class SubtitleFilter;
class VideoPreviewWidget;
}
class QMenu;
class QTimeEdit;
class QVBoxLayout;
class QLabel;
class QPushButton;
class QSpinBox;
class QTimeEdit;
class Button;
class Slider;
class PlayList;
class DecoderConfigPage;
class VideoEQConfigPage;
class StatisticsView;
class OSDFilter;
class AVFilterSubtitle;
class Preview;
class MainWindow : public QWidget
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void setAudioBackends(const QStringList& backends);
bool setRenderer(QtAV::VideoRenderer* renderer);
void setVideoDecoderNames(const QStringList& vd);
public slots:
void play(const QString& name);
void play(const QUrl& url);
void openFile();
void togglePlayPause();
void showNextOSD();
signals:
void ready();
private slots:
void stopUnload();
void about();
void help();
void openUrl();
void initAudioTrackMenu();
void updateChannelMenu();
void switchAspectRatio(QAction* action);
void toggleRepeat(bool);
void setRepeateMax(int);
void changeVO(QAction* action);
void changeChannel(QAction* action);
void changeAudioTrack(QAction* action);
void onTVMenuClick();
void playOnlineVideo(QAction *action);
void onPlayListClick(const QString& key, const QString& value);
void processPendingActions();
void initPlayer();
void setupUi();
void onSpinBoxChanged(double v);
void onStartPlay();
void onStopPlay();
void onPaused(bool p);
void onSpeedChange(qreal speed);
void seek();
void showHideVolumeBar();
void setVolume();
void tryHideControlBar();
void tryShowControlBar();
void showInfo();
void onPositionChange(qint64 pos);
void repeatAChanged(const QTime& t);
void repeatBChanged(const QTime& t);
void onTimeSliderHover(int pos, int value);
void onTimeSliderLeave();
void handleError(const QtAV::AVError& e);
void onMediaStatusChanged();
void onBufferProgress(qreal percent);
void onVideoEQEngineChanged();
void onBrightnessChanged(int b);
void onContrastChanged(int c);
void onHueChanged(int h);
void onSaturationChanged(int s);
void onSeekFinished(qint64 pos);
void onCaptureConfigChanged();
void onAVFilterVideoConfigChanged();
void onAVFilterAudioConfigChanged();
void onBufferValueChanged();
void onAbortOnTimeoutChanged();
void donate();
void setup();
void handleFullscreenChange();
void toggoleSubtitleEnabled(bool value);
void toggleSubtitleAutoLoad(bool value);
void openSubtitle();
void setSubtitleCharset(const QString& charSet);
void setSubtitleEngine(const QString& value);
void changeClockType(QAction* action);
void syncVolumeUi(qreal value);
protected:
virtual void closeEvent(QCloseEvent *e);
virtual void resizeEvent(QResizeEvent *);
virtual void timerEvent(QTimerEvent *);
virtual void keyPressEvent(QKeyEvent *e);
virtual void keyReleaseEvent(QKeyEvent *e);
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void wheelEvent(QWheelEvent *e);
private:
void workaroundRendererSize();
private:
bool mIsReady, mHasPendingPlay;
bool mControlOn;
int mCursorTimer;
int mShowControl; //0: can hide, 1: show and playing, 2: always show(not playing)
int mRepeateMax;
QStringList mAudioBackends;
QVBoxLayout *mpPlayerLayout;
QWidget *mpControl;
QLabel *mpCurrent, *mpEnd;
QLabel *mpTitle;
QLabel *mpSpeed;
Slider *mpTimeSlider, *mpVolumeSlider;
QToolButton *mpVolumeBtn;
QToolButton *mpPlayPauseBtn;
QToolButton *mpStopBtn, *mpForwardBtn, *mpBackwardBtn;
QToolButton *mpOpenBtn;
QToolButton *mpInfoBtn, *mpMenuBtn, *mpSetupBtn, *mpCaptureBtn;
QMenu *mpMenu;
QAction *mpVOAction, *mpARAction; //remove mpVOAction if vo.id() is supported
QAction *mpRepeatEnableAction;
QWidgetAction *mpRepeatAction;
QSpinBox *mpRepeatBox;
QTimeEdit *mpRepeatA, *mpRepeatB;
QAction *mpAudioTrackAction;
QMenu *mpAudioTrackMenu;
QMenu *mpChannelMenu;
QAction *mpChannelAction;
QList<QAction*> mVOActions;
QtAV::AVClock *mpClock;
QtAV::AVPlayer *mpPlayer;
QtAV::VideoRenderer *mpRenderer;
QtAV::LibAVFilterVideo *mpVideoFilter;
QtAV::LibAVFilterAudio *mpAudioFilter;
QString mFile;
QString mTitle;
QLabel *mpPreview;
DecoderConfigPage *mpDecoderConfigPage;
VideoEQConfigPage *mpVideoEQ;
PlayList *mpPlayList, *mpHistory;
QPointF mGlobalMouse;
StatisticsView *mpStatisticsView;
OSDFilter *mpOSD;
QtAV::SubtitleFilter *mpSubtitle;
QtAV::VideoPreviewWidget *m_preview;
};
#endif // MAINWINDOW_H