root/src/shortclipcreator.cpp

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