Skip to content

Commit

Permalink
Add opacity option to video fade filters.
Browse files Browse the repository at this point in the history
  • Loading branch information
ddennedy committed Aug 24, 2014
1 parent 20e6fbb commit a0afc89
Show file tree
Hide file tree
Showing 9 changed files with 100 additions and 16 deletions.
18 changes: 14 additions & 4 deletions src/models/multitrackmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1301,15 +1301,20 @@ void MultitrackModel::fadeIn(int trackIndex, int clipIndex, int duration)
} else {
Mlt::Filter f(MLT.profile(), "brightness");
f.set(kShotcutFilterProperty, "fadeInBrightness");
f.set("start", 0);
f.set("end", 1);
QString level = QString("0=0; %1=1").arg(duration - 1);
f.set("level", level.toLatin1().constData());
f.set("alpha", 1);
info->producer->attach(f);
filter.reset(new Mlt::Filter(f));
}
} else if (Settings.playerGPU()) {
// Special handling for animation keyframes on movit.opacity.
QString opacity = QString("0~=0; %1=1").arg(duration - 1);
filter->set("opacity", opacity.toLatin1().constData());
} else {
// Special handling for animation keyframes on brightness.
QString level = QString("0=0; %1=1").arg(duration - 1);
filter->set("level", level.toLatin1().constData());
}
// Adjust video filter.
filter->set_in_and_out(info->frame_in, info->frame_in + duration - 1);
Expand Down Expand Up @@ -1371,15 +1376,20 @@ void MultitrackModel::fadeOut(int trackIndex, int clipIndex, int duration)
} else {
Mlt::Filter f(MLT.profile(), "brightness");
f.set(kShotcutFilterProperty, "fadeOutBrightness");
f.set("start", 1);
f.set("end", 0);
QString level = QString("0=1; %1=1").arg(duration - 1);
f.set("level", level.toLatin1().constData());
f.set("alpha", 1);
info->producer->attach(f);
filter.reset(new Mlt::Filter(f));
}
} else if (Settings.playerGPU()) {
// Special handling for animation keyframes on movit.opacity.
QString opacity = QString("0~=1; %1=0").arg(duration - 1);
filter->set("opacity", opacity.toLatin1().constData());
} else {
// Special handling for animation keyframes on brightness.
QString level = QString("0=1; %1=0").arg(duration - 1);
filter->set("level", level.toLatin1().constData());
}
// Adjust video filter.
filter->set_in_and_out(info->frame_out - duration + 1, info->frame_out);
Expand Down
2 changes: 1 addition & 1 deletion src/qml/filters/fadein_brightness/meta.qml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import org.shotcut.qml 1.0
Metadata {
type: Metadata.Filter
objectName: 'fadeInBrightness'
name: qsTr("Fade From Black")
name: qsTr("Fade In Video")
mlt_service: "brightness"
qml: "ui.qml"
}
23 changes: 21 additions & 2 deletions src/qml/filters/fadein_brightness/ui.qml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,12 @@ Rectangle {
Component.onCompleted: {
if (filter.isNew) {
duration = filter.framesFromTime('1:0')
filter.set('start', 0)
filter.set('end', 1)
filter.set('level', '0=0; %1=1'.arg(duration - 1))
filter.set('alpha', 1)
filter.set('in', filter.producerIn)
filter.set('out', filter.getDouble('in') + duration - 1)
}
alphaCheckbox.checked = filter.get('alpha') != 1
}

ColumnLayout {
Expand All @@ -49,7 +50,25 @@ Rectangle {
maximumValue: 5000
value: filter.getDouble('out') - filter.getDouble('in') + 1
onValueChanged: {
var out = filter.getDouble('in') + value - 1
filter.set('out', filter.getDouble('in') + value - 1)
if (filter.get('alpha') != 1)
filter.set('alpha', '0=0; %1=1'.arg(duration - 1))
else
filter.set('level', '0=0; %1=1'.arg(duration - 1))
}
}
}
CheckBox {
id: alphaCheckbox
text: qsTr('Adjust opacity instead of fade with black')
onClicked: {
if (checked) {
filter.set('level', 1)
filter.set('alpha', '0=0; %1=1'.arg(duration - 1))
} else {
filter.set('level', '0=0; %1=1'.arg(duration - 1))
filter.set('alpha', 1)
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/qml/filters/fadein_movit/meta.qml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import org.shotcut.qml 1.0
Metadata {
type: Metadata.Filter
objectName: 'fadeInMovit'
name: qsTr("Fade From Black")
name: qsTr("Fade In Video")
mlt_service: "movit.opacity"
needsGPU: true
qml: "ui.qml"
Expand Down
19 changes: 18 additions & 1 deletion src/qml/filters/fadein_movit/ui.qml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ Rectangle {
filter.set('in', filter.producerIn)
filter.set('out', filter.getDouble('in') + duration - 1)
}
alphaCheckbox.checked = filter.get('alpha') != 1
}

ColumnLayout {
Expand All @@ -50,8 +51,24 @@ Rectangle {
value: filter.getDouble('out') - filter.getDouble('in') + 1
onValueChanged: {
var out = filter.getDouble('in') + value - 1
filter.set('opacity', '0=0; %1=1'.arg(duration - 1))
filter.set('out', out)
if (filter.get('alpha') != 1)
filter.set('alpha', '0~=0; %1=1'.arg(duration - 1))
else
filter.set('opacity', '0~=0; %1=1'.arg(duration - 1))
}
}
}
CheckBox {
id: alphaCheckbox
text: qsTr('Adjust opacity instead of fade with black')
onClicked: {
if (checked) {
filter.set('opacity', 1)
filter.set('alpha', '0~=0; %1=1'.arg(duration - 1))
} else {
filter.set('opacity', '0~=0; %1=1'.arg(duration - 1))
filter.set('alpha', 1)
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/qml/filters/fadeout_brightness/meta.qml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import org.shotcut.qml 1.0
Metadata {
type: Metadata.Filter
objectName: 'fadeOutBrightness'
name: qsTr("Fade To Black")
name: qsTr("Fade Out Video")
mlt_service: "brightness"
qml: "ui.qml"
}
31 changes: 26 additions & 5 deletions src/qml/filters/fadeout_brightness/ui.qml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,14 @@ Rectangle {
Component.onCompleted: {
if (filter.isNew) {
duration = filter.framesFromTime('1:0')
filter.set('start', 1)
filter.set('end', 0)
filter.set('out', filter.producerOut)
filter.set('in', filter.getDouble('out') - duration + 1)
var out = filter.producerOut
var inFrame = out - duration + 1
filter.set('level', '0=1; %1=0'.arg(duration - 1))
filter.set('alpha', 1)
filter.set('in', inFrame)
filter.set('out', out)
}
alphaCheckbox.checked = filter.get('alpha') != 1
}

ColumnLayout {
Expand All @@ -49,7 +52,25 @@ Rectangle {
maximumValue: 5000
value: filter.getDouble('out') - filter.getDouble('in') + 1
onValueChanged: {
filter.set('in', filter.getDouble('out') - duration + 1)
var inFrame = filter.getDouble('out') - duration + 1
filter.set('in', inFrame)
if (filter.get('alpha') != 1)
filter.set('alpha', '0=1; %1=0'.arg(duration - 1))
else
filter.set('level', '0=1; %1=0'.arg(duration - 1))
}
}
}
CheckBox {
id: alphaCheckbox
text: qsTr('Adjust opacity instead of fade with black')
onClicked: {
if (checked) {
filter.set('level', 1)
filter.set('alpha', '0=1; %1=0'.arg(duration - 1))
} else {
filter.set('level', '0=1; %1=0'.arg(duration - 1))
filter.set('alpha', 1)
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/qml/filters/fadeout_movit/meta.qml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import org.shotcut.qml 1.0
Metadata {
type: Metadata.Filter
objectName: 'fadeOutMovit'
name: qsTr("Fade To Black")
name: qsTr("Fade Out Video")
mlt_service: "movit.opacity"
needsGPU: true
qml: "ui.qml"
Expand Down
17 changes: 17 additions & 0 deletions src/qml/filters/fadeout_movit/ui.qml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Rectangle {
filter.set('in', inFrame)
filter.set('out', out)
}
alphaCheckbox.checked = filter.get('alpha') != 1
}

ColumnLayout {
Expand All @@ -53,7 +54,23 @@ Rectangle {
onValueChanged: {
var inFrame = filter.getDouble('out') - duration + 1
filter.set('in', inFrame)
if (filter.get('alpha') != 1)
filter.set('alpha', '0~=1; %1=0'.arg(duration - 1))
else
filter.set('opacity', '0~=1; %1=0'.arg(duration - 1))
}
}
}
CheckBox {
id: alphaCheckbox
text: qsTr('Adjust opacity instead of fade with black')
onClicked: {
if (checked) {
filter.set('opacity', 1)
filter.set('alpha', '0~=1; %1=0'.arg(duration - 1))
} else {
filter.set('opacity', '0~=1; %1=0'.arg(duration - 1))
filter.set('alpha', 1)
}
}
}
Expand Down

0 comments on commit a0afc89

Please sign in to comment.