2 Commits

Author SHA1 Message Date
c6bd3e3ee4 use object fill 2026-01-21 11:35:19 -08:00
2d953c4c46 fix null-safety-checks and f bounded polymorphism 2025-11-26 13:17:41 -07:00
4 changed files with 20 additions and 8 deletions

View File

@@ -24,7 +24,7 @@ class SideLoadedTextTrackList {
} }
val sideLoadedTextTrackList = SideLoadedTextTrackList() val sideLoadedTextTrackList = SideLoadedTextTrackList()
for (i in 0 until src.size()) { for (i in 0 until src.size()) {
val textTrack: ReadableMap = src.getMap(i) val textTrack: ReadableMap = src.getMap(i) ?: continue
sideLoadedTextTrackList.tracks.add(SideLoadedTextTrack.parse(textTrack)) sideLoadedTextTrackList.tracks.add(SideLoadedTextTrack.parse(textTrack))
} }
return sideLoadedTextTrackList return sideLoadedTextTrackList

View File

@@ -228,7 +228,7 @@ class Source {
if (propSrcHeadersArray != null) { if (propSrcHeadersArray != null) {
if (propSrcHeadersArray.size() > 0) { if (propSrcHeadersArray.size() > 0) {
for (i in 0 until propSrcHeadersArray.size()) { for (i in 0 until propSrcHeadersArray.size()) {
val current = propSrcHeadersArray.getMap(i) val current = propSrcHeadersArray.getMap(i) ?: continue
val key = if (current.hasKey("key")) current.getString("key") else null val key = if (current.hasKey("key")) current.getString("key") else null
val value = if (current.hasKey("value")) current.getString("value") else null val value = if (current.hasKey("value")) current.getString("value") else null
if (key != null && value != null) { if (key != null && value != null) {

View File

@@ -288,12 +288,22 @@ class VideoEventEmitter {
} }
} }
private class VideoEvent(
surfaceId: Int,
viewId: Int,
private val name: String,
private val data: WritableMap?
) : Event<VideoEvent>(surfaceId, viewId) {
override fun getEventName() = name
override fun getEventData() = data
}
private class EventBuilder(private val surfaceId: Int, private val viewId: Int, private val dispatcher: EventDispatcher) { private class EventBuilder(private val surfaceId: Int, private val viewId: Int, private val dispatcher: EventDispatcher) {
fun dispatch(event: EventTypes, paramsSetter: (WritableMap.() -> Unit)? = null) = fun dispatch(event: EventTypes, paramsSetter: (WritableMap.() -> Unit)? = null) {
dispatcher.dispatchEvent(object : Event<Event<*>>(surfaceId, viewId) { val eventName = "top${event.eventName.removePrefix("on")}"
override fun getEventName() = "top${event.eventName.removePrefix("on")}" val eventData = Arguments.createMap().apply(paramsSetter ?: {})
override fun getEventData() = Arguments.createMap().apply(paramsSetter ?: {}) dispatcher.dispatchEvent(VideoEvent(surfaceId, viewId, eventName, eventData))
}) }
} }
private fun audioTracksToArray(audioTracks: java.util.ArrayList<Track>?): WritableArray = private fun audioTracksToArray(audioTracks: java.util.ArrayList<Track>?): WritableArray =

View File

@@ -515,7 +515,9 @@ const Video = forwardRef<VideoRef, ReactVideoProps>(
const videoStyle = { const videoStyle = {
position: 'absolute', position: 'absolute',
inset: 0, inset: 0,
objectFit: 'contain', // Use 'fill' instead of 'contain' to force video to match container dimensions.
// This works around browsers miscalculating intrinsic dimensions from rotation matrices.
objectFit: 'fill',
width: '100%', width: '100%',
height: '100%', height: '100%',
} satisfies React.CSSProperties; } satisfies React.CSSProperties;