FlashCap icon indicating copy to clipboard operation
FlashCap copied to clipboard

Added support for Apple devices

Open YohDeadfall opened this issue 1 year ago • 13 comments

Here's my take on supporting Apple devices including desktop and mobile. It's not completed yet, but should be close to that point.

Some dependencies I changed to make it easier for me to develop, so they can be reverted afterwards when finishing the feature.

Fixes #45.

Testing

To test changes FlashCap.Avalonia in samples can be used. That application has just two combo boxes to select a web cam and then characteristics.

dotnet run -f net6.0 --project ./samples/FlashCap.Avalonia/FlashCap.Avalonia

YohDeadfall avatar Jun 21 '23 11:06 YohDeadfall

So, the current pull request lacks of one important thing for OSX - change of OnEnumerateDescriptors' signature since on Apple devices access must be requested first, that's an asynchronous operation.

YohDeadfall avatar Jun 23 '23 18:06 YohDeadfall

MEMO: If sync-over-async is not going to be a fatal problem, we could add Obsolete and move to a new asynchronous method like Task<CaptureDeviceDescriptor[]> OnEnumerateDescriptorsAsync(). I think it might be a good idea to encourage this.

kekyo avatar Jun 24 '23 03:06 kekyo

@YohDeadfall Perhaps a brief description of how to test it on a Mac would be better for people to feel free to try it 😄

kekyo avatar Sep 05 '23 04:09 kekyo

Added it, but @kiminuo can provide a little bit more on it since he helped me originally.

YohDeadfall avatar Sep 05 '23 06:09 YohDeadfall

I simply ran

dotnet run -f net6.0 --project ./samples/FlashCap.Avalonia/FlashCap.Avalonia

then an Avalonia application is supposed to appear. One selects a camera and that's basically it.

If you have multiple .NET versions on your machine, it's good to add global.json:

{
  "sdk": {
    "version": "6.0.100",
    "allowPrerelease": false,
    "rollForward": "latestFeature"
  }
}

but I'm not sure what .NET versions should be supported so it's just a general remark.

kiminuo avatar Sep 05 '23 07:09 kiminuo

I wasn't even sure if the Avalonia version would actually work on the Mac, so thanks for the help!

kekyo avatar Sep 05 '23 07:09 kekyo

It works perfectly on all platforms and even might work on Tizen. At least there's an issue on it and some work is being done.

YohDeadfall avatar Sep 05 '23 07:09 YohDeadfall

@YohDeadfall Not much of a response, is it running with no problems at all? :) If there is a problem, I'm thinking I could release it, but what do you suggest? There is a possibility that if it is not released, people may not actually try to use it.

kekyo avatar Sep 19 '23 07:09 kekyo

The problem here is that it crashes trying to process a frame. @kiminuo did testing, but you know, when development happens by one developer and testing by another it takes too much time and energy.

There's a Xamarin project for barcode scanning I can use to make a debug version with a single hard coded characteristic and the most simple image format. Then if it runs without any issue, we can publish it and bring features later when there's some interest.

Is it okay?

YohDeadfall avatar Sep 19 '23 07:09 YohDeadfall

Oh... I would have been able to debug it myself if I could get a Mac...

kekyo avatar Sep 20 '23 03:09 kekyo

@YohDeadfall Hi, I am now trying to extend the transcode type for this issue.

Specifically, a modification that would change the transcodeIfYUV argument in the code from a boolean type to an enumerated type. So, no technical changes, but widespread changes in the FlashCap project.

So, after much thought, I'd still like to accept this PR once and for all before this changing, what do you think?

I'm also wondering if it would be better to put a notation in the documentation that says "This is experimental and behavior verification and modifications are welcome" so that people who want to implement captures can see it and try it out.

kekyo avatar Nov 05 '23 04:11 kekyo

@YohDeadfall Hi, I am now trying to extend the transcode type for this issue.

Specifically, a modification that would change the transcodeIfYUV argument in the code from a boolean type to an enumerated type. So, no technical changes, but widespread changes in the FlashCap project.

So, after much thought, I'd still like to accept this PR once and for all before this changing, what do you think?

I'm also wondering if it would be better to put a notation in the documentation that says "This is experimental and behavior verification and modifications are welcome" so that people who want to implement captures can see it and try it out.

Here's a start you might want to consider https://github.com/kekyo/FlashCap/commit/be698dfb9db94cb6b1e5bfb47e6940ce0852fe19

flat-eric147 avatar Nov 08 '23 22:11 flat-eric147

The current problem is that when this pull request is tested it causes a crash due to finalization of an AVCaptureDeviceDiscoverySession, but it is created in only the one place and with an using block controlling its lifetime.

If someone is able to continue on that, I would be happy to provide any other information and help in dealing with it. But for now I have no Mac device and cannot test it myself.

YohDeadfall avatar May 23 '24 12:05 YohDeadfall