Skip to content

cannot customize video.screen.size configuration #76

@LiYing2010

Description

@LiYing2010

I am trying to customize video.screen.size configuration, but it does not work, and VideoRecorder always get System Screen Dimension

my code (in Kotlin) is something like:

System.getProperties().apply {
    setProperty("video.screen.size", "1366x768")
}

and when I debug into method com.automation.remarks.video.recorder.ffmpeg.FFmpegWrapper#getScreenSize:

private String getScreenSize() {
    Dimension dimension = conf().screenSize();
    return dimension.width + "x" + dimension.height;
}

the dimension value get from conf().screenSize() is always System Screen Dimension,
instead of my customized setting 1366x768

since conf() returns a proxy which created by org.aeonbits.owner.ConfigFactory
so I also debugged into these proxy code,
and found something in org.aeonbits.owner.PropertiesInvocationHandler#invoke:

public Object invoke(Object proxy, Method invokedMethod, Object... args) throws Throwable {
    propertiesManager.syncReloadCheck();

    if (isDefault(invokedMethod))
        return invokeDefaultMethod(proxy, invokedMethod, args);

    DelegateMethodHandle delegate = getDelegateMethod(invokedMethod);
    if (delegate != null)
        return delegate.invoke(args);

    return resolveProperty(invokedMethod, args);
}

looks like com.automation.remarks.video.recorder.VideoConfiguration#screenSize is a default method of interface,

@Key("video.screen.size")
default Dimension screenSize() {
  return SystemUtils.getSystemScreenDimension();
}

so PropertiesInvocationHandler always invokes this default method, instead of resolve property value,
that's why customized video.screen.size is never be used.

I guess this issue was introduced in this commit:
0550699#diff-203944a2497bdc096cac64c8e238e158746026fe559d3f4bcf0ed24db5dcc523R47-R50

I like to ask, is my investigation result correct?
if so, I like to send a PR to fix this issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions