Quick Sign In:  

Forum: VirtualDJ Skins

Topic: logo/picture dynamic placement on videoskin
NicotuxHome userMember since 2014
Example of how to dynamically control image position anywhere on screen using variables

logo_H and logo_V can be set by slider or any numeric value
<skin name="Logo Sliders" version="850" width="1920" height="1080" image=YOURLOGO" nbdecks="2">

<video x="0" y="0" width="1920" height="1080"/>

<slider action="param_multiply 1920 &amp; set logo_H" action2="param_multiply 1080 &amp; set logo_V" direction="right" direction2="up" orientation="2d" >
<pos x="0" y="0"/>
<size width="1920" height="1080"/> screen size
<fader>
<size width="100" height="100"/> rendering size
<off x="1" y="1" width="422" height="298"/> size of YOURLOGO to make it resizeable
</fader>
</slider>

exactly the same slider code can be used to create a 2d placement slider - smaller size as wanted - in a skin
or variables can take numeric value from any action
 

geposted Sun 19 Sep 21 @ 5:12 pm
NicotuxHome userMember since 2014
example of use:
moving logo; X=position in song, Y=peek level
repeat_start px ? repeat_stop px & set logo_H 0 & set logo_V 1920 : repeat_start px 10ms -1 & set logo_H `deck active param_multiply get_position 1920` & set logo_V `deck active param_multiply get_level_peak 1080`
 

geposted Sun 19 Sep 21 @ 6:55 pm
NicotuxHome userMember since 2014
Cool version of flying logos and a rotating logo uploaded
added clock and custom text on logo and beat flashing
wait and see
 

geposted Tue 21 Sep 21 @ 3:52 pm
locodogPRO InfinityModeratorMember since 2013
image only or can this apply to pos &| w/h for vid source?

<video source="channel" chan="3" canstretch="true">
<pos x="+633+5" y="+0"/>
<size width="633" height="353"/>
</video>
 

geposted Mon 27 Sep 21 @ 11:35 am
NicotuxHome userMember since 2014
It's in fact a simple 2D Slider taking the whole screen size
So that only displays what a fader can :

shape and text and image from background and images from custom_icon

Yes I woul'd like it to work with any visuals or video but currently not possible this way

Simply using the videoskin as a main skin allows to set position and move picture with mouse
but using it as an overlay to existing skin prevent the 2d slider to.... "slide" :
only one click control working (passthrough="pass" is only one shot for top element then underlaying element take full control)
relative (mouse scroll) and rightclick not usable in this situation, does not apply to both elements of 2d sliders (that's why some implementations - such as old skin tablet - use 3 sliders for that)
 

geposted Mon 27 Sep 21 @ 3:05 pm
NicotuxHome userMember since 2014
Interesting :
<video> is close to work because using it in a fader currently displays background or color (not video though) and thus can be used as a visual -(at least in main skin)
<icon> is not so good with 2D fader : in some case only one direction update and thus detach from image
 

geposted Mon 27 Sep 21 @ 4:55 pm
NicotuxHome userMember since 2014
locodog wrote :
image only or can this apply to pos &| w/h for vid source?

<video source="channel" chan="3" canstretch="true">
<pos x="+633+5" y="+0"></pos>
<size width="633" height="353"></size>
</video>

In latest other thread I figureout how to do this with samples (thanks to Adion ^^) using "resize" plugin
this made me think about a modification to the plugin "resize" that is currently using "position" which is not scriptable (unless you know how to ?)

in a way to make position easily scriptable , I would just have to declare sliders for origin and size
would by the way maybe allow to bypass limitations with position (i.e.: start or end out of screen)

 

geposted Tue 05 Oct 21 @ 11:20 am
locodogPRO InfinityModeratorMember since 2013
Not looked in to position type of input.

Could you express it as two co-ords with 4 dials [2 for top left, 2 for bottom right corner]

or 4 dials, height, width, co-ords of one corner
 

geposted Tue 05 Oct 21 @ 12:07 pm
NicotuxHome userMember since 2014
I made a skin for the plugin GUI :

https://1drv.ms/u/s!AnSOFuC3eKruiGTwdjb1qfHa2GwD?e=PouHaX

could be 1/10 in size but there are many workarounds needed with unusual use of functions
- sliders scrolling out of bounds
- slider scroll passed to action
- 2d sliders scrolling passing to first slider action
- 2d slider rightclick only for first slider
- 2d sliders not refreshing fader when only one slider moves
- grabzone disappearing if not at least one pixel free
- clickthrough pass does not handle sliders and top elements (only bottom element get next actions)
)

the same kind of skin usable to control logo placement though

I think it is friendly enough (but flashy debug colors) :
click and move cursor or slide logo/text over video to fix coords
right click to toggle between 2 modes move window/set coords
mouse roller to set transparency
lateral sliders for height and width :
can scroll or click
rightclick for temporary
can move using borders in pointing mode
can resize using bottom right corner double click restore default size
 

geposted Wed 06 Oct 21 @ 12:37 am
NicotuxHome userMember since 2014
added some fixes :
gray background when no video
cross pointer over logo in grab mode
fixed resize area and resize indicator
less flashy colors

look usable
 

geposted Wed 06 Oct 21 @ 2:30 am
NicotuxHome userMember since 2014
 

geposted Wed 06 Oct 21 @ 4:49 am
NicotuxHome userMember since 2014
Modified plugin (no problem with core it is working) ok, sliders and position

Trying to implement the custom skin :
everything as usual with audio plugin, but this one is the first Video plugin i test with custom skin

in header file :
class Resize8 : public IVdjPluginVideoFx8
{
public:
HRESULT VDJ_API OnLoad();
HRESULT VDJ_API OnGetPluginInfo(TVdjPluginInfo8* info);
HRESULT VDJ_API OnGetUserInterface(TVdjPluginInterface8* pluginInterface);
ULONG VDJ_API Release();
.....

in code file :
//---------------------------------------------------------------------------------------------
HRESULT VDJ_API Resize8::OnGetUserInterface(TVdjPluginInterface8* pluginInterface)
{

pluginInterface->Type = VDJINTERFACE_SKIN;
...

the function never called, the virtual one from vdjPlugin8.h

// Custom user-interface
// Fill the VDJ_WINDOW or xml/bitmap info in the passed pluginInterface structure, to define your own plugin window
virtual HRESULT VDJ_API OnGetUserInterface(TVdjPluginInterface8 *pluginInterface) {return E_NOTIMPL;}


is called instead

the same code with another type of plugin

class Resize8 : public IVdjPluginDsp8
{
...
is working OK

VS 2019 and SDK 2019 or recent SDK 2021
of course both release and debug mode in 64bit


I really can't figure out where the problem can be
knowing the skin is working when inserted from my PlugSkin which defines as Dsp8
 

geposted Wed 06 Oct 21 @ 12:17 pm
AdionPRO InfinityCTOMember since 2006
To check for any compiler errors in finding the correct function, try to add 'override' in the header file to any function that is supposed to override a function in the base class.
So in this case:
HRESULT VDJ_API OnGetUserInterface(TVdjPluginInterface8 *pluginInterface) override;
 

geposted Wed 06 Oct 21 @ 12:28 pm
NicotuxHome userMember since 2014
Tested but badly it did not helped
no message no warning.. no idea
 

geposted Wed 06 Oct 21 @ 12:49 pm
AdionPRO InfinityCTOMember since 2006
OnLoad is called? (and you returned S_OK?)
 

geposted Wed 06 Oct 21 @ 12:57 pm
NicotuxHome userMember since 2014
yes it is called and returns S_OK,
OnGetPluginInfo()
Release()
OnDeviceInit()
OnDeviceClose()
OnDraw()
all working, plugin is fully functional

only it is working as when using VDJINTERFACE_DEFAULT
OnGetUserInterface is wrong virtual one
 

geposted Wed 06 Oct 21 @ 1:53 pm
NicotuxHome userMember since 2014
Finally got it : one header file was using wrong header (from old 2019 SDK) while other were using current (2021 SDK)
It look like VS 2019 currently allow references to multiple class with same name as long as header use pragma once then linker is using what it wants

anyway fixed and working (some adjustments needed with rightclicks and default values :\ )
 

geposted Wed 06 Oct 21 @ 8:59 pm