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; }
}