From 123b74cd14594ac59baa03e0e1526c01a194119d Mon Sep 17 00:00:00 2001 From: Vinny DaSilva Date: Thu, 8 May 2025 14:09:50 -0400 Subject: [PATCH 1/4] Adding snippet for MV-HEVC video playback --- .../com/example/xr/scenecore/SpatialVideo.kt | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/SpatialVideo.kt b/xr/src/main/java/com/example/xr/scenecore/SpatialVideo.kt index 272c21a8a..f60d9ecfe 100644 --- a/xr/src/main/java/com/example/xr/scenecore/SpatialVideo.kt +++ b/xr/src/main/java/com/example/xr/scenecore/SpatialVideo.kt @@ -32,7 +32,6 @@ private fun ComponentActivity.surfaceEntityCreate(xrSession: Session) { val stereoSurfaceEntity = SurfaceEntity.create( xrSession, SurfaceEntity.StereoMode.SIDE_BY_SIDE, - // Position 1.5 meters in front of user Pose(Vector3(0.0f, 0.0f, -1.5f)), SurfaceEntity.CanvasShape.Quad(1.0f, 1.0f) ) @@ -83,3 +82,26 @@ private fun ComponentActivity.surfaceEntityCreateTb(xrSession: Session) { // ... and use the surface for playing the media. // [END androidxr_scenecore_surfaceEntityCreateTb] } + +private fun ComponentActivity.surfaceEntityCreateMVHEVC(xrSession: Session) { + // [START androidxr_scenecore_surfaceEntityCreateMVHEVC] + // Create the SurfaceEntity with the StereoMode corresponding to the MV-HEVC content + val stereoSurfaceEntity = SurfaceEntity.create( + xrSession, + SurfaceEntity.StereoMode.MULTIVIEW_LEFT_PRIMARY, + Pose(Vector3(0.0f, 0.0f, -1.5f)), + SurfaceEntity.CanvasShape.Quad(1.0f, 1.0f) + ) + val videoUri = Uri.Builder() + .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) + .path("mvhevc_video.mp4") + .build() + val mediaItem = MediaItem.fromUri(videoUri) + + val exoPlayer = ExoPlayer.Builder(this).build() + exoPlayer.setVideoSurface(stereoSurfaceEntity.getSurface()) + exoPlayer.setMediaItem(mediaItem) + exoPlayer.prepare() + exoPlayer.play() + // [END androidxr_scenecore_surfaceEntityCreateMVHEVC] +} \ No newline at end of file From 443dddc5c14d6e7b73dbaa30f3c21974525721d7 Mon Sep 17 00:00:00 2001 From: Vinny DaSilva Date: Mon, 12 May 2025 16:12:34 -0400 Subject: [PATCH 2/4] updating the resizable snippet to include ResizeListener --- .../java/com/example/xr/scenecore/Entities.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/xr/src/main/java/com/example/xr/scenecore/Entities.kt b/xr/src/main/java/com/example/xr/scenecore/Entities.kt index 7c8046664..eac09a070 100644 --- a/xr/src/main/java/com/example/xr/scenecore/Entities.kt +++ b/xr/src/main/java/com/example/xr/scenecore/Entities.kt @@ -78,6 +78,21 @@ private fun resizableComponentExample(session: Session, entity: Entity) { val resizableComponent = ResizableComponent.create(session) resizableComponent.minimumSize = Dimensions(177f, 100f, 1f) resizableComponent.fixedAspectRatio = 16f / 9f // Specify a 16:9 aspect ratio + + resizableComponent.addResizeListener( + context.mainExecutor, + object : ResizeListener { + override fun onResizeEnd(entity: Entity, finalSize: Dimensions){ + + //update the size in the component + resizableComponent.size = finalSize + + //update the Entity to reflect the new size + (entity as SurfaceEntity).canvasShape = CanvasShape.Quad(finalSize.width,finalSize.height) + } + }, + ) + entity.addComponent(resizableComponent) // [END androidxr_scenecore_resizableComponentExample] } From 10bb978ae21fe3ff80f61fce15dd405d0a702ef7 Mon Sep 17 00:00:00 2001 From: Vinny DaSilva Date: Tue, 13 May 2025 15:15:29 -0400 Subject: [PATCH 3/4] fixing imports --- xr/src/main/java/com/example/xr/scenecore/Entities.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/Entities.kt b/xr/src/main/java/com/example/xr/scenecore/Entities.kt index eac09a070..0c962b00c 100644 --- a/xr/src/main/java/com/example/xr/scenecore/Entities.kt +++ b/xr/src/main/java/com/example/xr/scenecore/Entities.kt @@ -29,6 +29,9 @@ import androidx.xr.scenecore.MovableComponent import androidx.xr.scenecore.PlaneSemantic import androidx.xr.scenecore.PlaneType import androidx.xr.scenecore.ResizableComponent +import androidx.xr.scenecore.ResizeListener +import androidx.xr.scenecore.SurfaceEntity +import java.util.concurrent.Executor import java.util.concurrent.Executors private fun setPoseExample(entity: Entity) { @@ -73,14 +76,14 @@ private fun moveableComponentExample(session: Session, entity: Entity) { // [END androidxr_scenecore_moveableComponentExample] } -private fun resizableComponentExample(session: Session, entity: Entity) { +private fun resizableComponentExample(session: Session, entity: Entity, executor: Executor) { // [START androidxr_scenecore_resizableComponentExample] val resizableComponent = ResizableComponent.create(session) resizableComponent.minimumSize = Dimensions(177f, 100f, 1f) resizableComponent.fixedAspectRatio = 16f / 9f // Specify a 16:9 aspect ratio resizableComponent.addResizeListener( - context.mainExecutor, + executor, object : ResizeListener { override fun onResizeEnd(entity: Entity, finalSize: Dimensions){ @@ -88,7 +91,7 @@ private fun resizableComponentExample(session: Session, entity: Entity) { resizableComponent.size = finalSize //update the Entity to reflect the new size - (entity as SurfaceEntity).canvasShape = CanvasShape.Quad(finalSize.width,finalSize.height) + (entity as SurfaceEntity).canvasShape = SurfaceEntity.CanvasShape.Quad(finalSize.width,finalSize.height) } }, ) From c46624c7edc4044b487fcfc45d03c12ef8b59c8e Mon Sep 17 00:00:00 2001 From: Vinny DaSilva Date: Fri, 16 May 2025 12:31:45 -0400 Subject: [PATCH 4/4] Committing spotless changes --- xr/src/main/java/com/example/xr/scenecore/Entities.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/Entities.kt b/xr/src/main/java/com/example/xr/scenecore/Entities.kt index 0c962b00c..d4c723604 100644 --- a/xr/src/main/java/com/example/xr/scenecore/Entities.kt +++ b/xr/src/main/java/com/example/xr/scenecore/Entities.kt @@ -85,13 +85,13 @@ private fun resizableComponentExample(session: Session, entity: Entity, executor resizableComponent.addResizeListener( executor, object : ResizeListener { - override fun onResizeEnd(entity: Entity, finalSize: Dimensions){ + override fun onResizeEnd(entity: Entity, finalSize: Dimensions) { - //update the size in the component + // update the size in the component resizableComponent.size = finalSize - //update the Entity to reflect the new size - (entity as SurfaceEntity).canvasShape = SurfaceEntity.CanvasShape.Quad(finalSize.width,finalSize.height) + // update the Entity to reflect the new size + (entity as SurfaceEntity).canvasShape = SurfaceEntity.CanvasShape.Quad(finalSize.width, finalSize.height) } }, )