Allow audio and video files with duration < 1s.

This commit is contained in:
John Preston 2017-03-27 15:50:40 +03:00
parent d41372dccd
commit 5666f14829
3 changed files with 24 additions and 22 deletions

View File

@ -849,26 +849,28 @@ FileLoadTask::Video PrepareForSending(const QString &fname, const QByteArray &da
auto reader = std::make_unique<internal::FFMpegReaderImplementation>(&localLocation, &localData, playId);
if (reader->start(internal::ReaderImplementation::Mode::Inspecting, seekPositionMs)) {
auto durationMs = reader->durationMs();
result.isGifv = reader->isGifv();
if (!result.isGifv) {
auto middleMs = durationMs / 2;
if (!reader->inspectAt(middleMs)) {
return result;
if (durationMs > 0) {
result.isGifv = reader->isGifv();
if (!result.isGifv) {
auto middleMs = durationMs / 2;
if (!reader->inspectAt(middleMs)) {
return result;
}
}
}
auto hasAlpha = false;
auto readResult = reader->readFramesTill(-1, getms());
auto readFrame = (readResult == internal::ReaderImplementation::ReadResult::Success);
if (readFrame && reader->renderFrame(result.thumbnail, hasAlpha, QSize())) {
if (hasAlpha) {
auto cacheForResize = QImage();
auto request = FrameRequest();
request.framew = request.outerw = result.thumbnail.width();
request.frameh = request.outerh = result.thumbnail.height();
request.factor = 1;
result.thumbnail = PrepareFrameImage(request, result.thumbnail, hasAlpha, cacheForResize);
auto hasAlpha = false;
auto readResult = reader->readFramesTill(-1, getms());
auto readFrame = (readResult == internal::ReaderImplementation::ReadResult::Success);
if (readFrame && reader->renderFrame(result.thumbnail, hasAlpha, QSize())) {
if (hasAlpha) {
auto cacheForResize = QImage();
auto request = FrameRequest();
request.framew = request.outerw = result.thumbnail.width();
request.frameh = request.outerh = result.thumbnail.height();
request.factor = 1;
result.thumbnail = PrepareFrameImage(request, result.thumbnail, hasAlpha, cacheForResize);
}
result.duration = static_cast<int>(durationMs / 1000);
}
result.duration = static_cast<int>(durationMs / 1000);
}
}
return result;

View File

@ -251,7 +251,7 @@ bool FileLoadTask::CheckForSong(const QString &filepath, const QByteArray &conte
}
auto media = Media::Player::PrepareForSending(filepath, content);
if (media.duration <= 0) {
if (media.duration < 0) {
return false;
}
if (!ValidateThumbDimensions(media.cover.width(), media.cover.height())) {
@ -275,7 +275,7 @@ bool FileLoadTask::CheckForVideo(const QString &filepath, const QByteArray &cont
}
auto media = Media::Clip::PrepareForSending(filepath, content);
if (media.duration <= 0) {
if (media.duration < 0) {
return false;
}

View File

@ -244,14 +244,14 @@ public:
bool animated = false;
};
struct Song {
int duration = 0;
int duration = -1;
QString title;
QString performer;
QImage cover;
};
struct Video {
bool isGifv = false;
int duration = 0;
int duration = -1;
QImage thumbnail;
};
struct MediaInformation {