AdvancedSharpAdbClient icon indicating copy to clipboard operation
AdvancedSharpAdbClient copied to clipboard

Can Screen Capture be improved?

Open vuduong1124 opened this issue 2 years ago • 6 comments

Describe your feature request

Is it possible to capture screen devices faster?Feature title

static async void Main(string[] args)
{
    ...
    System.Drawing.Image img = client.GetFrameBufferAsync(device, CancellationToken.None).GetAwaiter().GetResult();
    ...
}

Specifically, it currently takes 180 ~ 200ms for 1 screen capture

How important is this to you?

Nice-to-have

Describe the solution you'd like

No response

Describe alternatives you've considered

No response

Additional context

No response

vuduong1124 avatar Aug 30 '22 09:08 vuduong1124

hi @vuduong1124 Can you share block code to convert FrameBuffer to image It seems this tutorial is not correct System.Drawing.Image img = client.GetFrameBufferAsync(device, CancellationToken.None).GetAwaiter().GetResult();

phuongbk90 avatar May 31 '23 10:05 phuongbk90

It seems this tutorial is not correct

(Well, I just tried this library out, I have been using python and an adb library for python before but wanted to give this library a shot).

About the tutorial not being correct, I assume you're reffering to the examples and that you get an error that FrameBuffer can't be made into an Image? There's an explicit conversion implemented (there seems to be other conversions too , depending on need, not only Image).

You can do either of this to get around this problem and make the compiler happy:

Image image = (Image) client.GetFrameBufferAsync(device, CancellationToken.None).GetAwaiter().GetResult();

or

Image image = client.GetFrameBufferAsync(device, CancellationToken.None).GetAwaiter().GetResult().ToImage();

This will, in theory, make it work - I assume this is the intended way to do it.

However, I get an exception when I execute the above code, trying to grab a screenshot (from a device with verified working ADB connection). The Framebuffer gets disposed at some point and the library throws exception about. I haven't tested much so I might as well mention it.

I can see in the source code of the library where it does this but I haven't tried to understand why this happen. Also noted that there's no unit test implemented for GetFrameBufferAsync so maybe the error is actually a bug not being detected. But honestly, I don't know. (Actually, this is why I ended up here, to see if anyone else have mentioned this exception or if created an issue ticket for it.)

jensbrak avatar Jun 16 '23 10:06 jensbrak

https://github.com/yungd1plomat/AdvancedSharpAdbClient/commit/fa1087f24492fda333bc5561fbadfe0550570efb

wherewhere avatar Jun 17 '23 10:06 wherewhere

fa1087f

Nice one! Started diggin into the workings and realized there were plenty of stuff probably missing. Interesting to see what it actually was. Great work!

jensbrak avatar Jun 18 '23 20:06 jensbrak

fa1087f

It is good, Do you have plan to include this commit in release version.

phuongbk90 avatar Jul 10 '23 08:07 phuongbk90

https://github.com/yungd1plomat/AdvancedSharpAdbClient/releases/tag/v2.5.7

wherewhere avatar Jul 10 '23 14:07 wherewhere