3DSControllerPlus - PC-->3DS video and input streaming

Discussion in '3DS - Homebrew Development and Emulators' started by Sono, Nov 4, 2016.

  1. JavaScribe

    JavaScribe Confused

    Member
    3
    Apr 14, 2017
    United States
    here idk
    I suggested something, and then tried it myself to see if it worked. It didn't, so I edited my reply with that information.
     
    TheGamerMAKS likes this.
  2. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Oh ok thanks JavaScribe.

    I tried PowerShell again exactly how you said but this is how it ended up:
    PS C:\Users\Alex\Downloads\FileStreamer\out> .\out\FileStreamer.exe
    .\out\FileStreamer.exe : The term '.\out\FileStreamer.exe' is not recognized as the name of a cmdlet, function, script
    file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
    and try again.
    At line:1 char:1
    + .\out\FileStreamer.exe
    + ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (.\out\FileStreamer.exe:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
     
  3. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    Oops, I made a mistake, sorry.

    Before running .\out\FileStreamer.exe, type "cd .." without quotes and press ENTER, and then try to run it with .\out\FileStreamer.exe
     
  4. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Hey I got the PowerShell to work! I appreciate you walking me through this. So this is what I got:
    PS C:\Users\Alex\Downloads\FileStreamer> .\out\FileStreamer.exe
    C:\Users\Alex\Downloads\FileStreamer\out\FileStreamer.exe <FILE | -> <IP Address>
    C:\Users\Alex\Downloads\FileStreamer\out\FileStreamer.exe + <IP Address> [exe]
    PS C:\Users\Alex\Downloads\FileStreamer>
    What happens next?
     
    Sono likes this.
  5. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    ".\out\FileStreamer.exe + 10.0.0.111"
    without quotes, replace 10.0.0.111 with the 3DS' actual IP address
     
  6. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    WOW!!!!! IT WORKS!!!! ok, so I got it to capture the entire screen, but how do I have it only capture the bottom screen of a DS emulator?
    This is what I got btw:
    PS C:\Users\Alex\Downloads\FileStreamer> .\out\FileStreamer.exe + 192.168.1.220 [exe]
    screen capture
    Finding window
    Finding process: PN=exe] T='exe]' N=0 F=0
    Result HWND: 00000000
    press ENTER to continue
     
  7. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    You can't capture ONLY the bottom of the DS emulator, you have to separate the bottom screen from the top screen then.

    the exe parameter is a window filter, but I'm too tired to figure out what the hell I did in the source code :wacko:
     
  8. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Ok that makes sense, so I should just replace the exe parameter with the exact name of the window running?
     
  9. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    Nope, it's very very complicated, and I can't even comprehend the code relevant.
     
  10. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Wait so... there isn't a way at the moment to only capture an emulator window then? Cause I tell you the PC desktop does not look pretty on the bottom screen of a 3ds
     
  11. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    There is, but I haven't used FileStreamer in ages, and I can't read the source code for the window filter due to its extreme complexity. Sorry, you'll have to wait a day or two.
     
  12. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Oh ok, no rush. I super appreciate you walking me through this Sono. If I can get this working, this will be the method that I play and capture DS games for my upcoming Youtube channel so many many thanks to you for your help!
     
    Sono likes this.
  13. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    I still can't believe how overly complicated I did this shit...

    Here are the options with the exe filter: ( source code screenshot for double checking: https://puu.sh/DU8RM/a664682b8c.png )

    Optional number from 0 to 9 (10 and above are invalid) for selecting the window from a 0-based index, or * for selecting the main window. Not specifying anything will behave as if you used 0 here. Edit: I highly recommend ALWAYS using * here.
    Optional + for cropping from fullscreen (absolutely required for OpenGL-based games, or games without VSync).
    Optional EITHER : for title matching, or ! for exe matching (both match strictly from front, case sensitive).
    Required string based on the previous settings. If omitted : and ! then due to a programming mistake from my part, BOTH the exe AND the title has to start with the string.

    Examples:
    0!osu! - matches the first osu! window (doesn't work btw)
    6!firefox - depending on how many windows you have open, this could match a popup window (you have to bruteforce the number)
    *+!osu - this is how to capture fullscreen osu!, fullscreen or not
    "+:ARM Information Center" - in my case, this matches the Firefox window which has an ARM ARM tab open. The quotes are required due to the window title containing spaces.

    If you have any more questions with this weird window filter, feel free to ask. I don't understand it either, don't worry xD
     
    Last edited by Sono, Jul 18, 2019
    TheGamerMAKS likes this.
  14. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Ok sweet! At least this is something to work with. I've been tinkering around with the variables to try to get what I need. Basically I've got No$gba running a DS game with OBS capturing the footage. I cropped the captured window in OBS to only show the bottom screen and then outputting that to a separate preview window. I'm trying to capture this preview window with FileStreamer but so far I can't seem to figure out which variables exactly work. It's an OBS window but the name of the window is Windowed Project (Source) - Window Capture. The variables do work as I've been able to capture other windows; I just haven't figured out this specific window yet.
     
  15. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    If you want to capture the preview window then try 1!obs
    Try replacing 1 with any number between 0 and 9 to see if any of them captures the window you want to capture. If none of them work, try 1+!obs
     
  16. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Ok, so I figured it out; it's: *+!obs. Now this captures the main OBS window which happens to be the preview window; so when I use these variables when the preview window is closed it just captures OBS itself. I tried using numbers but I couldn't figure out which one it would be so I guess this works ;)
    I have a couple of other questions in general about 3DSControllerPlus: With the video streaming I sometimes have black vertical lines that pop up for a few milliseconds then go away, almost like a flicker. Is there a way to get rid of them? It's not too important as it definitely isn't distracting enough that I can't play.
    So since I can get the video from the bottom screen to my 3DS, any idea on how I can map my touch screen to the bottom screen of the emulator so I can basically recreate playing the game natively on my 3DS?
     
  17. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    Sadly the black lines are the result of hardware timings + CPU cache, and I can't really do anything about it without completely nuking FPS from 59 down to even 15 or less, and that's not even talking about latency. I think the black lines don't happen often enough to be TOO distracting, and most people can learn to ignore it.

    As for positioning, sadly I didn't add in any function to manually position the capture rectangle. You have to somehow move the bottom screen to a separate window.
     
  18. TheGamerMAKS

    TheGamerMAKS Member

    Newcomer
    1
    Jul 12, 2019
    United States
    Round Rock, TX
    Yeah that makes sense about the lines and it's fine. Let me get this straight though, what you're saying is it is possible to map the touch screen to a window, just not possible to only map it to a specific section of said window? So what I would need to do is figure out how to have a separate emulator window with just the bottom screen so I can map the touch screen to just that window?
     
  19. JavaScribe

    JavaScribe Confused

    Member
    3
    Apr 14, 2017
    United States
    here idk
    If you're using Citra, you might be out of luck.
    If you've got two monitors, you might be able to get away with telling Windows that one monitor is on top of the other, and have the emulator window spanning both monitors.
     
  20. Sono
    OP

    Sono The MCU Deity

    Member
    12
    Oct 16, 2015
    Hungary
    Austro-Hungarian Monarchy
    Yeah, 3DSCPlusDummy uses the same code for window positioning (hence the number box below the process textbox). If you can somehow get a bottom screen only emulator window then it work very well. As I said, I sadly didn't add any fine-tuning, so you have to somehow get the bottom screen into a separate window.
     
Loading...