Merge branch 'master' into pr/1875
@@ -46,9 +46,9 @@ QString CrossDissolveTransition::Description() const
|
|||||||
return tr("Smoothly transition between two clips.");
|
return tr("Smoothly transition between two clips.");
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode CrossDissolveTransition::GetShaderCode(const QString &shader_id) const
|
ShaderCode CrossDissolveTransition::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
|
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/crossdissolve.frag"), QString());
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/crossdissolve.frag"), QString());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
|
|
||||||
//virtual void Retranslate() override;
|
//virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString& shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void ShaderJobEvent(const NodeValueRow &value, ShaderJob& job) const override;
|
virtual void ShaderJobEvent(const NodeValueRow &value, ShaderJob& job) const override;
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ QString DipToColorTransition::Description() const
|
|||||||
return tr("Transition between clips by dipping to a color.");
|
return tr("Transition between clips by dipping to a color.");
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode DipToColorTransition::GetShaderCode(const QString &shader_id) const
|
ShaderCode DipToColorTransition::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
|
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/diptoblack.frag"), QString());
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/diptoblack.frag"), QString());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public:
|
|||||||
virtual QVector<CategoryID> Category() const override;
|
virtual QVector<CategoryID> Category() const override;
|
||||||
virtual QString Description() const override;
|
virtual QString Description() const override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString& shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
static const QString kColorInput;
|
static const QString kColorInput;
|
||||||
|
|
||||||
|
|||||||
@@ -108,9 +108,9 @@ void CornerPinDistortNode::Value(const NodeValueRow &value, const NodeGlobals &g
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode CornerPinDistortNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode CornerPinDistortNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
|
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/cornerpin.frag")),
|
return ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/cornerpin.frag")),
|
||||||
FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/cornerpin.vert")));
|
FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/cornerpin.vert")));
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public:
|
|||||||
|
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
virtual void UpdateGizmoPositions(const NodeValueRow &row, const NodeGlobals &globals) override;
|
virtual void UpdateGizmoPositions(const NodeValueRow &row, const NodeGlobals &globals) override;
|
||||||
|
|
||||||
|
|||||||
@@ -94,9 +94,9 @@ void CropDistortNode::Value(const NodeValueRow &value, const NodeGlobals &global
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode CropDistortNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode CropDistortNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/crop.frag")));
|
return ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/crop.frag")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public:
|
|||||||
|
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
virtual void UpdateGizmoPositions(const NodeValueRow &row, const NodeGlobals &globals) override;
|
virtual void UpdateGizmoPositions(const NodeValueRow &row, const NodeGlobals &globals) override;
|
||||||
|
|
||||||
|
|||||||
@@ -69,9 +69,9 @@ void FlipDistortNode::Retranslate()
|
|||||||
SetInputName(kVerticalInput, tr("Vertical"));
|
SetInputName(kVerticalInput, tr("Vertical"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode FlipDistortNode::GetShaderCode(const QString& shader_id) const
|
ShaderCode FlipDistortNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/flip.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/flip.frag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
static const QString kTextureInput;
|
static const QString kTextureInput;
|
||||||
|
|||||||
@@ -119,9 +119,9 @@ void TransformDistortNode::Value(const NodeValueRow &value, const NodeGlobals &g
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode TransformDistortNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode TransformDistortNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id);
|
Q_UNUSED(request);
|
||||||
|
|
||||||
// Returns default frag and vert shader
|
// Returns default frag and vert shader
|
||||||
return ShaderCode();
|
return ShaderCode();
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public:
|
|||||||
|
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString& shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
enum AutoScaleType {
|
enum AutoScaleType {
|
||||||
kAutoScaleNone,
|
kAutoScaleNone,
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ void OpacityEffect::Retranslate()
|
|||||||
SetInputName(kValueInput, tr("Opacity"));
|
SetInputName(kValueInput, tr("Opacity"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode OpacityEffect::GetShaderCode(const QString &shader_id) const
|
ShaderCode OpacityEffect::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/opacity.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/opacity.frag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public:
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
static const QString kTextureInput;
|
static const QString kTextureInput;
|
||||||
|
|||||||
@@ -83,9 +83,9 @@ void BlurFilterNode::Retranslate()
|
|||||||
SetInputName(kRepeatEdgePixelsInput, tr("Repeat Edge Pixels"));
|
SetInputName(kRepeatEdgePixelsInput, tr("Repeat Edge Pixels"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode BlurFilterNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode BlurFilterNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/blur.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/blur.frag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
static const QString kTextureInput;
|
static const QString kTextureInput;
|
||||||
|
|||||||
@@ -73,9 +73,9 @@ void MosaicFilterNode::Value(const NodeValueRow &value, const NodeGlobals &globa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode MosaicFilterNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode MosaicFilterNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
|
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/mosaic.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/mosaic.frag"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public:
|
|||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
static const QString kTextureInput;
|
static const QString kTextureInput;
|
||||||
static const QString kHorizInput;
|
static const QString kHorizInput;
|
||||||
|
|||||||
@@ -101,9 +101,9 @@ void StrokeFilterNode::Value(const NodeValueRow &value, const NodeGlobals &globa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode StrokeFilterNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode StrokeFilterNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
|
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/stroke.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/stroke.frag"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public:
|
|||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
static const QString kTextureInput;
|
static const QString kTextureInput;
|
||||||
static const QString kColorInput;
|
static const QString kColorInput;
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ void NoiseGeneratorNode::Retranslate()
|
|||||||
SetInputName(kColorInput, tr("Color"));
|
SetInputName(kColorInput, tr("Color"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode NoiseGeneratorNode::GetShaderCode(const QString& shader_id) const
|
ShaderCode NoiseGeneratorNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/noise.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/noise.frag"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class NoiseGeneratorNode : public Node {
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow &value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow &value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
static const QString kBaseIn;
|
static const QString kBaseIn;
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ void GeneratorWithMerge::Retranslate()
|
|||||||
SetInputName(kBaseInput, tr("Base"));
|
SetInputName(kBaseInput, tr("Base"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode GeneratorWithMerge::GetShaderCode(const QString &shader_id) const
|
ShaderCode GeneratorWithMerge::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
if (shader_id == QStringLiteral("mrg")) {
|
if (request.id == QStringLiteral("mrg")) {
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/alphaover.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/alphaover.frag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public:
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
static const QString kBaseInput;
|
static const QString kBaseInput;
|
||||||
|
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ void ShapeNode::Retranslate()
|
|||||||
SetComboBoxStrings(kTypeInput, {tr("Rectangle"), tr("Ellipse")});
|
SetComboBoxStrings(kTypeInput, {tr("Rectangle"), tr("Ellipse")});
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode ShapeNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode ShapeNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
if (shader_id == QStringLiteral("shape")) {
|
if (request.id == QStringLiteral("shape")) {
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/shape.frag")));
|
return ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/shape.frag")));
|
||||||
} else {
|
} else {
|
||||||
return super::GetShaderCode(shader_id);
|
return super::GetShaderCode(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public:
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString& shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
static QString kTypeInput;
|
static QString kTypeInput;
|
||||||
|
|||||||
@@ -68,9 +68,9 @@ void SolidGenerator::Value(const NodeValueRow &value, const NodeGlobals &globals
|
|||||||
table->Push(NodeValue::kTexture, QVariant::fromValue(job), this);
|
table->Push(NodeValue::kTexture, QVariant::fromValue(job), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode SolidGenerator::GetShaderCode(const QString &shader_id) const
|
ShaderCode SolidGenerator::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
|
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/solid.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/solid.frag"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public:
|
|||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
static const QString kColorInput;
|
static const QString kColorInput;
|
||||||
|
|
||||||
|
|||||||
@@ -83,9 +83,9 @@ void ColorDifferenceKeyNode::Retranslate()
|
|||||||
SetInputName(kMaskOnlyInput, tr("Show Mask Only"));
|
SetInputName(kMaskOnlyInput, tr("Show Mask Only"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode ColorDifferenceKeyNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode ColorDifferenceKeyNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/colordifferencekey.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/colordifferencekey.frag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class ColorDifferenceKeyNode : public Node {
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString& shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals& globals, NodeValueTable* table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals& globals, NodeValueTable* table) const override;
|
||||||
|
|
||||||
static const QString kTextureInput;
|
static const QString kTextureInput;
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ void DespillNode::Retranslate()
|
|||||||
SetInputName(kPreserveLuminanceInput, tr("Preserve Luminance"));
|
SetInputName(kPreserveLuminanceInput, tr("Preserve Luminance"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode DespillNode::GetShaderCode(const QString& shader_id) const {
|
ShaderCode DespillNode::GetShaderCode(const ShaderRequest &request) const {
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/despill.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/despill.frag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class DespillNode : public Node {
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString& shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals& globals, NodeValueTable* table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals& globals, NodeValueTable* table) const override;
|
||||||
|
|
||||||
static const QString kTextureInput;
|
static const QString kTextureInput;
|
||||||
|
|||||||
@@ -80,9 +80,9 @@ void MathNode::Retranslate()
|
|||||||
SetComboBoxStrings(kMethodIn, operations);
|
SetComboBoxStrings(kMethodIn, operations);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode MathNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode MathNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
return GetShaderCodeInternal(shader_id, kParamAIn, kParamBIn);
|
return GetShaderCodeInternal(request.id, kParamAIn, kParamBIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MathNode::Value(const NodeValueRow &value, const NodeGlobals &globals, NodeValueTable *table) const
|
void MathNode::Value(const NodeValueRow &value, const NodeGlobals &globals, NodeValueTable *table) const
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
|
|
||||||
Operation GetOperation() const
|
Operation GetOperation() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -416,8 +416,6 @@ void MathNodeBase::ValueInternal(Operation operation, Pairing pairing, const QSt
|
|||||||
} else {
|
} else {
|
||||||
output->Push(NodeValue::kSamples, QVariant::fromValue(job), this);
|
output->Push(NodeValue::kSamples, QVariant::fromValue(job), this);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
output->Push(NodeValue::kSamples, QVariant::fromValue(job), this);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,9 +67,9 @@ void MergeNode::Retranslate()
|
|||||||
SetInputName(kBlendIn, tr("Blend"));
|
SetInputName(kBlendIn, tr("Blend"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode MergeNode::GetShaderCode(const QString &shader_id) const
|
ShaderCode MergeNode::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
Q_UNUSED(request)
|
||||||
|
|
||||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/alphaover.frag"));
|
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/alphaover.frag"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
|
|
||||||
virtual void Retranslate() override;
|
virtual void Retranslate() override;
|
||||||
|
|
||||||
virtual ShaderCode GetShaderCode(const QString &shader_id) const override;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const override;
|
||||||
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
virtual void Value(const NodeValueRow& value, const NodeGlobals &globals, NodeValueTable *table) const override;
|
||||||
|
|
||||||
static const QString kBaseIn;
|
static const QString kBaseIn;
|
||||||
|
|||||||
@@ -1519,10 +1519,8 @@ QVector<Node *> Node::GetImmediateDependencies() const
|
|||||||
return GetDependenciesInternal(false, false);
|
return GetDependenciesInternal(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderCode Node::GetShaderCode(const QString &shader_id) const
|
ShaderCode Node::GetShaderCode(const ShaderRequest &request) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(shader_id)
|
|
||||||
|
|
||||||
return ShaderCode(QString(), QString());
|
return ShaderCode(QString(), QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -665,10 +665,21 @@ public:
|
|||||||
*/
|
*/
|
||||||
QVector<Node *> GetImmediateDependencies() const;
|
QVector<Node *> GetImmediateDependencies() const;
|
||||||
|
|
||||||
|
struct ShaderRequest
|
||||||
|
{
|
||||||
|
ShaderRequest(const QString &shader_id)
|
||||||
|
{
|
||||||
|
id = shader_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString id;
|
||||||
|
QString stub;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generate hardware accelerated code for this Node
|
* @brief Generate hardware accelerated code for this Node
|
||||||
*/
|
*/
|
||||||
virtual ShaderCode GetShaderCode(const QString& shader_id) const;
|
virtual ShaderCode GetShaderCode(const ShaderRequest &request) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief If Value() pushes a ShaderJob, this is the function that will process them.
|
* @brief If Value() pushes a ShaderJob, this is the function that will process them.
|
||||||
|
|||||||
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 556 B |
|
After Width: | Height: | Size: 385 B |
|
After Width: | Height: | Size: 693 B |
|
After Width: | Height: | Size: 551 B |
|
After Width: | Height: | Size: 961 B |
|
After Width: | Height: | Size: 966 B |
@@ -0,0 +1,276 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
sodipodi:docname="text-edit.svg"
|
||||||
|
inkscape:version="1.3-dev (e659668, 2022-05-03)"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
id="svg2"
|
||||||
|
height="64"
|
||||||
|
width="64"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 64 64"
|
||||||
|
inkscape:export-filename="./text-bold.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs14">
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect13"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect11"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect9"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect8"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect7"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,7.0710678,0,1 @ F,0,0,1,0,7.0710678,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="0"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect6"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.8284271,0,1 @ F,0,0,1,0,5.0374209,0,1 @ F,0,0,1,0,2.8284271,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="0"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect1"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,9.8994949,0,1 @ F,0,0,1,0,9.8994949,0,1 @ F,0,0,1,0,2.8284271,0,1 @ F,0,0,1,0,3.1608267,0,1 @ F,0,0,1,0,2.8284271,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="0"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
stroke="#3465a4"
|
||||||
|
inkscape:window-y="23"
|
||||||
|
inkscape:window-x="47"
|
||||||
|
inkscape:window-height="927"
|
||||||
|
inkscape:window-width="1633"
|
||||||
|
inkscape:showpageshadow="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:cy="29.019123"
|
||||||
|
inkscape:cx="20.532398"
|
||||||
|
inkscape:zoom="7.3055274"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#ffffff"
|
||||||
|
pagecolor="#000000"
|
||||||
|
id="base"
|
||||||
|
fill="#729fcf"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
borderlayer="true"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:snap-bbox-midpoints="false"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:lockguides="true"
|
||||||
|
guidecolor="#ff0000"
|
||||||
|
guideopacity="0.30196078"
|
||||||
|
inkscape:deskcolor="#000000">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid_pixels"
|
||||||
|
color="#ffffff"
|
||||||
|
opacity="0.05098039"
|
||||||
|
empcolor="#ffffff"
|
||||||
|
empopacity="0.10196078"
|
||||||
|
dotted="false"
|
||||||
|
empspacing="8"
|
||||||
|
spacingx="1"
|
||||||
|
spacingy="1"
|
||||||
|
visible="true"
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="2,64"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide6912"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="62,64"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide6914"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,62"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide6916"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,2"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide6918"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="32,32"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide6920"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="32,32"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide6922"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata4">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Martin Ruskov</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:source>http://commons.wikimedia.org/wiki/Tango_icon</dc:source>
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Design"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,16)">
|
||||||
|
<path
|
||||||
|
id="path5"
|
||||||
|
style="color:#ffffff;fill:#ffffff;fill-opacity:0.86274511;stroke-width:8;stroke-linecap:round;stroke-dashoffset:8;paint-order:stroke fill markers"
|
||||||
|
d="M 41,-5 11,25 C 9.6823712,26.317629 8.6656745,27.905781 8.0214844,29.654297 L 3.7421875,41.273438 c -0.6856883,1.861154 1.123221,3.670063 2.984375,2.984374 L 18.345703,39.978516 C 20.094219,39.334326 21.682371,38.317629 23,37 L 53,7 Z m 0,6 6,6 -28,28 c -0.781013,0.780846 -2.218987,0.780846 -3,0 l -3,-3 c -0.780846,-0.781013 -0.780846,-2.218987 0,-3 z"
|
||||||
|
sodipodi:nodetypes="csccccsccccccccc" />
|
||||||
|
<path
|
||||||
|
id="path1"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:0.86274511;stroke-width:1.51181;stroke-linecap:round;stroke-dashoffset:8;paint-order:stroke fill markers;stop-color:#ffffff"
|
||||||
|
d="m 57,-11 2,2 c 3,3 3,7 0,9.99999999 L 56,4 44,-8 l 3,-3 c 3,-3 7,-3 10,0 z"
|
||||||
|
sodipodi:nodetypes="cccccsc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 603 B |
|
After Width: | Height: | Size: 513 B |
|
After Width: | Height: | Size: 744 B |
|
After Width: | Height: | Size: 753 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,276 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
sodipodi:docname="text-edit.svg"
|
||||||
|
inkscape:version="1.3-dev (e659668, 2022-05-03)"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
id="svg2"
|
||||||
|
height="64"
|
||||||
|
width="64"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 64 64"
|
||||||
|
inkscape:export-filename="./text-bold.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs14">
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect13"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect11"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect9"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect8"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,2,0,1 @ F,0,0,1,0,2,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="2"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect7"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,7.0710678,0,1 @ F,0,0,1,0,7.0710678,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="0"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect6"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.8284271,0,1 @ F,0,0,1,0,5.0374209,0,1 @ F,0,0,1,0,2.8284271,0,1 @ F,0,0,1,0,0,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="0"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect1"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
nodesatellites_param="F,0,0,1,0,9.8994949,0,1 @ F,0,0,1,0,9.8994949,0,1 @ F,0,0,1,0,2.8284271,0,1 @ F,0,0,1,0,3.1608267,0,1 @ F,0,0,1,0,2.8284271,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="0"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
stroke="#3465a4"
|
||||||
|
inkscape:window-y="23"
|
||||||
|
inkscape:window-x="47"
|
||||||
|
inkscape:window-height="927"
|
||||||
|
inkscape:window-width="1633"
|
||||||
|
inkscape:showpageshadow="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:cy="29.019123"
|
||||||
|
inkscape:cx="20.532398"
|
||||||
|
inkscape:zoom="7.3055274"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#212121"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
id="base"
|
||||||
|
fill="#729fcf"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
borderlayer="true"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:snap-bbox-midpoints="false"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:lockguides="true"
|
||||||
|
guidecolor="#ff0000"
|
||||||
|
guideopacity="0.30196078"
|
||||||
|
inkscape:deskcolor="#d1d1d1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid_pixels"
|
||||||
|
color="#000000"
|
||||||
|
opacity="0.05098039"
|
||||||
|
empcolor="#000000"
|
||||||
|
empopacity="0.10196078"
|
||||||
|
dotted="false"
|
||||||
|
empspacing="8"
|
||||||
|
spacingx="1"
|
||||||
|
spacingy="1"
|
||||||
|
visible="true"
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="2,64"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide6912"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="62,64"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide6914"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,62"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide6916"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,2"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide6918"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="32,32"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide6920"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="32,32"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide6922"
|
||||||
|
inkscape:locked="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata4">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Martin Ruskov</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:source>http://commons.wikimedia.org/wiki/Tango_icon</dc:source>
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Design"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,16)">
|
||||||
|
<path
|
||||||
|
id="path5"
|
||||||
|
style="color:#000000;fill:#212121;fill-opacity:0.86274511;stroke-width:8;stroke-linecap:round;stroke-dashoffset:8;paint-order:stroke fill markers"
|
||||||
|
d="M 41,-5 11,25 C 9.6823712,26.317629 8.6656745,27.905781 8.0214844,29.654297 L 3.7421875,41.273438 c -0.6856883,1.861154 1.123221,3.670063 2.984375,2.984374 L 18.345703,39.978516 C 20.094219,39.334326 21.682371,38.317629 23,37 L 53,7 Z m 0,6 6,6 -28,28 c -0.781013,0.780846 -2.218987,0.780846 -3,0 l -3,-3 c -0.780846,-0.781013 -0.780846,-2.218987 0,-3 z"
|
||||||
|
sodipodi:nodetypes="csccccsccccccccc" />
|
||||||
|
<path
|
||||||
|
id="path1"
|
||||||
|
style="opacity:1;fill:#212121;fill-opacity:0.86274511;stroke-width:1.51181;stroke-linecap:round;stroke-dashoffset:8;paint-order:stroke fill markers;stop-color:#000000"
|
||||||
|
d="m 57,-11 2,2 c 3,3 3,7 0,9.99999999 L 56,4 44,-8 l 3,-3 c 3,-3 7,-3 10,0 z"
|
||||||
|
sodipodi:nodetypes="cccccsc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.7 KiB |
@@ -37,7 +37,6 @@ QVector<AudioMonitor*> AudioMonitor::instances_;
|
|||||||
|
|
||||||
AudioMonitor::AudioMonitor(QWidget *parent) :
|
AudioMonitor::AudioMonitor(QWidget *parent) :
|
||||||
QOpenGLWidget(parent),
|
QOpenGLWidget(parent),
|
||||||
file_(nullptr),
|
|
||||||
waveform_(nullptr),
|
waveform_(nullptr),
|
||||||
cached_channels_(0)
|
cached_channels_(0)
|
||||||
{
|
{
|
||||||
@@ -70,15 +69,13 @@ void AudioMonitor::SetParams(const AudioParams ¶ms)
|
|||||||
|
|
||||||
void AudioMonitor::Stop()
|
void AudioMonitor::Stop()
|
||||||
{
|
{
|
||||||
delete file_;
|
|
||||||
file_ = nullptr;
|
|
||||||
waveform_ = nullptr;
|
waveform_ = nullptr;
|
||||||
|
|
||||||
// We don't stop the update loop here so that the monitor can show a smooth fade out. The update
|
// We don't stop the update loop here so that the monitor can show a smooth fade out. The update
|
||||||
// loop will stop itself since file_ and waveform_ are null.
|
// loop will stop itself since file_ and waveform_ are null.
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioMonitor::PushBytes(const QByteArray &d)
|
void AudioMonitor::PushSampleBuffer(SampleBufferPtr d)
|
||||||
{
|
{
|
||||||
if (!params_.channel_count()) {
|
if (!params_.channel_count()) {
|
||||||
return;
|
return;
|
||||||
@@ -86,9 +83,12 @@ void AudioMonitor::PushBytes(const QByteArray &d)
|
|||||||
|
|
||||||
QVector<double> v(params_.channel_count(), 0);
|
QVector<double> v(params_.channel_count(), 0);
|
||||||
|
|
||||||
BytesToSampleSummary(d, v);
|
AudioVisualWaveform::Sample summed = AudioVisualWaveform::SumSamples(d, 0, d->sample_count());
|
||||||
|
|
||||||
PushValue(v);
|
AudioVisualWaveformSampleToInternalValues(summed, v);
|
||||||
|
|
||||||
|
// Fill values because they get averaged out for smoothing
|
||||||
|
values_.fill(v);
|
||||||
|
|
||||||
SetUpdateLoop(true);
|
SetUpdateLoop(true);
|
||||||
}
|
}
|
||||||
@@ -236,13 +236,7 @@ void AudioMonitor::paintGL()
|
|||||||
delta_time *= abs_speed;
|
delta_time *= abs_speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_) {
|
if (waveform_) {
|
||||||
UpdateValuesFromFile(v, delta_time);
|
|
||||||
|
|
||||||
if (file_->atEnd()) {
|
|
||||||
Stop();
|
|
||||||
}
|
|
||||||
} else if (waveform_) {
|
|
||||||
UpdateValuesFromWaveform(v, delta_time);
|
UpdateValuesFromWaveform(v, delta_time);
|
||||||
|
|
||||||
if (waveform_time_ >= waveform_->length()) {
|
if (waveform_time_ >= waveform_->length()) {
|
||||||
@@ -304,30 +298,6 @@ void AudioMonitor::mousePressEvent(QMouseEvent *)
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioMonitor::UpdateValuesFromFile(QVector<double>& v, qint64 delta_time)
|
|
||||||
{
|
|
||||||
// Convert ms to float seconds and determine how many bytes that is
|
|
||||||
qint64 bytes_to_read = params_.time_to_bytes(static_cast<double>(delta_time) * 0.001);
|
|
||||||
|
|
||||||
if (playback_speed_ < 0) {
|
|
||||||
// If reversing, jump back by the amount of bytes we're going to read
|
|
||||||
bytes_to_read = qMin(bytes_to_read, file_->pos());
|
|
||||||
|
|
||||||
file_->seek(file_->pos() - bytes_to_read);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read bytes in from file
|
|
||||||
QByteArray b = file_->read(bytes_to_read);
|
|
||||||
|
|
||||||
if (playback_speed_ < 0) {
|
|
||||||
// If reversing, head back to where we were before the read so that the next read starts
|
|
||||||
// from where we left off
|
|
||||||
file_->seek(file_->pos() - bytes_to_read);
|
|
||||||
}
|
|
||||||
|
|
||||||
BytesToSampleSummary(b, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioMonitor::UpdateValuesFromWaveform(QVector<double> &v, qint64 delta_time)
|
void AudioMonitor::UpdateValuesFromWaveform(QVector<double> &v, qint64 delta_time)
|
||||||
{
|
{
|
||||||
// Delta time is provided in milliseconds, so we convert to seconds in rational
|
// Delta time is provided in milliseconds, so we convert to seconds in rational
|
||||||
@@ -335,18 +305,23 @@ void AudioMonitor::UpdateValuesFromWaveform(QVector<double> &v, qint64 delta_tim
|
|||||||
|
|
||||||
AudioVisualWaveform::Sample sum = waveform_->GetSummaryFromTime(waveform_time_, length);
|
AudioVisualWaveform::Sample sum = waveform_->GetSummaryFromTime(waveform_time_, length);
|
||||||
|
|
||||||
for (int i=0; i<sum.size(); i++) {
|
AudioVisualWaveformSampleToInternalValues(sum, v);
|
||||||
float max = qMax(qAbs(sum.at(i).min), qAbs(sum.at(i).max));
|
|
||||||
|
|
||||||
int output_index = i%v.size();
|
|
||||||
if (max > v.at(output_index)) {
|
|
||||||
v[output_index] = max;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
waveform_time_ += length;
|
waveform_time_ += length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioMonitor::AudioVisualWaveformSampleToInternalValues(const AudioVisualWaveform::Sample &in, QVector<double> &out)
|
||||||
|
{
|
||||||
|
for (int i=0; i<in.size(); i++) {
|
||||||
|
float max = qMax(qAbs(in.at(i).min), qAbs(in.at(i).max));
|
||||||
|
|
||||||
|
int output_index = i%out.size();
|
||||||
|
if (max > out.at(output_index)) {
|
||||||
|
out[output_index] = max;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AudioMonitor::PushValue(const QVector<double> &v)
|
void AudioMonitor::PushValue(const QVector<double> &v)
|
||||||
{
|
{
|
||||||
int lim = values_.size()-1;
|
int lim = values_.size()-1;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
|
|
||||||
bool IsPlaying() const
|
bool IsPlaying() const
|
||||||
{
|
{
|
||||||
return file_ || waveform_;
|
return waveform_;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StartWaveformOnAll(const AudioVisualWaveform *waveform, const rational& start, int playback_speed)
|
static void StartWaveformOnAll(const AudioVisualWaveform *waveform, const rational& start, int playback_speed)
|
||||||
@@ -59,10 +59,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PushBytesOnAll(const QByteArray &d)
|
static void PushSampleBufferOnAll(SampleBufferPtr d)
|
||||||
{
|
{
|
||||||
foreach (AudioMonitor *m, instances_) {
|
foreach (AudioMonitor *m, instances_) {
|
||||||
m->PushBytes(d);
|
m->PushSampleBuffer(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ public slots:
|
|||||||
|
|
||||||
void Stop();
|
void Stop();
|
||||||
|
|
||||||
void PushBytes(const QByteArray& d);
|
void PushSampleBuffer(SampleBufferPtr samples);
|
||||||
|
|
||||||
void StartWaveform(const AudioVisualWaveform *waveform, const rational& start, int playback_speed);
|
void StartWaveform(const AudioVisualWaveform *waveform, const rational& start, int playback_speed);
|
||||||
|
|
||||||
@@ -83,10 +83,10 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void SetUpdateLoop(bool e);
|
void SetUpdateLoop(bool e);
|
||||||
|
|
||||||
void UpdateValuesFromFile(QVector<double> &v, qint64 delta_time);
|
|
||||||
|
|
||||||
void UpdateValuesFromWaveform(QVector<double> &v, qint64 delta_time);
|
void UpdateValuesFromWaveform(QVector<double> &v, qint64 delta_time);
|
||||||
|
|
||||||
|
void AudioVisualWaveformSampleToInternalValues(const AudioVisualWaveform::Sample &in, QVector<double> &out);
|
||||||
|
|
||||||
void PushValue(const QVector<double>& v);
|
void PushValue(const QVector<double>& v);
|
||||||
|
|
||||||
void BytesToSampleSummary(const QByteArray& bytes, QVector<double>& v);
|
void BytesToSampleSummary(const QByteArray& bytes, QVector<double>& v);
|
||||||
@@ -95,7 +95,6 @@ private:
|
|||||||
|
|
||||||
AudioParams params_;
|
AudioParams params_;
|
||||||
|
|
||||||
QIODevice* file_;
|
|
||||||
qint64 last_time_;
|
qint64 last_time_;
|
||||||
|
|
||||||
const AudioVisualWaveform* waveform_;
|
const AudioVisualWaveform* waveform_;
|
||||||
|
|||||||
@@ -571,6 +571,11 @@ void NodeView::mouseMoveEvent(QMouseEvent *event)
|
|||||||
} else {
|
} else {
|
||||||
// Otherwise, we may have to iterate to find a valid one
|
// Otherwise, we may have to iterate to find a valid one
|
||||||
for (const QString& input : attached_node->inputs()) {
|
for (const QString& input : attached_node->inputs()) {
|
||||||
|
if (input == Node::kEnabledInput) {
|
||||||
|
// Ignore enabled input
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
NodeInput i(attached_node, input);
|
NodeInput i(attached_node, input);
|
||||||
|
|
||||||
if (attached_node->IsInputConnectable(input)) {
|
if (attached_node->IsInputConnectable(input)) {
|
||||||
|
|||||||
@@ -98,6 +98,11 @@ ViewerWidget::ViewerWidget(QWidget *parent) :
|
|||||||
connect(display_widget_, &ViewerDisplayWidget::HandDragMoved, sizer_, &ViewerSizer::HandDragMove);
|
connect(display_widget_, &ViewerDisplayWidget::HandDragMoved, sizer_, &ViewerSizer::HandDragMove);
|
||||||
sizer_->SetWidget(display_widget_);
|
sizer_->SetWidget(display_widget_);
|
||||||
|
|
||||||
|
// Make the display widget the first tabbable widget. While the viewer display cannot actually
|
||||||
|
// be interacted with by tabbing, it prevents the actual first tabbable widget (the playhead
|
||||||
|
// slider in `controls_`) from getting auto-focused any time the panel is maximized (with `)
|
||||||
|
display_widget_->setFocusPolicy(Qt::TabFocus);
|
||||||
|
|
||||||
// Create waveform view when audio is connected and video isn't
|
// Create waveform view when audio is connected and video isn't
|
||||||
waveform_view_ = new AudioWaveformView();
|
waveform_view_ = new AudioWaveformView();
|
||||||
ConnectTimelineView(waveform_view_, true);
|
ConnectTimelineView(waveform_view_, true);
|
||||||
@@ -571,7 +576,7 @@ void ViewerWidget::ReceivedAudioBufferForScrubbing()
|
|||||||
if (!AudioManager::instance()->PushToOutput(audio_processor_.to(), packed, &error)) {
|
if (!AudioManager::instance()->PushToOutput(audio_processor_.to(), packed, &error)) {
|
||||||
Core::instance()->ShowStatusBarMessage(tr("Audio scrubbing failed: %1").arg(error));
|
Core::instance()->ShowStatusBarMessage(tr("Audio scrubbing failed: %1").arg(error));
|
||||||
}
|
}
|
||||||
AudioMonitor::PushBytesOnAll(packed);
|
AudioMonitor::PushSampleBufferOnAll(samples);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qCritical() << "Failed to process audio for scrubbing:" << r;
|
qCritical() << "Failed to process audio for scrubbing:" << r;
|
||||||
@@ -704,11 +709,11 @@ void ViewerWidget::PlayInternal(int speed, bool in_to_out_only)
|
|||||||
|
|
||||||
AudioParams ap = GetConnectedNode()->GetAudioParams();
|
AudioParams ap = GetConnectedNode()->GetAudioParams();
|
||||||
if (ap.is_valid()) {
|
if (ap.is_valid()) {
|
||||||
AudioManager::instance()->SetOutputNotifyInterval(ap.time_to_bytes(kAudioPlaybackInterval));
|
|
||||||
connect(AudioManager::instance(), &AudioManager::OutputNotify, this, &ViewerWidget::QueueNextAudioBuffer);
|
|
||||||
|
|
||||||
UpdateAudioProcessor();
|
UpdateAudioProcessor();
|
||||||
|
|
||||||
|
AudioManager::instance()->SetOutputNotifyInterval(audio_processor_.to().time_to_bytes(kAudioPlaybackInterval));
|
||||||
|
connect(AudioManager::instance(), &AudioManager::OutputNotify, this, &ViewerWidget::QueueNextAudioBuffer);
|
||||||
|
|
||||||
static const int prequeue_count = 2;
|
static const int prequeue_count = 2;
|
||||||
prequeuing_audio_ = prequeue_count; // Queue two buffers ahead of time
|
prequeuing_audio_ = prequeue_count; // Queue two buffers ahead of time
|
||||||
audio_playback_queue_time_ = GetTime();
|
audio_playback_queue_time_ = GetTime();
|
||||||
|
|||||||