EFX make strange LSB in position

Generic issues not specifically related to a QLC+ area.
Post here only if you can't really find the reason of an issue
ruxymm
Posts: 13
Joined: Tue Jan 04, 2022 9:15 am
Location: Saint-Petersburg, Russia
Real Name: Maxim

4.12.4a
macOS Mojave 10.14.4
Intel i9

When I add EFX and change checkbox Relative I see sometimes like LSB have small range in their movements.

I see this behavior on different fixtures with different range constraints. As with the effect separately or with any combination with scenes, etc. It seems that the error is of some kind of random nature.

Specially made a screen recording on which this problem is visible.

https://www.youtube.com/watch?v=ucSjt2FkHMA

Who has any ideas?
User avatar
GGGss
Posts: 2732
Joined: Mon Sep 12, 2016 7:15 pm
Location: Belgium
Real Name: Fredje Gallon

You made it relative to nothing ...
Try using a base-position (position scene) and then the relative option in EFX.
This should work better?

PS: you also can use the DMX monitor instead of using the simple desk.
All electric machines work on smoke... when the smoke escapes... they don't work anymore
ruxymm
Posts: 13
Joined: Tue Jan 04, 2022 9:15 am
Location: Saint-Petersburg, Russia
Real Name: Maxim

GGGss wrote: Wed Jan 05, 2022 11:08 am You made it relative to nothing ...
Try using a base-position (position scene) and then the relative option in EFX.
This should work better?

PS: you also can use the DMX monitor instead of using the simple desk.
I tried to use EFX with Scene contains constant Pan and Tilt with Relative mode. And it works the same way. I just didn't show it in the first video.

I recorded the second video with start position https://www.youtube.com/watch?v=DPod6AZwBAY

Maybe I am doing something wrong?

At first I noticed this behavior on a real head in a large project on slow motion, and then I began to figure out what leads to this.


you also can use the DMX monitor instead of using the simple desk. - thank you, I'll try it!
User avatar
GGGss
Posts: 2732
Joined: Mon Sep 12, 2016 7:15 pm
Location: Belgium
Real Name: Fredje Gallon

Now you are showing that channel 3 & 4 are the fine (LSB) channels of a 16 bit pan/tilt fixture.
I clearly can see the base position (100x100) and the relative part working? No?
Instead of a circle, make it square and you'll notice a combined value of 0x5F00 (24320) to 0x68FF (26879). That is the start position of 0x6400 and a window of 0x0A00
All electric machines work on smoke... when the smoke escapes... they don't work anymore
janosvitok
Posts: 1274
Joined: Mon Apr 13, 2015 7:05 am
Location: Bratislava, Slovakia
Real Name: Jano Svitok
Contact:

AFAIK 16 bit values in relative mode do not work if over/underflow happens. There is no mechanism now for over/underflow.
LSB and MSB of base and EFX value are summed independently. No part of result is passed from LSB sum to MSB sum nor the other way round.
That creates artifacts that you see.
ruxymm
Posts: 13
Joined: Tue Jan 04, 2022 9:15 am
Location: Saint-Petersburg, Russia
Real Name: Maxim

janosvitok wrote: Fri Jan 07, 2022 7:50 am AFAIK 16 bit values in relative mode do not work if over/underflow happens. There is no mechanism now for over/underflow.
LSB and MSB of base and EFX value are summed independently. No part of result is passed from LSB sum to MSB sum nor the other way round.
That creates artifacts that you see.
Thank you! Unfotaunately it looks for me as a bug :(
It turns out that I practically cannot use Relative EFX. Only in a scene where I can hardcode an absolute position with null LSB is this applicable. I cannot use two or more EFXs in one collection, most likely I cannot use a smooth transition between collections with Relative EFX and so on. Very sad. Such a powerful mechanism is not finalized :(
ruxymm
Posts: 13
Joined: Tue Jan 04, 2022 9:15 am
Location: Saint-Petersburg, Russia
Real Name: Maxim

GGGss wrote: Thu Jan 06, 2022 8:18 am Now you are showing that channel 3 & 4 are the fine (LSB) channels of a 16 bit pan/tilt fixture.
I clearly can see the base position (100x100) and the relative part working? No?
No, unfortunately they do not work. LSB range is [0..227]. It is very likely that this is still due to incorrect handling of the uint8 overflow
User avatar
GGGss
Posts: 2732
Joined: Mon Sep 12, 2016 7:15 pm
Location: Belgium
Real Name: Fredje Gallon

Thinking of it, I searched for a very old thread of mine, looking at the same behavior, way back in '19 or so. Didn't find it.
Obviously this is a bug and pitty to have it in the most usefull feature of QLC+...
I'd change the title of this post to 'BUG confirmed - EFX make strange LSB in position', so @Massimo can check it (again?) Please?

Found it: viewtopic.php?p=29696#p29696
janosvitok wrote: Fri Jan 07, 2022 7:50 am AFAIK 16 bit values in relative mode do not work if over/underflow happens. There is no mechanism now for over/underflow.
LSB and MSB of base and EFX value are summed independently. No part of result is passed from LSB sum to MSB sum nor the other way round.
That creates artifacts that you see.
All electric machines work on smoke... when the smoke escapes... they don't work anymore
User avatar
mcallegari
Posts: 4482
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

Can you please share a simple test project?
Just to make sure we see the same things. Thanks
ruxymm
Posts: 13
Joined: Tue Jan 04, 2022 9:15 am
Location: Saint-Petersburg, Russia
Real Name: Maxim

mcallegari wrote: Sat Jan 08, 2022 10:46 am Can you please share a simple test project?
Just to make sure we see the same things. Thanks
No problem! I attached the simplest project with described behaviour to this post. Please play Test collection.
Attachments
LSB test.qxw
(2.45 KiB) Downloaded 364 times
janosvitok
Posts: 1274
Joined: Mon Apr 13, 2015 7:05 am
Location: Bratislava, Slovakia
Real Name: Jano Svitok
Contact:

I started working on this issue in https://github.com/mcallegari/qlcplus/pull/999
I stopped when I could not explain the need for explicit relationship between lsb and msb in fixture defs.
User avatar
mcallegari
Posts: 4482
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

There is one mistake on both sides.
One mistake is in the project: in the Collection, Scene and EFX are in inverted order!
If you look at the "Center eight" Collection in the tutorial #7 project you will see that the order is top-down. So Scene first and EFX is second in the list.

The other mistake is in the QLC+ code. LSB channels shouldn't be treated as relative. I can easily apply a fix but I can't provide a macOS test version so quickly. Do you have any chance to test a Windows version instead?
janosvitok
Posts: 1274
Joined: Mon Apr 13, 2015 7:05 am
Location: Bratislava, Slovakia
Real Name: Jano Svitok
Contact:

mcallegari wrote: Mon Jan 10, 2022 6:54 pm LSB channels shouldn't be treated as relative.
What do you mean by that?
User avatar
mcallegari
Posts: 4482
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

janosvitok wrote: Mon Jan 10, 2022 7:24 pm
mcallegari wrote: Mon Jan 10, 2022 6:54 pm LSB channels shouldn't be treated as relative.
What do you mean by that?
These need to be removed
https://github.com/mcallegari/qlcplus/b ... e.cpp#L513
https://github.com/mcallegari/qlcplus/b ... e.cpp#L523
ruxymm
Posts: 13
Joined: Tue Jan 04, 2022 9:15 am
Location: Saint-Petersburg, Russia
Real Name: Maxim

mcallegari wrote: Mon Jan 10, 2022 6:54 pm There is one mistake on both sides.
One mistake is in the project: in the Collection, Scene and EFX are in inverted order!
If you look at the "Center eight" Collection in the tutorial #7 project you will see that the order is top-down. So Scene first and EFX is second in the list.

The other mistake is in the QLC+ code. LSB channels shouldn't be treated as relative. I can easily apply a fix but I can't provide a macOS test version so quickly. Do you have any chance to test a Windows version instead?

Thank you for pointing out that there is the only correct order, because for me it is not at all obvious. But when I tested this, I assumed and tested such a feature in different orders. There has always been a mistake.

Yes, I can test it on Windows. But for real work I can use only Mac.
janosvitok
Posts: 1274
Joined: Mon Apr 13, 2015 7:05 am
Location: Bratislava, Slovakia
Real Name: Jano Svitok
Contact:

I think the order in case of relative EFX does not matter (see https://github.com/mcallegari/qlcplus/b ... e.cpp#L540 where all collected static values and all collected relative values are merged).

Re: drop relative LSB: I don't think it's that easy. You can't simply split 16 bit number to LSB and MSB, pass it through different code paths and hope for the correct result.

EFX produces pan/tilt in float format 0.0...255.0 (if I got it right). Relative mode subtracts 127.5 from that value (e.g. -127 for MSB and -127 for LSB) so that the resulting range is -127.5 to 127.5.

If the LSB is written without relative flag:
- multiple concurrent relative EFX: LSB of all but the last one will be discarded
- LSB of the static scene will be discarded

Unfortunately I don't have enough time to setup devenv again, and test these changes...
User avatar
mcallegari
Posts: 4482
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

ruxymm wrote: Mon Jan 10, 2022 8:10 pm Thank you for pointing out that there is the only correct order, because for me it is not at all obvious. But when I tested this, I assumed and tested such a feature in different orders. There has always been a mistake.
Yes, I can test it on Windows. But for real work I can use only Mac.
Please test version 4.12.5.115 for Windows and let me know if this is the expected behaviour.
Test versions available here: viewtopic.php?f=12&t=3135
User avatar
GGGss
Posts: 2732
Joined: Mon Sep 12, 2016 7:15 pm
Location: Belgium
Real Name: Fredje Gallon

First test shows a successful outcome.
Unless you go relative with a base-position of 0,0 it shows a hiccup. (What can be expected: in DMX world there is no negative value)
I personally don't think it's necessary to alter this.
All electric machines work on smoke... when the smoke escapes... they don't work anymore
ruxymm
Posts: 13
Joined: Tue Jan 04, 2022 9:15 am
Location: Saint-Petersburg, Russia
Real Name: Maxim

mcallegari wrote: Tue Jan 11, 2022 8:09 am
ruxymm wrote: Mon Jan 10, 2022 8:10 pm Thank you for pointing out that there is the only correct order, because for me it is not at all obvious. But when I tested this, I assumed and tested such a feature in different orders. There has always been a mistake.
Yes, I can test it on Windows. But for real work I can use only Mac.
Please test version 4.12.5.115 for Windows and let me know if this is the expected behaviour.
Test versions available here: viewtopic.php?f=12&t=3135
I checked it on the same project. Version QLC+_4.12.5.115 Now there is a difference in behaviour with different scene order and EFX in the collection. In the forward order, everything began to work correctly in this example, and in the reverse order (EFX -> Scene), the LSB was always zero.
User avatar
mcallegari
Posts: 4482
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

For the record, Collection steps order is explained in the documentation, even with Scene + EFX example.
https://www.qlcplus.org/docs/html_en_EN ... ditor.html
Post Reply