mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 03:00:46 +03:00
Small fixes to video thumbnailing
This commit is contained in:
parent
15c946207a
commit
96aacf8068
1 changed files with 17 additions and 34 deletions
|
@ -55,33 +55,7 @@ MediaUpload::thumbnailDataUrl() const
|
|||
bool
|
||||
InputVideoSurface::present(const QVideoFrame &frame)
|
||||
{
|
||||
QImage::Format format = QImage::Format_Invalid;
|
||||
|
||||
switch (frame.pixelFormat()) {
|
||||
case QVideoFrame::Format_ARGB32:
|
||||
format = QImage::Format_ARGB32;
|
||||
break;
|
||||
case QVideoFrame::Format_ARGB32_Premultiplied:
|
||||
format = QImage::Format_ARGB32_Premultiplied;
|
||||
break;
|
||||
case QVideoFrame::Format_RGB24:
|
||||
format = QImage::Format_RGB888;
|
||||
break;
|
||||
case QVideoFrame::Format_BGR24:
|
||||
format = QImage::Format_BGR888;
|
||||
break;
|
||||
case QVideoFrame::Format_RGB32:
|
||||
format = QImage::Format_RGB32;
|
||||
break;
|
||||
case QVideoFrame::Format_RGB565:
|
||||
format = QImage::Format_RGB16;
|
||||
break;
|
||||
case QVideoFrame::Format_RGB555:
|
||||
format = QImage::Format_RGB555;
|
||||
break;
|
||||
default:
|
||||
format = QImage::Format_Invalid;
|
||||
}
|
||||
QImage::Format format = QVideoFrame::imageFormatFromPixelFormat(frame.pixelFormat());
|
||||
|
||||
if (format == QImage::Format_Invalid) {
|
||||
emit newImage({});
|
||||
|
@ -95,11 +69,14 @@ InputVideoSurface::present(const QVideoFrame &frame)
|
|||
}
|
||||
|
||||
// this is a shallow operation. it just refer the frame buffer
|
||||
QImage image(frametodraw.bits(),
|
||||
QImage image(qAsConst(frametodraw).bits(),
|
||||
frametodraw.width(),
|
||||
frametodraw.height(),
|
||||
frametodraw.bytesPerLine(),
|
||||
format);
|
||||
image.detach();
|
||||
|
||||
frametodraw.unmap();
|
||||
|
||||
emit newImage(std::move(image));
|
||||
return true;
|
||||
|
@ -820,14 +797,16 @@ MediaUpload::MediaUpload(std::unique_ptr<QIODevice> source_,
|
|||
} else if (mimeClass_ == u"video" || mimeClass_ == u"audio") {
|
||||
auto mediaPlayer = new QMediaPlayer(
|
||||
this,
|
||||
mimeClass_ == u"video" ? QFlags{QMediaPlayer::StreamPlayback, QMediaPlayer::VideoSurface}
|
||||
: QFlags{QMediaPlayer::StreamPlayback});
|
||||
mimeClass_ == u"video" ? QFlags{QMediaPlayer::VideoSurface} : QMediaPlayer::Flags{});
|
||||
mediaPlayer->setMuted(true);
|
||||
|
||||
if (mimeClass_ == u"video") {
|
||||
auto newSurface = new InputVideoSurface(this);
|
||||
connect(
|
||||
newSurface, &InputVideoSurface::newImage, this, [this, mediaPlayer](QImage img) {
|
||||
if (img.size().isEmpty())
|
||||
return;
|
||||
|
||||
mediaPlayer->stop();
|
||||
|
||||
auto orientation = mediaPlayer->metaData(QMediaMetaData::Orientation).toInt();
|
||||
|
@ -882,10 +861,14 @@ MediaUpload::MediaUpload(std::unique_ptr<QIODevice> source_,
|
|||
if (mediaPlayer->duration() > 0)
|
||||
this->duration_ = mediaPlayer->duration();
|
||||
|
||||
dimensions_ = mediaPlayer->metaData(QMediaMetaData::Resolution).toSize();
|
||||
auto orientation = mediaPlayer->metaData(QMediaMetaData::Orientation).toInt();
|
||||
if (orientation == 90 || orientation == 270) {
|
||||
dimensions_.transpose();
|
||||
auto dimensions = mediaPlayer->metaData(QMediaMetaData::Resolution).toSize();
|
||||
if (!dimensions.isEmpty()) {
|
||||
dimensions_ = dimensions;
|
||||
auto orientation =
|
||||
mediaPlayer->metaData(QMediaMetaData::Orientation).toInt();
|
||||
if (orientation == 90 || orientation == 270) {
|
||||
dimensions_.transpose();
|
||||
}
|
||||
}
|
||||
});
|
||||
connect(mediaPlayer, &QMediaPlayer::durationChanged, [this, mediaPlayer](qint64 duration) {
|
||||
|
|
Loading…
Reference in a new issue