1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
#include "shortclipcreator.h" #include <QStandardPaths> #include "utils.h" ShortClipCreator::ShortClipCreator(ShortClipCreator::Config* config, const AvconvConfig &avconvConfig, QObject* parent) : QThread(parent), config(config), avconvConfig(avconvConfig) { } void ShortClipCreator::run() { emit done(this->generate()); deleteLater(); } std::pair<int, int> ShortClipCreator::Config::adaptRatio(std::pair<int, int> resolution) const { return this->adaptRatio(resolution.first, resolution.second); } std::pair<int, int> ShortClipCreator::Config::adaptRatio(int originalW, int originalH) const { originalW = originalW > 0 ? originalW : 480; originalH = originalH > 0 ? originalH : 253; int targetW = std::min(480, originalW); return std::pair<int,int>(targetW, ((float)originalH / (float)originalW) * (float)targetW); } void ShortClipCreator::Config::fixInvalidMembers() { if (this->name.isEmpty()) { this->name = "$(tvShow)/$(file) - $(startM)m$(startS)s:$(endM)m$(endS)s - $(nowDate).$(ext)"; } if (this->dir.isEmpty()) { QStringList imageDirs = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation); if (!imageDirs.isEmpty()) { QString imageDir = imageDirs.first(); this->dir = Utils::createSaveDir(imageDir, "snapshots"); } } } ShortClipCreator::Config::Config() : resolution(std::pair<int,int>(0,0)), maxSizeMib(3) { } ShortClipCreator::Config::~Config() { } void ShortClipCreator::Config::describe(nw::Describer& de) { de.describe("resolutionX", resolution.first); de.describe("resolutionY", resolution.second); de.describe("maxSizeMib", maxSizeMib); this->fixInvalidMembers(); } bool ShortClipCreator::Config::isValid() const { return true; // TODO FIXME WHOOOPS } float ShortClipCreator::Config::timeSpan() const { return this->endSec - this->startSec; } ShortClipCreator::ApiData::ApiData() : start(0), end(0), maxSizeMib(3), outputType(webm), audioRateKib(0.f) { } void ShortClipCreator::ApiData::describe(nw::Descriptor &de) { QString typeString; NwUtils::describe(de, "start", start); NwUtils::describe(de, "end", end); NwUtils::describe(de, "output-type", typeString); NwUtils::describe(de, "max-size", maxSizeMib); NwUtils::describe(de, "audioRateKib", audioRateKib); if (typeString == "webm") { outputType = webm; } else if (typeString == "gif") { outputType = gif; } }