use of androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata in project ExoPlayer by google.
the class MotionPhotoDescriptionTest method getMotionPhotoMetadata_withPrimaryAndMultipleSecondaryMediaItems_returnsSecondMediaItemAsVideo.
@Test
public void getMotionPhotoMetadata_withPrimaryAndMultipleSecondaryMediaItems_returnsSecondMediaItemAsVideo() {
MotionPhotoDescription motionPhotoDescription = new MotionPhotoDescription(TEST_PRESENTATION_TIMESTAMP_US, ImmutableList.of(new MotionPhotoDescription.ContainerItem(MimeTypes.IMAGE_JPEG, "Primary", /* length= */
0, TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES), new MotionPhotoDescription.ContainerItem(MimeTypes.VIDEO_MP4, "MotionPhoto", TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES, /* padding= */
0), new MotionPhotoDescription.ContainerItem(MimeTypes.VIDEO_MP4, "MotionPhoto", TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES, /* padding= */
0)));
@Nullable MotionPhotoMetadata metadata = motionPhotoDescription.getMotionPhotoMetadata(TEST_MOTION_PHOTO_LENGTH_BYTES);
assertThat(metadata.photoStartPosition).isEqualTo(0);
assertThat(metadata.photoSize).isEqualTo(TEST_MOTION_PHOTO_LENGTH_BYTES - TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES * 2 - TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES);
assertThat(metadata.photoPresentationTimestampUs).isEqualTo(TEST_PRESENTATION_TIMESTAMP_US);
assertThat(metadata.videoStartPosition).isEqualTo(TEST_MOTION_PHOTO_LENGTH_BYTES - TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES * 2);
assertThat(metadata.videoSize).isEqualTo(TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES);
}
use of androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata in project ExoPlayer by google.
the class MotionPhotoDescriptionTest method getMotionPhotoMetadata_withPrimaryAndSecondaryMediaItems.
@Test
public void getMotionPhotoMetadata_withPrimaryAndSecondaryMediaItems() {
MotionPhotoDescription motionPhotoDescription = new MotionPhotoDescription(TEST_PRESENTATION_TIMESTAMP_US, ImmutableList.of(new MotionPhotoDescription.ContainerItem(MimeTypes.IMAGE_JPEG, "Primary", /* length= */
0, TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES), new MotionPhotoDescription.ContainerItem(MimeTypes.VIDEO_MP4, "MotionPhoto", TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES, /* padding= */
0)));
@Nullable MotionPhotoMetadata metadata = motionPhotoDescription.getMotionPhotoMetadata(TEST_MOTION_PHOTO_LENGTH_BYTES);
assertThat(metadata.photoStartPosition).isEqualTo(0);
assertThat(metadata.photoSize).isEqualTo(TEST_MOTION_PHOTO_LENGTH_BYTES - TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES - TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES);
assertThat(metadata.photoPresentationTimestampUs).isEqualTo(TEST_PRESENTATION_TIMESTAMP_US);
assertThat(metadata.videoStartPosition).isEqualTo(TEST_MOTION_PHOTO_LENGTH_BYTES - TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES);
assertThat(metadata.videoSize).isEqualTo(TEST_MOTION_PHOTO_VIDEO_LENGTH_BYTES);
}
use of androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata in project ExoPlayer by google.
the class MotionPhotoDescriptionTest method getMotionPhotoMetadata_withOnlyPrimaryItem_returnsNull.
@Test
public void getMotionPhotoMetadata_withOnlyPrimaryItem_returnsNull() {
MotionPhotoDescription motionPhotoDescription = new MotionPhotoDescription(TEST_PRESENTATION_TIMESTAMP_US, ImmutableList.of(new MotionPhotoDescription.ContainerItem(MimeTypes.VIDEO_MP4, "Primary", /* length= */
0, TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES)));
@Nullable MotionPhotoMetadata metadata = motionPhotoDescription.getMotionPhotoMetadata(TEST_MOTION_PHOTO_LENGTH_BYTES);
assertThat(metadata).isNull();
}
use of androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata in project ExoPlayer by google.
the class MotionPhotoDescriptionTest method getMotionPhotoMetadata_withPrimaryAndSecondaryItemSharingData_returnsPrimaryItemAsPhotoAndVideo.
@Test
public void getMotionPhotoMetadata_withPrimaryAndSecondaryItemSharingData_returnsPrimaryItemAsPhotoAndVideo() {
// Theoretical example of an HEIF file that has both an image and a video represented in the
// same file, which looks like an MP4.
MotionPhotoDescription motionPhotoDescription = new MotionPhotoDescription(TEST_PRESENTATION_TIMESTAMP_US, ImmutableList.of(new MotionPhotoDescription.ContainerItem(MimeTypes.VIDEO_MP4, "Primary", /* length= */
0, TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES), new MotionPhotoDescription.ContainerItem(MimeTypes.VIDEO_MP4, "MotionPhoto", /* length= */
0, /* padding= */
0)));
@Nullable MotionPhotoMetadata metadata = motionPhotoDescription.getMotionPhotoMetadata(TEST_MOTION_PHOTO_LENGTH_BYTES);
assertThat(metadata.photoStartPosition).isEqualTo(0);
assertThat(metadata.photoSize).isEqualTo(TEST_MOTION_PHOTO_LENGTH_BYTES - TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES);
assertThat(metadata.photoPresentationTimestampUs).isEqualTo(TEST_PRESENTATION_TIMESTAMP_US);
assertThat(metadata.videoStartPosition).isEqualTo(0);
assertThat(metadata.videoSize).isEqualTo(TEST_MOTION_PHOTO_LENGTH_BYTES - TEST_MOTION_PHOTO_PHOTO_PADDING_BYTES);
}
use of androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata in project ExoPlayer by google.
the class MetadataRetrieverTest method retrieveMetadata_heicMotionPhoto_outputsExpectedMetadata.
@Test
public void retrieveMetadata_heicMotionPhoto_outputsExpectedMetadata() throws Exception {
MediaItem mediaItem = MediaItem.fromUri(Uri.parse("asset://android_asset/media/mp4/sample_MP.heic"));
MotionPhotoMetadata expectedMotionPhotoMetadata = new MotionPhotoMetadata(/* photoStartPosition= */
0, /* photoSize= */
28_853, /* photoPresentationTimestampUs= */
C.TIME_UNSET, /* videoStartPosition= */
28_869, /* videoSize= */
28_803);
ListenableFuture<TrackGroupArray> trackGroupsFuture = retrieveMetadata(context, mediaItem, clock);
ShadowLooper.idleMainLooper();
TrackGroupArray trackGroups = trackGroupsFuture.get(TEST_TIMEOUT_SEC, TimeUnit.SECONDS);
assertThat(trackGroups.length).isEqualTo(1);
assertThat(trackGroups.get(0).length).isEqualTo(1);
assertThat(trackGroups.get(0).getFormat(0).metadata.length()).isEqualTo(1);
assertThat(trackGroups.get(0).getFormat(0).metadata.get(0)).isEqualTo(expectedMotionPhotoMetadata);
}
Aggregations