|
1 | 1 | /* |
2 | | - * Copyright 2023-2024 LiveKit, Inc. |
| 2 | + * Copyright 2023-2025 LiveKit, Inc. |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
|
17 | 17 | package io.livekit.android.room.track.video |
18 | 18 |
|
19 | 19 | import livekit.org.webrtc.CameraVideoCapturer.CameraEventsHandler |
| 20 | +import java.util.concurrent.CopyOnWriteArraySet |
20 | 21 |
|
21 | 22 | /** |
22 | 23 | * Dispatches CameraEventsHandler callbacks to registered handlers. |
23 | 24 | */ |
24 | 25 | class CameraEventsDispatchHandler : CameraEventsHandler { |
25 | | - private val handlers = mutableSetOf<CameraEventsHandler>() |
| 26 | + private val handlers = CopyOnWriteArraySet<CameraEventsHandler>() |
26 | 27 |
|
27 | | - @Synchronized |
28 | 28 | fun registerHandler(handler: CameraEventsHandler) { |
29 | 29 | handlers.add(handler) |
30 | 30 | } |
31 | 31 |
|
32 | | - @Synchronized |
33 | 32 | fun unregisterHandler(handler: CameraEventsHandler) { |
34 | 33 | handlers.remove(handler) |
35 | 34 | } |
36 | 35 |
|
37 | 36 | override fun onCameraError(errorDescription: String) { |
38 | | - val handlersCopy = handlers.toMutableSet() |
39 | | - for (handler in handlersCopy) { |
| 37 | + for (handler in handlers) { |
40 | 38 | handler.onCameraError(errorDescription) |
41 | 39 | } |
42 | 40 | } |
43 | 41 |
|
44 | 42 | override fun onCameraDisconnected() { |
45 | | - val handlersCopy = handlers.toMutableSet() |
46 | | - for (handler in handlersCopy) { |
| 43 | + for (handler in handlers) { |
47 | 44 | handler.onCameraDisconnected() |
48 | 45 | } |
49 | 46 | } |
50 | 47 |
|
51 | 48 | override fun onCameraFreezed(errorDescription: String) { |
52 | | - val handlersCopy = handlers.toMutableSet() |
53 | | - for (handler in handlersCopy) { |
| 49 | + for (handler in handlers) { |
54 | 50 | handler.onCameraFreezed(errorDescription) |
55 | 51 | } |
56 | 52 | } |
57 | 53 |
|
58 | 54 | override fun onCameraOpening(cameraName: String) { |
59 | | - val handlersCopy = handlers.toMutableSet() |
60 | | - for (handler in handlersCopy) { |
| 55 | + for (handler in handlers) { |
61 | 56 | handler.onCameraOpening(cameraName) |
62 | 57 | } |
63 | 58 | } |
64 | 59 |
|
65 | 60 | override fun onFirstFrameAvailable() { |
66 | | - val handlersCopy = handlers.toMutableSet() |
67 | | - for (handler in handlersCopy) { |
| 61 | + for (handler in handlers) { |
68 | 62 | handler.onFirstFrameAvailable() |
69 | 63 | } |
70 | 64 | } |
71 | 65 |
|
72 | 66 | override fun onCameraClosed() { |
73 | | - val handlersCopy = handlers.toMutableSet() |
74 | | - for (handler in handlersCopy) { |
| 67 | + for (handler in handlers) { |
75 | 68 | handler.onCameraClosed() |
76 | 69 | } |
77 | 70 | } |
|
0 commit comments