File indexing completed on 2024-04-28 04:21:26

0001 /* SPDX-FileCopyrightText: 2021 The KPhotoAlbum Development Team
0002 
0003 SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "QtAVVideoToolBar.h"
0007 
0008 #include <QtAV/AVPlayer.h>
0009 #include <QtAVWidgets/VideoPreviewWidget.h>
0010 
0011 namespace Viewer
0012 {
0013 
0014 QtAVVideoToolBar::QtAVVideoToolBar(QtAV::AVPlayer *player, QWidget *parent)
0015     : VideoToolBar(parent)
0016     , m_player(player)
0017 {
0018     connect(m_player, &QtAV::AVPlayer::started, this, &QtAVVideoToolBar::slotVideoStarted);
0019 }
0020 
0021 void QtAVVideoToolBar::onTimeSliderHover(const QPoint &pos, int value)
0022 {
0023     VideoToolBar::onTimeSliderHover(pos, value);
0024 
0025     if (!m_preview)
0026         m_preview = new QtAV::VideoPreviewWidget();
0027     m_preview->setFile(m_player->file());
0028     m_preview->setTimestamp(value);
0029     m_preview->preview();
0030 
0031     const int width = 150;
0032     const int height = [&] {
0033         const int w = m_player->statistics().video_only.coded_width;
0034         const int h = m_player->statistics().video_only.coded_height;
0035         if (w != 0 && h != 0)
0036             return static_cast<int>(1.0 * width * h / w);
0037         else
0038             return width;
0039     }();
0040 
0041     m_preview->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
0042     m_preview->resize(width, height);
0043     m_preview->move(pos - QPoint(width / 2, height));
0044     m_preview->show();
0045 }
0046 
0047 void QtAVVideoToolBar::closePreview()
0048 {
0049     if (!m_preview)
0050         return;
0051 
0052     if (m_preview->isVisible())
0053         m_preview->close();
0054 
0055     delete m_preview;
0056     m_preview = nullptr;
0057 }
0058 
0059 void QtAVVideoToolBar::slotVideoStarted()
0060 {
0061     setRange(m_player->mediaStartPosition(), m_player->mediaStopPosition());
0062     setPosition(m_player->mediaStopPosition());
0063     setSeekSliderEnabled(m_player->isSeekable());
0064 }
0065 
0066 } // namespace Viewer
0067 
0068 #include "moc_QtAVVideoToolBar.cpp"