Skip to content

Get camera list from camera service directly - #5669

Closed
yume-chan wants to merge 1 commit into
Genymobile:devfrom
yume-chan:feat/camera-service
Closed

yume-chan wants to merge 1 commit into
Genymobile:devfrom
yume-chan:feat/camera-service

Conversation

@yume-chan

Copy link
Copy Markdown
Contributor

This is a cleaned-up version of #4392 (comment).

I'm using similar code in my project to enumerate cameras, then use Scrcpy to mirror them, but recently 2337f52 broke this usage.

I think it should rather list and accept non-functional camera IDs, than rejecting functional ones.

This doesn't include the code to handle logical vs. physical cameras.

@rom1v rom1v left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you 👍

I just read a first pass, I will check in more details later.

It makes a difference only on some Samsung devices, is that right?

}
}
if (!isBackwardCompatible) {
continue;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should do that even with the CameraManager then (the current implementation), correct?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct. On my Xiaomi devices, there are two invalid cameras ("facing" is "external" and fails to open) that can be filtered by this capability. However, they are hidden in CameraManager.getCameraIdList. I don't know if any OS returns non-backward-compatible cameras from CameraManager


List<String> cameraIds = new ArrayList<>();
for (CameraStatus cameraStatus : cameraStatuses) {
if (cameraStatus.status != ICameraServiceListener.STATUS_NOT_PRESENT && cameraStatus.status != ICameraServiceListener.STATUS_ENUMERATING) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Contrary to CameraManager.getCameraIdList(), shouldHideCamera() is not called. Is it on purpose to show camera that are wrongly hidden?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. shouldHideCamera was added recently, so for example when a companion device app added a virtual camera, it won't be seen by normal apps, I don't know if anyone is doing that, but it should be interesting to try to include them.

@yume-chan

Copy link
Copy Markdown
Contributor Author

It makes a difference only on some Samsung devices, is that right?

It shouldn't affect Samsung devices, because getCameraCharacteristics for those hidden cameras (ID >= 90) will check Context.getOpPackageName and throw an error (#4675 (comment)), I caught the error and ignored those camera IDs

It will affect Xiaomi devices (#4392 (comment)) and LineageOS (#4392 (comment))

@rom1v

rom1v commented Dec 22, 2024 •

Copy link
Copy Markdown
Collaborator

While I was making tests for this PR with a Xiaomi Redmi Note 13, I noticed that dc2fcc4 (#5659) already fixes the problem.

On master:

[server] INFO: Device: [Xiaomi] Redmi 23124RA7EO (Android 14)
[server] INFO: List of cameras:
    --camera-id=0    (back, 4000x3000, fps=[15, 30])
    --camera-id=1    (front, 2304x1728, fps=[10, 15, 30])

On dev:

[server] INFO: List of cameras:
    --camera-id=0    (back, 4000x3000, fps=[15, 30])
    --camera-id=1    (front, 2304x1728, fps=[10, 15, 30])
    --camera-id=2    (back, 3264x2448, fps=[15, 30])
    --camera-id=3    (back, 1600x1200, fps=[15, 30])
    --camera-id=4    (back, 4000x3000, fps=[15, 30])
    --camera-id=5    (back, 4000x3000, fps=[15, 30])
    --camera-id=6    (front, 2304x1728, fps=[10, 15, 30])

Can you confirm?

@yume-chan

yume-chan commented Dec 22, 2024 •

Copy link
Copy Markdown
Contributor Author

I can confirm dev fixed my original issue on Xiaomi devices. Not sure about LineageOS.

On Xiaomi Mi 11:

> ./scrcpy -s 73294bba --list-cameras
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  73294bba                        device  M2011K2C
INFO:           (usb)  adb-bd9d00cc-irloe7._adb-tls-connect._tcp            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build\o...file pushed, 0 skipped. 100.6 MB/s (90816 bytes in 0.001s)
[server] INFO: Device: [Xiaomi] Xiaomi M2011K2C (Android 13)
[server] INFO: List of cameras:
    --camera-id=0    (back, 6016x4512, fps=[10, 12, 15, 24, 30])
    --camera-id=1    (front, 2592x1940, fps=[10, 15, 24, 30])
    --camera-id=2    (back, 4208x3120, fps=[15, 24, 30])
    --camera-id=3    (back, 2592x1944, fps=[24, 30])
    --camera-id=4    (back, 6016x4512, fps=[10, 12, 15, 24, 30])
    --camera-id=5    (back, 6016x4512, fps=[10, 12, 15, 24, 30])
    --camera-id=6    (back, 6016x4512, fps=[10, 12, 15, 24, 30])
    --camera-id=7    (front, 2592x1940, fps=[10, 15, 24, 30])
    --camera-id=8    (back, 6016x4512, fps=[10, 12, 15, 24, 30])

On Redmi K70 Pro:

> ./scrcpy --list-cameras
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  adb-bd9d00cc-irloe7._adb-tls-connect._tcp            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build\o...1 file pushed, 0 skipped. 2.0 MB/s (90816 bytes in 0.043s)
[server] INFO: Device: [Xiaomi] Redmi 23117RK66C (Android 14)
[server] WARN: Could not get available frame rates for camera 8
java.lang.NullPointerException: Attempt to get length of null array
        at com.genymobile.scrcpy.util.LogUtils.getUniqueSet(LogUtils.java:186)
        at com.genymobile.scrcpy.util.LogUtils.buildCameraListMessage(LogUtils.java:144)
        at com.genymobile.scrcpy.Server.internalMain(Server.java:239)
        at com.genymobile.scrcpy.Server.main(Server.java:201)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:368)
[server] WARN: Could not get available frame rates for camera 9
java.lang.NullPointerException: Attempt to get length of null array
        at com.genymobile.scrcpy.util.LogUtils.getUniqueSet(LogUtils.java:186)
        at com.genymobile.scrcpy.util.LogUtils.buildCameraListMessage(LogUtils.java:144)
        at com.genymobile.scrcpy.Server.internalMain(Server.java:239)
        at com.genymobile.scrcpy.Server.main(Server.java:201)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:368)
[server] INFO: List of cameras:
    --camera-id=0    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=1    (front, 2304x1728, fps=[10, 15, 24, 30])
    --camera-id=2    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=3    (back, 4000x3000, fps=[15, 24, 30])
    --camera-id=4    (back, 4096x3072, fps=[15, 24, 30])
    --camera-id=5    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=6    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=7    (front, 2304x1728, fps=[10, 15, 24, 30])
    --camera-id=8    (external, 12000x9000)
    --camera-id=9    (external, 12000x9000)

Check for isBackwardCompatible can remove camera 8 and 9 from the output.

@rom1v

rom1v commented Dec 22, 2024

Copy link
Copy Markdown
Collaborator

Thank you for your test 👍

Check for isBackwardCompatible can remove camera 8 and 9 from the output.

Maybe we can keep camera 8 and 9 listed, but without printing the exception (and also disable it for other errors):

diff --git server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java
index 088be7e7d..76bf503e1 100644
--- server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java
+++ server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java
@@ -141,11 +141,12 @@ public final class LogUtils {
                     try {
                         // Capture frame rates for low-FPS mode are the same for every resolution
                         Range<Integer>[] lowFpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
-                        SortedSet<Integer> uniqueLowFps = getUniqueSet(lowFpsRanges);
-                        builder.append(", fps=").append(uniqueLowFps);
-                    } catch (Exception e) {
+                        if (lowFpsRanges != null) {
+                            SortedSet<Integer> uniqueLowFps = getUniqueSet(lowFpsRanges);
+                            builder.append(", fps=").append(uniqueLowFps);
+                        }
+                    } catch (RuntimeException e) {
                         // Some devices may provide invalid ranges, causing an IllegalArgumentException "lower must be less than or equal to upper"
-                        Ln.w("Could not get available frame rates for camera " + id, e);
                     }
 
                     builder.append(')');

@yume-chan

Copy link
Copy Markdown
Contributor Author

I think cameras 8 and 9 don't work at all, so not worth listing

--list-camera-sizes:

> ./scrcpy -s adb-bd9d00cc-irloe7._adb-tls-connect._tcp --list-camera-sizes
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:           (usb)  73294bba                        device  M2011K2C
INFO:     -->   (usb)  adb-bd9d00cc-irloe7._adb-tls-connect._tcp            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build...le pushed, 0 skipped. 112.6 MB/s (90816 bytes in 0.001s)
[server] INFO: Device: [Xiaomi] Redmi 23117RK66C (Android 14)
[server] WARN: Could not get available frame rates for camera 8
java.lang.NullPointerException: Attempt to get length of null array
        at com.genymobile.scrcpy.util.LogUtils.getUniqueSet(LogUtils.java:186)
        at com.genymobile.scrcpy.util.LogUtils.buildCameraListMessage(LogUtils.java:144)
        at com.genymobile.scrcpy.Server.internalMain(Server.java:239)
        at com.genymobile.scrcpy.Server.main(Server.java:201)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:368)
[server] ERROR: Attempt to get length of null array
java.lang.NullPointerException: Attempt to get length of null array
        at android.hardware.camera2.impl.CameraMetadataNative.getStreamConfigurationMap(CameraMetadataNative.java:1665)
        at android.hardware.camera2.impl.CameraMetadataNative.-$$Nest$mgetStreamConfigurationMap(Unknown Source:0)
        at android.hardware.camera2.impl.CameraMetadataNative$5.getValue(CameraMetadataNative.java:701)
        at android.hardware.camera2.impl.CameraMetadataNative.get(CameraMetadataNative.java:521)
        at android.hardware.camera2.impl.CameraMetadataNative.get(CameraMetadataNative.java:492)
        at android.hardware.camera2.CameraCharacteristics.get(CameraCharacteristics.java:312)
        at com.genymobile.scrcpy.util.LogUtils.buildCameraListMessage(LogUtils.java:154)
        at com.genymobile.scrcpy.Server.internalMain(Server.java:239)
        at com.genymobile.scrcpy.Server.main(Server.java:201)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:368)

--video-source=camera --camera-id=8:

> ./scrcpy -s adb-bd9d00cc-irloe7._adb-tls-connect._tcp --video-source=camera --camera-id=8
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: Camera video source: control disabled
INFO: Camera video source: microphone audio source selected
INFO: ADB device found:
INFO:           (usb)  73294bba                        device  M2011K2C
INFO:     -->   (usb)  adb-bd9d00cc-irloe7._adb-tls-connect._tcp            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build...ile pushed, 0 skipped. 90.6 MB/s (90816 bytes in 0.001s)
[server] INFO: Device: [Xiaomi] Redmi 23117RK66C (Android 14)
[server] INFO: Using camera '8'
INFO: Renderer: direct3[server] ERROR: Exception on thread Thread[video,5,main]
java.lang.NullPointerException: Attempt to get length of null array
        at android.hardware.camera2.impl.CameraMetadataNative.getStreamConfigurationMap(CameraMetadataNative.java:1665)
        at android.hardware.camera2.impl.CameraMetadataNative.-$$Nest$mgetStreamConfigurationMap(Unknown Source:0)
        at android.hardware.camera2.impl.CameraMetadataNative$5.getValue(CameraMetadataNative.java:701)
        at android.hardware.camera2.impl.CameraMetadataNative.get(CameraMetadataNative.java:521)
        at android.hardware.camera2.impl.CameraMetadataNative.get(CameraMetadataNative.java:492)
        at android.hardware.camera2.CameraCharacteristics.get(CameraCharacteristics.java:312)
        at com.genymobile.scrcpy.video.CameraCapture.selectSize(CameraCapture.java:182)
        at com.genymobile.scrcpy.video.CameraCapture.prepare(CameraCapture.java:118)
        at com.genymobile.scrcpy.video.SurfaceEncoder.streamCapture(SurfaceEncoder.java:78)
        at com.genymobile.scrcpy.video.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-video-SurfaceEncoder(SurfaceEncoder.java:296)
        at com.genymobile.scrcpy.video.SurfaceEncoder$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
        at java.lang.Thread.run(Thread.java:1012)
d
ERROR: Demuxer 'video': stream disabled due to connection error
ERROR: Demuxer 'audio': stream disabled due to connection error
ERROR: Demuxer error

--video-source=camera --camera-id=8 --camera-size=320x240:

> ./scrcpy -s adb-bd9d00cc-irloe7._adb-tls-connect._tcp --video-source=camera --camera-id=8 --camera-size=320x240
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: Camera video source: control disabled
INFO: Camera video source: microphone audio source selected
INFO: ADB device found:
INFO:           (usb)  73294bba                        device  M2011K2C
INFO:     -->   (usb)  adb-bd9d00cc-irloe7._adb-tls-connect._tcp            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build...le pushed, 0 skipped. 109.9 MB/s (90816 bytes in 0.001s)
[server] INFO: Device: [Xiaomi] Redmi 23117RK66C (Android 14)
[server] INFO: Using camera '8'
INFO: Renderer: direct3d
INFO: Texture: 320x240
[server] WARN: Camera disconnected
WARN: Device disconnected

--video-source=camera --camera-id=8 --camera-size=12000x9000 --crop=1920:1080:0:0 (12000x9000 is the listed SENSOR_INFO_ACTIVE_ARRAY_SIZE):

> ./scrcpy -s adb-bd9d00cc-irloe7._adb-tls-connect._tcp --video-source=camera --camera-id=8 --camera-size=12000x9000 --crop=1920:1080:0:0
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: Camera video source: control disabled
INFO: Camera video source: microphone audio source selected
INFO: ADB device found:
INFO:           (usb)  73294bba                        device  M2011K2C
INFO:     -->   (usb)  adb-bd9d00cc-irloe7._adb-tls-connect._tcp            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build...le pushed, 0 skipped. 110.3 MB/s (90816 bytes in 0.001s)
[server] INFO: Device: [Xiaomi] Redmi 23117RK66C (Android 14)
[server] INFO: Using camera '8'
INFO: Renderer: direct3d
INFO: Texture: 1920x1080
[server] ERROR: Capture/encoding error: java.io.IOException: android.hardware.camera2.CameraAccessException: The camera device is currently in the error state; no further calls to it will succeed.
[server] ERROR: Video encoding error
java.io.IOException: android.hardware.camera2.CameraAccessException: The camera device is currently in the error state; no further calls to it will succeed.
        at com.genymobile.scrcpy.video.CameraCapture.start(CameraCapture.java:270)
        at com.genymobile.scrcpy.video.SurfaceEncoder.streamCapture(SurfaceEncoder.java:95)
        at com.genymobile.scrcpy.video.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-video-SurfaceEncoder(SurfaceEncoder.java:296)
        at com.genymobile.scrcpy.video.SurfaceEncoder$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
        at java.lang.Thread.run(Thread.java:1012)
Caused by: android.hardware.camera2.CameraAccessException: The camera device is currently in the error state; no further calls to it will succeed.
        at com.genymobile.scrcpy.video.CameraCapture$2.onConfigureFailed(CameraCapture.java:370)
        at android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.lambda$onConfigureFailed$1(CallbackProxies.java:64)
        at android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.$r8$lambda$4x6kfFGELk6RYRHf2tdedVsg2ag(Unknown Source:0)
        at android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy$$ExternalSyntheticLambda4.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:958)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:224)
        at android.os.Looper.loop(Looper.java:318)
        at android.os.HandlerThread.run(HandlerThread.java:67)
WARN: Device disconnected

@rom1v

rom1v commented Dec 22, 2024

Copy link
Copy Markdown
Collaborator

OK, is it sufficient:

diff --git server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java
index 088be7e7d..81d499209 100644
--- server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java
+++ server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java
@@ -120,6 +120,23 @@ public final class LogUtils {
         }
     }
 
+    private static boolean isCameraBackwardCompatible(CameraCharacteristics characteristics) {
+        int[] capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
+        if (capabilities == null) {
+            return false;
+        }
+
+        // Ignore depth cameras as suggested by official documentation
+        // <https://developer.android.com/media/camera/camera2/camera-enumeration>
+        for (int capability : capabilities) {
+            if (capability == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     public static String buildCameraListMessage(boolean includeSizes) {
         StringBuilder builder = new StringBuilder("List of cameras:");
         CameraManager cameraManager = ServiceManager.getCameraManager();
@@ -132,6 +149,10 @@ public final class LogUtils {
                     builder.append("\n    --camera-id=").append(id);
                     CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(id);
 
+                    if (!isCameraBackwardCompatible(characteristics)) {
+                        continue;
+                    }
+
                     int facing = characteristics.get(CameraCharacteristics.LENS_FACING);
                     builder.append("    (").append(getCameraFacingName(facing)).append(", ");
 

In other words, is it still necessary on dev:

try {
    …
} catch (IllegalArgumentException ignore) {
    // Samsung devices might throw an IllegalArgumentException
    // when getting camera characteristics for hidden cameras
}

?

@yume-chan

Copy link
Copy Markdown
Contributor Author

That diff still prints the IDs

> ./scrcpy -s adb-bd9d00cc-irloe7._adb-tls-connect._tcp --list-cameras
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:           (usb)  73294bba                        device  M2011K2C
INFO:     -->   (usb)  adb-bd9d00cc-irloe7._adb-tls-connect._tcp            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build...le pushed, 0 skipped. 111.1 MB/s (91008 bytes in 0.001s)
[server] INFO: Device: [Xiaomi] Redmi 23117RK66C (Android 14)
[server] INFO: List of cameras:
    --camera-id=0    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=1    (front, 2304x1728, fps=[10, 15, 24, 30])
    --camera-id=2    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=3    (back, 4000x3000, fps=[15, 24, 30])
    --camera-id=4    (back, 4096x3072, fps=[15, 24, 30])
    --camera-id=5    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=6    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=7    (front, 2304x1728, fps=[10, 15, 24, 30])
    --camera-id=8
    --camera-id=9

(--list-camera-sizes now works)

I think using a try-catch (with RuntimeException) can work, but might suppress other unknown errors.

rom1v pushed a commit that referenced this pull request Dec 22, 2024
PR #5669 <#5669>

Signed-off-by: Romain Vimont <rom@rom1v.com>
rom1v added a commit that referenced this pull request Dec 22, 2024
Do not report an error if the returned FPS ranges array is null.

Refs #5669 <#5669>
@rom1v

rom1v commented Dec 22, 2024 •

Copy link
Copy Markdown
Collaborator

@yume-chan

Copy link
Copy Markdown
Contributor Author

list_cameras_fix branch works perfectly:

> ./scrcpy -s 192.168.50.101:34387 --list-cameras
scrcpy 3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:           (usb)  73294bba                        device  M2011K2C
INFO:     --> (tcpip)  192.168.50.101:34387            device  23117RK66C
D:\dev\yume-chan\scrcpy-devcontainer\scrcpy\server\build\o...file pushed, 0 skipped. 114.2 MB/s (91000 bytes in 0.001s)
[server] INFO: Device: [Xiaomi] Redmi 23117RK66C (Android 14)
[server] INFO: List of cameras:
    --camera-id=0    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=1    (front, 2304x1728, fps=[10, 15, 24, 30])
    --camera-id=2    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=3    (back, 4000x3000, fps=[15, 24, 30])
    --camera-id=4    (back, 4096x3072, fps=[15, 24, 30])
    --camera-id=5    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=6    (back, 4096x3072, fps=[15, 19, 24, 25, 26, 30])
    --camera-id=7    (front, 2304x1728, fps=[10, 15, 24, 30])

--list-camera-sizes also works

@rom1v

rom1v commented Dec 23, 2024

Copy link
Copy Markdown
Collaborator

Thank you, list_cameras_fix branch merged into dev.

I close this PR since CameraService is not necessary (at least for now).

@rom1v rom1v closed this Dec 23, 2024
@rom1v rom1v mentioned this pull request Dec 23, 2024
2 tasks done
bartsaintgermain pushed a commit to bartsaintgermain/scrcpy that referenced this pull request Apr 11, 2025
PR Genymobile#5669 <Genymobile#5669>

Signed-off-by: Romain Vimont <rom@rom1v.com>
bartsaintgermain pushed a commit to bartsaintgermain/scrcpy that referenced this pull request Apr 11, 2025
Do not report an error if the returned FPS ranges array is null.

Refs Genymobile#5669 <Genymobile#5669>
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

Successfully merging this pull request may close these issues.

2 participants