Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request : simultaneous multiscreen #46

Open
AmbiMod opened this issue Dec 31, 2020 · 24 comments
Open

Request : simultaneous multiscreen #46

AmbiMod opened this issue Dec 31, 2020 · 24 comments

Comments

@AmbiMod
Copy link

AmbiMod commented Dec 31, 2020

Hi sabaat.

Thank you for your release of HSC.

I saw that we can use different screen but not simultaneous so I would like to know if you can adjust your software to use multi screen at the same time like Synlight does https://github.com/Synless/SynLight

This is the only one I found, Ambibox, prismatik or Adrilight don’t do the same and I think it will be a good thing if we can use this feature with Hyperion NG or HyperHDR.

I don’t know if it’s possible but it will be a great addon, a lot of people ask for this.

Thank you again for what you provided.

See you my friend. 🙂

Regards.

@sabaatworld
Copy link
Owner

The software does capture multiple screens at the same time. Does it not work for you?

@AmbiMod
Copy link
Author

AmbiMod commented Dec 31, 2020

Ah ok.

Someone told me that he can’t do it on his installation, he already have 3 screens with extended desktop option enabled ( I cannot test on my side, i only have 1 screen ) and can only make working one at the time.

If you confirm me that we can do it, you can close or delete this issue 😁 or maybe not, I have another question.

Your software didn’t work with DRM apps, you can do something for that ? Or we need to still use navigator to bypass it.

Thanks.

Happy New Year’s Eve

@sabaatworld
Copy link
Owner

Actually I have never been able to test out multi screen with Hyperion. I've only tested that the software has the ability to support that.

I thought there is no way to bypass DRM. Can you tell me more about navigator?

@a14219
Copy link

a14219 commented Feb 14, 2021

Hi there,

I'm struggling with the same issue and I have no idea how to grab 3 screens at the same time.
When I configure a new connection, I need to specify a Monitor Index, and it's impossible to choose more than one.
image

If I make 3 different instances, one for each monitor, how do I send the data to Hyperion? Do I need to have a different RPi for each screen? Can Hyperion receive 3 different buffers and merge them to control one large LED Strip? My setup would be something like this:

image

Is it even possible with current software?

@AmbiMod
Copy link
Author

AmbiMod commented Feb 16, 2021

Actually I have never been able to test out multi screen with Hyperion. I've only tested that the software has the ability to support that.

I thought there is no way to bypass DRM. Can you tell me more about navigator?

Without ambilight yes. No way to bypass without material capture as you know.

As @a14219 i’m asking how we can get working this setup. It’s possible with your software or you need to add this features ?

Thank you ☺️

@parazite13
Copy link

Hi guys,

For your information I made it work for dual screen using two instance of Dx11ScreenCapture.
You can take a look at it here : https://github.com/parazite13/HyperionScreenCap

I won't make a PR to merge it back here beacause there is certainly a better way to integrate it for N monitors (especially in terms of UI), but if you'are interested @sabaatworld I can make a PR anyway.

@sabaatworld
Copy link
Owner

I see that a could of files have been changed? Can you please summarize your changes so that I can understand them?

@parazite13
Copy link

The main thing is that I've implemented the IScreenCapture interface in the Dx11DualScreenCapture.cs file so that I can run two instance of the Dx11ScreenCapture inside. After that I have juste merged the output of the two byte[] from the Dx11ScreenCapture.Capture() into a new byte[] that is twice the size to implement the Dx11DualScreenCapture.Capture() method.
All of the others modifications are just to select this new option and save it in the preference, so that is what I meant when I said there is probably a better way to integrate it in terms of Ui.

@tihoangyeudau
Copy link

tihoangyeudau commented Jan 10, 2022

The main thing is that I've implemented the IScreenCapture interface in the Dx11DualScreenCapture.cs file so that I can run two instance of the Dx11ScreenCapture inside. After that I have juste merged the output of the two byte[] from the Dx11ScreenCapture.Capture() into a new byte[] that is twice the size to implement the Dx11DualScreenCapture.Capture() method. All of the others modifications are just to select this new option and save it in the preference, so that is what I meant when I said there is probably a better way to integrate it in terms of Ui.

@parazite13 I tested your fork and I got this issue and no capture found when 2 screens have different resolusions. When they have same resolution, it works.

2022-01-10 20:27:45 [INFO] [9] HyperionScreenCap.Helper.HyperionTask.StartCapture:0 - HyperionTask[ConfigurationId: b035de]: Waiting before next screen capture attempt
2022-01-10 20:27:46 [ERROR] [9] HyperionScreenCap.Helper.HyperionTask.StartCapture:0 - HyperionTask[ConfigurationId: b035de]: Exception in screen capture attempt: 14
System.Exception: Error occured while sending image to server: Index was outside the bounds of the array. ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at HyperionScreenCap.Capture.Dx11DualScreenCapture.Capture()
   at HyperionScreenCap.Helper.HyperionTask.TransmitNextFrame()
   --- End of inner exception stack trace ---
   at HyperionScreenCap.Helper.HyperionTask.TransmitNextFrame()
   at HyperionScreenCap.Helper.HyperionTask.StartCapture()

@sabaatworld
Copy link
Owner

Thanks! I'll explore this for the next release.

@tihoangyeudau
Copy link

tihoangyeudau commented Jan 10, 2022

Thanks! I'll explore this for the next release.

no, your newest release is good. above issue is of DualScreen fork of @parazite13

@parazite13
Copy link

I was aware of this when I've implemented this myself. Things gets trickier when not using the same resolution.
I'll try to spend a bit of time on it the upcoming days.

@tihoangyeudau
Copy link

I was aware of this when I've implemented this myself. Things gets trickier when not using the same resolution. I'll try to spend a bit of time on it the upcoming days.

That's sound great!

@parazite13
Copy link

I've pushed a fix on my fork if you want to check @tihoangyeudau

@tihoangyeudau
Copy link

I've pushed a fix on my fork if you want to check @tihoangyeudau

Ok i will check it right now!

@tihoangyeudau
Copy link

@parazite13 Work perfect! Thank you for your effort and processing speed! next updates of you and @sabaatworld are is very valuable!

@tihoangyeudau
Copy link

tihoangyeudau commented Jan 12, 2022

@sabaatworld we know Hyperionscreencap can generate multiple screens to capture and set priorities accordingly, but for Hyperion.ng users always have to set the priorities again every time Hyperion.ng restarts without being able to save that priorities setting after each reboot.

@tihoangyeudau
Copy link

tihoangyeudau commented Jan 12, 2022

@parazite13 but wait, it can't work with lanscape screen + portrait screen. it seems that hyperionscreencap captures the portrait screen incorrectly

my log

2022-01-13 09:53:28 [ERROR] [7] HyperionScreenCap.Helper.HyperionTask.StartCapture:176 - HyperionTask[ConfigurationId: c25ed5]: Exception in screen capture attempt: 1
System.Exception: Error occured while sending image to server: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.IO.IOException: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   at HyperionScreenCap.Networking.HyperionClient.sendMessageSize(Int32 size) in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Networking\HyperionClient.cs:line 111
   at HyperionScreenCap.Networking.FbsClinet.SendFinishedMessage(FlatBufferBuilder finaliedBuilder) in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Networking\FbsClinet.cs:line 56
   at HyperionScreenCap.Networking.FbsClinet.SendImageDataMessage(Byte[] pixeldata, Int32 width, Int32 height) in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Networking\FbsClinet.cs:line 30
   at HyperionScreenCap.Networking.HyperionClient.SendImageData(Byte[] pixeldata, Int32 width, Int32 height) in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Networking\HyperionClient.cs:line 85
   at HyperionScreenCap.Helper.HyperionTask.TransmitNextFrame() in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Helper\HyperionTask.cs:line 147
   --- End of inner exception stack trace ---
   at HyperionScreenCap.Helper.HyperionTask.TransmitNextFrame() in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Helper\HyperionTask.cs:line 154
   at HyperionScreenCap.Helper.HyperionTask.StartCapture() in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Helper\HyperionTask.cs:line 170
2022-01-13 09:56:13 [ERROR] [9] HyperionScreenCap.Helper.HyperionTask.StartCapture:176 - HyperionTask[ConfigurationId: c25ed5]: Exception in screen capture attempt: 1
System.Exception: Error occured while sending image to server: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.IO.IOException: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   at HyperionScreenCap.Networking.ProtoClient.SendRequest(IMessageLite request) in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Networking\ProtoClient.cs:line 56
   at HyperionScreenCap.Networking.ProtoClient.SendImageDataMessage(Byte[] pixeldata, Int32 width, Int32 height) in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Networking\ProtoClient.cs:line 29
   at HyperionScreenCap.Networking.HyperionClient.SendImageData(Byte[] pixeldata, Int32 width, Int32 height) in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Networking\HyperionClient.cs:line 85
   at HyperionScreenCap.Helper.HyperionTask.TransmitNextFrame() in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Helper\HyperionTask.cs:line 147
   --- End of inner exception stack trace ---
   at HyperionScreenCap.Helper.HyperionTask.TransmitNextFrame() in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Helper\HyperionTask.cs:line 154
   at HyperionScreenCap.Helper.HyperionTask.StartCapture() in C:\Users\tuant\Documents\GitHub\HyperionScreenCap\HyperionScreenCap\Helper\HyperionTask.cs:line 170

@sabaatworld
Copy link
Owner

Let's discuss the portrait issue over on #57

@justinknguyen
Copy link

status on implementing this feature?

@zuldero
Copy link

zuldero commented Apr 12, 2022

@parazite13 is you version working for different resolutions (i evan got a 5120x1440 screen) ?. I plan to set up hyperion i the next month's, schould i download your one, or will this get mearchd to this repo (@sabaatworld)?

@parazite13
Copy link

Different resolution should be fine as soon as you don't have a multi orientation setup

@HybridAir
Copy link

@parazite13 sorry to resurrect an old issue, but do you have a compiled build of your fork available anywhere? I cannot get visual studio to build it on my end.

@parazite13
Copy link

Since quite recently the official Hue sync app has released the dual screen feature so I'm not using this tool anymore sorry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants