mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 19:08:58 +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
|
bool
|
||||||
InputVideoSurface::present(const QVideoFrame &frame)
|
InputVideoSurface::present(const QVideoFrame &frame)
|
||||||
{
|
{
|
||||||
QImage::Format format = QImage::Format_Invalid;
|
QImage::Format format = QVideoFrame::imageFormatFromPixelFormat(frame.pixelFormat());
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (format == QImage::Format_Invalid) {
|
if (format == QImage::Format_Invalid) {
|
||||||
emit newImage({});
|
emit newImage({});
|
||||||
|
@ -95,11 +69,14 @@ InputVideoSurface::present(const QVideoFrame &frame)
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is a shallow operation. it just refer the frame buffer
|
// this is a shallow operation. it just refer the frame buffer
|
||||||
QImage image(frametodraw.bits(),
|
QImage image(qAsConst(frametodraw).bits(),
|
||||||
frametodraw.width(),
|
frametodraw.width(),
|
||||||
frametodraw.height(),
|
frametodraw.height(),
|
||||||
frametodraw.bytesPerLine(),
|
frametodraw.bytesPerLine(),
|
||||||
format);
|
format);
|
||||||
|
image.detach();
|
||||||
|
|
||||||
|
frametodraw.unmap();
|
||||||
|
|
||||||
emit newImage(std::move(image));
|
emit newImage(std::move(image));
|
||||||
return true;
|
return true;
|
||||||
|
@ -820,14 +797,16 @@ MediaUpload::MediaUpload(std::unique_ptr<QIODevice> source_,
|
||||||
} else if (mimeClass_ == u"video" || mimeClass_ == u"audio") {
|
} else if (mimeClass_ == u"video" || mimeClass_ == u"audio") {
|
||||||
auto mediaPlayer = new QMediaPlayer(
|
auto mediaPlayer = new QMediaPlayer(
|
||||||
this,
|
this,
|
||||||
mimeClass_ == u"video" ? QFlags{QMediaPlayer::StreamPlayback, QMediaPlayer::VideoSurface}
|
mimeClass_ == u"video" ? QFlags{QMediaPlayer::VideoSurface} : QMediaPlayer::Flags{});
|
||||||
: QFlags{QMediaPlayer::StreamPlayback});
|
|
||||||
mediaPlayer->setMuted(true);
|
mediaPlayer->setMuted(true);
|
||||||
|
|
||||||
if (mimeClass_ == u"video") {
|
if (mimeClass_ == u"video") {
|
||||||
auto newSurface = new InputVideoSurface(this);
|
auto newSurface = new InputVideoSurface(this);
|
||||||
connect(
|
connect(
|
||||||
newSurface, &InputVideoSurface::newImage, this, [this, mediaPlayer](QImage img) {
|
newSurface, &InputVideoSurface::newImage, this, [this, mediaPlayer](QImage img) {
|
||||||
|
if (img.size().isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
mediaPlayer->stop();
|
mediaPlayer->stop();
|
||||||
|
|
||||||
auto orientation = mediaPlayer->metaData(QMediaMetaData::Orientation).toInt();
|
auto orientation = mediaPlayer->metaData(QMediaMetaData::Orientation).toInt();
|
||||||
|
@ -882,10 +861,14 @@ MediaUpload::MediaUpload(std::unique_ptr<QIODevice> source_,
|
||||||
if (mediaPlayer->duration() > 0)
|
if (mediaPlayer->duration() > 0)
|
||||||
this->duration_ = mediaPlayer->duration();
|
this->duration_ = mediaPlayer->duration();
|
||||||
|
|
||||||
dimensions_ = mediaPlayer->metaData(QMediaMetaData::Resolution).toSize();
|
auto dimensions = mediaPlayer->metaData(QMediaMetaData::Resolution).toSize();
|
||||||
auto orientation = mediaPlayer->metaData(QMediaMetaData::Orientation).toInt();
|
if (!dimensions.isEmpty()) {
|
||||||
if (orientation == 90 || orientation == 270) {
|
dimensions_ = dimensions;
|
||||||
dimensions_.transpose();
|
auto orientation =
|
||||||
|
mediaPlayer->metaData(QMediaMetaData::Orientation).toInt();
|
||||||
|
if (orientation == 90 || orientation == 270) {
|
||||||
|
dimensions_.transpose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
connect(mediaPlayer, &QMediaPlayer::durationChanged, [this, mediaPlayer](qint64 duration) {
|
connect(mediaPlayer, &QMediaPlayer::durationChanged, [this, mediaPlayer](qint64 duration) {
|
||||||
|
|
Loading…
Reference in a new issue