diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/MotionPhotoPlaybackTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/MotionPhotoPlaybackTest.java new file mode 100644 index 0000000000..90c4c83211 --- /dev/null +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/MotionPhotoPlaybackTest.java @@ -0,0 +1,84 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.media3.exoplayer.e2etest; + +import android.content.Context; +import android.graphics.SurfaceTexture; +import android.view.Surface; +import androidx.media3.common.MediaItem; +import androidx.media3.common.Player; +import androidx.media3.exoplayer.ExoPlayer; +import androidx.media3.exoplayer.source.DefaultMediaSourceFactory; +import androidx.media3.test.utils.CapturingRenderersFactory; +import androidx.media3.test.utils.DumpFileAsserts; +import androidx.media3.test.utils.FakeClock; +import androidx.media3.test.utils.robolectric.PlaybackOutput; +import androidx.media3.test.utils.robolectric.ShadowMediaCodecConfig; +import androidx.media3.test.utils.robolectric.TestPlayerRunHelper; +import androidx.test.core.app.ApplicationProvider; +import com.google.common.collect.ImmutableList; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.ParameterizedRobolectricTestRunner; + +/** End-to-end tests for playing the video embedded in motion photos. */ +@RunWith(ParameterizedRobolectricTestRunner.class) +public class MotionPhotoPlaybackTest { + + @ParameterizedRobolectricTestRunner.Parameters(name = "{0}") + public static ImmutableList mediaSamples() { + return ImmutableList.of( + "pixel-motion-photo-jfif-segment-shortened.jpg", + // TODO: b/301025983 - Update default handling to play the 'real' video track in this file. + "pixel-motion-photo-2-hevc-tracks.jpg"); + } + + @ParameterizedRobolectricTestRunner.Parameter public String inputFile; + + @Rule + public ShadowMediaCodecConfig mediaCodecConfig = + ShadowMediaCodecConfig.forAllSupportedMimeTypes(); + + @Test + public void test() throws Exception { + Context applicationContext = ApplicationProvider.getApplicationContext(); + CapturingRenderersFactory capturingRenderersFactory = + new CapturingRenderersFactory(applicationContext); + ExoPlayer player = + new ExoPlayer.Builder( + applicationContext, + capturingRenderersFactory, + new DefaultMediaSourceFactory(applicationContext)) + .setClock(new FakeClock(/* isAutoAdvancing= */ true)) + .build(); + Surface surface = new Surface(new SurfaceTexture(/* texName= */ 1)); + player.setVideoSurface(surface); + PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory); + + player.setMediaItem(MediaItem.fromUri("asset:///media/jpeg/" + inputFile)); + player.prepare(); + player.play(); + TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED); + player.release(); + surface.release(); + + DumpFileAsserts.assertOutput( + applicationContext, + playbackOutput, + "playbackdumps/jpeg-motion-photo/" + inputFile + ".dump"); + } +} diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/jpeg/JpegExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/jpeg/JpegExtractorTest.java index 15eeeb85b8..e7e758910c 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/jpeg/JpegExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/jpeg/JpegExtractorTest.java @@ -92,4 +92,13 @@ public final class JpegExtractorTest { "media/jpeg/ss-motion-photo-shortened.jpg", simulationConfig); } + + /** Regression test for [internal b/301025983]. */ + @Test + public void samplePixelMotionPhotoWithTwoHevcTracks_extractMotionPhoto() throws Exception { + ExtractorAsserts.assertBehavior( + JpegMotionPhotoExtractor::new, + "media/jpeg/pixel-motion-photo-2-hevc-tracks.jpg", + simulationConfig); + } } diff --git a/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.0.dump b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.0.dump new file mode 100644 index 0000000000..cba1facae4 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.0.dump @@ -0,0 +1,544 @@ +seekMap: + isSeekable = true + duration = 2100700 + getPosition(0) = [[timeUs=0, position=2603638]] + getPosition(1) = [[timeUs=0, position=2603638], [timeUs=233244, position=2954238]] + getPosition(1050350) = [[timeUs=933666, position=3996417], [timeUs=1167088, position=4338425]] + getPosition(2100700) = [[timeUs=2058988, position=5701022]] +numberOfTracks = 5 +track 0: + total output bytes = 3306897 + sample count = 58 + format 0: + id = 1 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 229249 + width = 1024 + height = 768 + frameRate = 27.609846 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash C508E2F1 + sample 0: + time = 0 + flags = 1 + data = length 175795, hash 92D88322 + sample 1: + time = 33344 + flags = 0 + data = length 32825, hash 9E4BBDC9 + sample 2: + time = 66688 + flags = 0 + data = length 30605, hash E792B0E1 + sample 3: + time = 100033 + flags = 0 + data = length 30292, hash C7D67400 + sample 4: + time = 133377 + flags = 0 + data = length 25928, hash EF6730FC + sample 5: + time = 166722 + flags = 0 + data = length 23135, hash F7CCAB5 + sample 6: + time = 200066 + flags = 0 + data = length 32020, hash C948881C + sample 7: + time = 233244 + flags = 1 + data = length 142480, hash 898726B + sample 8: + time = 266755 + flags = 0 + data = length 28601, hash 158799EE + sample 9: + time = 300100 + flags = 0 + data = length 32815, hash 53ABACC0 + sample 10: + time = 333444 + flags = 0 + data = length 40718, hash 24B50BC1 + sample 11: + time = 366800 + flags = 0 + data = length 29088, hash D18E00AE + sample 12: + time = 400144 + flags = 0 + data = length 40733, hash 79770CBA + sample 13: + time = 433488 + flags = 0 + data = length 36545, hash 27A8297C + sample 14: + time = 466833 + flags = 1 + data = length 154398, hash 9B9013C6 + sample 15: + time = 500177 + flags = 0 + data = length 27135, hash 36386C42 + sample 16: + time = 533544 + flags = 0 + data = length 38747, hash 85D6F019 + sample 17: + time = 566866 + flags = 0 + data = length 29503, hash 9D1B916B + sample 18: + time = 600211 + flags = 0 + data = length 32772, hash D4AB8735 + sample 19: + time = 633555 + flags = 0 + data = length 30388, hash ED862EDE + sample 20: + time = 666900 + flags = 0 + data = length 35989, hash 4035491B + sample 21: + time = 700244 + flags = 1 + data = length 142845, hash EC0DF71D + sample 22: + time = 733600 + flags = 0 + data = length 28259, hash 8B59F0F6 + sample 23: + time = 766944 + flags = 0 + data = length 40516, hash E8C6D575 + sample 24: + time = 800288 + flags = 0 + data = length 38467, hash 4151BB14 + sample 25: + time = 833633 + flags = 0 + data = length 27748, hash 2DB01A39 + sample 26: + time = 866977 + flags = 0 + data = length 36956, hash 377A5C6C + sample 27: + time = 900300 + flags = 0 + data = length 27476, hash DA07CDCA + sample 28: + time = 933666 + flags = 1 + data = length 143200, hash E9E09671 + sample 29: + time = 967011 + flags = 0 + data = length 29122, hash 99DDD644 + sample 30: + time = 1000355 + flags = 0 + data = length 39280, hash DC2510AE + sample 31: + time = 1033700 + flags = 0 + data = length 38631, hash AEB965F7 + sample 32: + time = 1067044 + flags = 0 + data = length 27422, hash 84AFA85C + sample 33: + time = 1100388 + flags = 0 + data = length 39360, hash 467C7E6E + sample 34: + time = 1133744 + flags = 0 + data = length 24993, hash F10D6C03 + sample 35: + time = 1167088 + flags = 1 + data = length 154591, hash 62D2311C + sample 36: + time = 1200433 + flags = 0 + data = length 27223, hash 6733CC93 + sample 37: + time = 1233777 + flags = 0 + data = length 27659, hash BCE01964 + sample 38: + time = 1267077 + flags = 0 + data = length 39427, hash 4260E860 + sample 39: + time = 1300422 + flags = 0 + data = length 27698, hash 8D6087A2 + sample 40: + time = 1333811 + flags = 0 + data = length 40089, hash 61C9B394 + sample 41: + time = 1367222 + flags = 0 + data = length 27601, hash 7B3D87E8 + sample 42: + time = 1408833 + flags = 1 + data = length 219559, hash 881031BA + sample 43: + time = 1450511 + flags = 0 + data = length 30027, hash 7BBBF608 + sample 44: + time = 1492188 + flags = 0 + data = length 41623, hash 3A6D4A48 + sample 45: + time = 1600544 + flags = 0 + data = length 114695, hash D61EAD29 + sample 46: + time = 1642222 + flags = 0 + data = length 82113, hash DA0FCB1F + sample 47: + time = 1683900 + flags = 0 + data = length 59998, hash 72EE3D06 + sample 48: + time = 1725577 + flags = 0 + data = length 37475, hash FA6E62C4 + sample 49: + time = 1767244 + flags = 1 + data = length 229219, hash 37A06706 + sample 50: + time = 1808922 + flags = 0 + data = length 24001, hash 3DA0DA79 + sample 51: + time = 1850533 + flags = 0 + data = length 45931, hash 6B88632C + sample 52: + time = 1892211 + flags = 0 + data = length 35838, hash 3DC6FDE6 + sample 53: + time = 1933955 + flags = 0 + data = length 36848, hash 6F9986EC + sample 54: + time = 1975633 + flags = 0 + data = length 29700, hash CF094404 + sample 55: + time = 2017311 + flags = 0 + data = length 31282, hash 57AABAAA + sample 56: + time = 2058988 + flags = 1 + data = length 171963, hash 7115AF3D + sample 57: + time = 2100700 + flags = 536870912 + data = length 37550, hash F7D849CB +track 1: + total output bytes = 151315 + sample count = 1 + format 0: + id = 2 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 151345 + width = 2048 + height = 1536 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash 1924973 + sample 0: + time = 0 + flags = 536870913 + data = length 151315, hash FBF6FF68 +track 2: + total output bytes = 26100 + sample count = 58 + format 0: + id = 3 + sampleMimeType = application/microvideo-meta-stream + maxInputSize = 480 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 0 + flags = 1 + data = length 450, hash 1DB4E43 + sample 1: + time = 33344 + flags = 1 + data = length 450, hash 31CF99A9 + sample 2: + time = 66688 + flags = 1 + data = length 450, hash D87147C1 + sample 3: + time = 100033 + flags = 1 + data = length 450, hash BCAD65B6 + sample 4: + time = 133377 + flags = 1 + data = length 450, hash E974F0DE + sample 5: + time = 166722 + flags = 1 + data = length 450, hash 54408FE5 + sample 6: + time = 200066 + flags = 1 + data = length 450, hash FD24CFEE + sample 7: + time = 233244 + flags = 1 + data = length 450, hash D7ED735E + sample 8: + time = 266755 + flags = 1 + data = length 450, hash DD5FCC6A + sample 9: + time = 300100 + flags = 1 + data = length 450, hash F62B92C4 + sample 10: + time = 333444 + flags = 1 + data = length 450, hash 415E310C + sample 11: + time = 366800 + flags = 1 + data = length 450, hash FAAAA664 + sample 12: + time = 400144 + flags = 1 + data = length 450, hash 1E5F362B + sample 13: + time = 433488 + flags = 1 + data = length 450, hash 78F48896 + sample 14: + time = 466833 + flags = 1 + data = length 450, hash 2F7E6B66 + sample 15: + time = 500177 + flags = 1 + data = length 450, hash AFB7A450 + sample 16: + time = 533544 + flags = 1 + data = length 450, hash F545669 + sample 17: + time = 566866 + flags = 1 + data = length 450, hash 2C36B457 + sample 18: + time = 600211 + flags = 1 + data = length 450, hash D0CFA2B9 + sample 19: + time = 633555 + flags = 1 + data = length 450, hash D11F3EC8 + sample 20: + time = 666900 + flags = 1 + data = length 450, hash 83D97504 + sample 21: + time = 700244 + flags = 1 + data = length 450, hash 950768E5 + sample 22: + time = 733600 + flags = 1 + data = length 450, hash C038C795 + sample 23: + time = 766944 + flags = 1 + data = length 450, hash 9B615963 + sample 24: + time = 800288 + flags = 1 + data = length 450, hash 72878EC6 + sample 25: + time = 833633 + flags = 1 + data = length 450, hash CB2574D4 + sample 26: + time = 866977 + flags = 1 + data = length 450, hash 55D66158 + sample 27: + time = 900300 + flags = 1 + data = length 450, hash C1504C6A + sample 28: + time = 933666 + flags = 1 + data = length 450, hash C014FCF2 + sample 29: + time = 967011 + flags = 1 + data = length 450, hash 2CE538CD + sample 30: + time = 1000355 + flags = 1 + data = length 450, hash 86F37F2D + sample 31: + time = 1033700 + flags = 1 + data = length 450, hash 441CCCF5 + sample 32: + time = 1067044 + flags = 1 + data = length 450, hash 1B99C695 + sample 33: + time = 1100388 + flags = 1 + data = length 450, hash 82E3FA65 + sample 34: + time = 1133744 + flags = 1 + data = length 450, hash F0056647 + sample 35: + time = 1167088 + flags = 1 + data = length 450, hash B6912F16 + sample 36: + time = 1200433 + flags = 1 + data = length 450, hash DB1A66E7 + sample 37: + time = 1233777 + flags = 1 + data = length 450, hash C221124 + sample 38: + time = 1267077 + flags = 1 + data = length 450, hash FFB9FD50 + sample 39: + time = 1300422 + flags = 1 + data = length 450, hash 3B24BF6A + sample 40: + time = 1333811 + flags = 1 + data = length 450, hash 7BFFD1E2 + sample 41: + time = 1367222 + flags = 1 + data = length 450, hash 5D066E86 + sample 42: + time = 1408833 + flags = 1 + data = length 450, hash C778961C + sample 43: + time = 1450511 + flags = 1 + data = length 450, hash 9BAFB769 + sample 44: + time = 1492188 + flags = 1 + data = length 450, hash D75C7D3B + sample 45: + time = 1600544 + flags = 1 + data = length 450, hash 99567E6F + sample 46: + time = 1642222 + flags = 1 + data = length 450, hash 91D53D15 + sample 47: + time = 1683900 + flags = 1 + data = length 450, hash AD0DC631 + sample 48: + time = 1725577 + flags = 1 + data = length 450, hash 6DDB52D + sample 49: + time = 1767244 + flags = 1 + data = length 450, hash 563846ED + sample 50: + time = 1808922 + flags = 1 + data = length 450, hash E4BF4849 + sample 51: + time = 1850533 + flags = 1 + data = length 450, hash 7A5646D3 + sample 52: + time = 1892211 + flags = 1 + data = length 450, hash 59B2529E + sample 53: + time = 1933955 + flags = 1 + data = length 450, hash 8EEAF538 + sample 54: + time = 1975633 + flags = 1 + data = length 450, hash 1D6CFB63 + sample 55: + time = 2017311 + flags = 1 + data = length 450, hash 9D344846 + sample 56: + time = 2058988 + flags = 1 + data = length 450, hash D07CD09D + sample 57: + time = 2100700 + flags = 536870913 + data = length 450, hash B6FD8734 +track 3: + total output bytes = 59 + sample count = 1 + format 0: + id = 4 + sampleMimeType = application/motionphoto-image-meta + maxInputSize = 89 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 0 + flags = 536870913 + data = length 59, hash 869099E5 +track 1024: + total output bytes = 0 + sample count = 0 + format 0: + containerMimeType = image/jpeg + metadata = entries=[Motion photo metadata: photoStartPosition=0, photoSize=2603594, photoPresentationTimestampUs=1133745, videoStartPosition=2603594, videoSize=3487735] +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.1.dump b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.1.dump new file mode 100644 index 0000000000..e3d140d137 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.1.dump @@ -0,0 +1,408 @@ +seekMap: + isSeekable = true + duration = 2100700 + getPosition(0) = [[timeUs=0, position=2603638]] + getPosition(1) = [[timeUs=0, position=2603638], [timeUs=233244, position=2954238]] + getPosition(1050350) = [[timeUs=933666, position=3996417], [timeUs=1167088, position=4338425]] + getPosition(2100700) = [[timeUs=2058988, position=5701022]] +numberOfTracks = 5 +track 0: + total output bytes = 2605317 + sample count = 44 + format 0: + id = 1 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 229249 + width = 1024 + height = 768 + frameRate = 27.609846 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash C508E2F1 + sample 0: + time = 466833 + flags = 1 + data = length 154398, hash 9B9013C6 + sample 1: + time = 500177 + flags = 0 + data = length 27135, hash 36386C42 + sample 2: + time = 533544 + flags = 0 + data = length 38747, hash 85D6F019 + sample 3: + time = 566866 + flags = 0 + data = length 29503, hash 9D1B916B + sample 4: + time = 600211 + flags = 0 + data = length 32772, hash D4AB8735 + sample 5: + time = 633555 + flags = 0 + data = length 30388, hash ED862EDE + sample 6: + time = 666900 + flags = 0 + data = length 35989, hash 4035491B + sample 7: + time = 700244 + flags = 1 + data = length 142845, hash EC0DF71D + sample 8: + time = 733600 + flags = 0 + data = length 28259, hash 8B59F0F6 + sample 9: + time = 766944 + flags = 0 + data = length 40516, hash E8C6D575 + sample 10: + time = 800288 + flags = 0 + data = length 38467, hash 4151BB14 + sample 11: + time = 833633 + flags = 0 + data = length 27748, hash 2DB01A39 + sample 12: + time = 866977 + flags = 0 + data = length 36956, hash 377A5C6C + sample 13: + time = 900300 + flags = 0 + data = length 27476, hash DA07CDCA + sample 14: + time = 933666 + flags = 1 + data = length 143200, hash E9E09671 + sample 15: + time = 967011 + flags = 0 + data = length 29122, hash 99DDD644 + sample 16: + time = 1000355 + flags = 0 + data = length 39280, hash DC2510AE + sample 17: + time = 1033700 + flags = 0 + data = length 38631, hash AEB965F7 + sample 18: + time = 1067044 + flags = 0 + data = length 27422, hash 84AFA85C + sample 19: + time = 1100388 + flags = 0 + data = length 39360, hash 467C7E6E + sample 20: + time = 1133744 + flags = 0 + data = length 24993, hash F10D6C03 + sample 21: + time = 1167088 + flags = 1 + data = length 154591, hash 62D2311C + sample 22: + time = 1200433 + flags = 0 + data = length 27223, hash 6733CC93 + sample 23: + time = 1233777 + flags = 0 + data = length 27659, hash BCE01964 + sample 24: + time = 1267077 + flags = 0 + data = length 39427, hash 4260E860 + sample 25: + time = 1300422 + flags = 0 + data = length 27698, hash 8D6087A2 + sample 26: + time = 1333811 + flags = 0 + data = length 40089, hash 61C9B394 + sample 27: + time = 1367222 + flags = 0 + data = length 27601, hash 7B3D87E8 + sample 28: + time = 1408833 + flags = 1 + data = length 219559, hash 881031BA + sample 29: + time = 1450511 + flags = 0 + data = length 30027, hash 7BBBF608 + sample 30: + time = 1492188 + flags = 0 + data = length 41623, hash 3A6D4A48 + sample 31: + time = 1600544 + flags = 0 + data = length 114695, hash D61EAD29 + sample 32: + time = 1642222 + flags = 0 + data = length 82113, hash DA0FCB1F + sample 33: + time = 1683900 + flags = 0 + data = length 59998, hash 72EE3D06 + sample 34: + time = 1725577 + flags = 0 + data = length 37475, hash FA6E62C4 + sample 35: + time = 1767244 + flags = 1 + data = length 229219, hash 37A06706 + sample 36: + time = 1808922 + flags = 0 + data = length 24001, hash 3DA0DA79 + sample 37: + time = 1850533 + flags = 0 + data = length 45931, hash 6B88632C + sample 38: + time = 1892211 + flags = 0 + data = length 35838, hash 3DC6FDE6 + sample 39: + time = 1933955 + flags = 0 + data = length 36848, hash 6F9986EC + sample 40: + time = 1975633 + flags = 0 + data = length 29700, hash CF094404 + sample 41: + time = 2017311 + flags = 0 + data = length 31282, hash 57AABAAA + sample 42: + time = 2058988 + flags = 1 + data = length 171963, hash 7115AF3D + sample 43: + time = 2100700 + flags = 536870912 + data = length 37550, hash F7D849CB +track 1: + total output bytes = 151315 + sample count = 1 + format 0: + id = 2 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 151345 + width = 2048 + height = 1536 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash 1924973 + sample 0: + time = 0 + flags = 536870913 + data = length 151315, hash FBF6FF68 +track 2: + total output bytes = 17100 + sample count = 38 + format 0: + id = 3 + sampleMimeType = application/microvideo-meta-stream + maxInputSize = 480 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 666900 + flags = 1 + data = length 450, hash 83D97504 + sample 1: + time = 700244 + flags = 1 + data = length 450, hash 950768E5 + sample 2: + time = 733600 + flags = 1 + data = length 450, hash C038C795 + sample 3: + time = 766944 + flags = 1 + data = length 450, hash 9B615963 + sample 4: + time = 800288 + flags = 1 + data = length 450, hash 72878EC6 + sample 5: + time = 833633 + flags = 1 + data = length 450, hash CB2574D4 + sample 6: + time = 866977 + flags = 1 + data = length 450, hash 55D66158 + sample 7: + time = 900300 + flags = 1 + data = length 450, hash C1504C6A + sample 8: + time = 933666 + flags = 1 + data = length 450, hash C014FCF2 + sample 9: + time = 967011 + flags = 1 + data = length 450, hash 2CE538CD + sample 10: + time = 1000355 + flags = 1 + data = length 450, hash 86F37F2D + sample 11: + time = 1033700 + flags = 1 + data = length 450, hash 441CCCF5 + sample 12: + time = 1067044 + flags = 1 + data = length 450, hash 1B99C695 + sample 13: + time = 1100388 + flags = 1 + data = length 450, hash 82E3FA65 + sample 14: + time = 1133744 + flags = 1 + data = length 450, hash F0056647 + sample 15: + time = 1167088 + flags = 1 + data = length 450, hash B6912F16 + sample 16: + time = 1200433 + flags = 1 + data = length 450, hash DB1A66E7 + sample 17: + time = 1233777 + flags = 1 + data = length 450, hash C221124 + sample 18: + time = 1267077 + flags = 1 + data = length 450, hash FFB9FD50 + sample 19: + time = 1300422 + flags = 1 + data = length 450, hash 3B24BF6A + sample 20: + time = 1333811 + flags = 1 + data = length 450, hash 7BFFD1E2 + sample 21: + time = 1367222 + flags = 1 + data = length 450, hash 5D066E86 + sample 22: + time = 1408833 + flags = 1 + data = length 450, hash C778961C + sample 23: + time = 1450511 + flags = 1 + data = length 450, hash 9BAFB769 + sample 24: + time = 1492188 + flags = 1 + data = length 450, hash D75C7D3B + sample 25: + time = 1600544 + flags = 1 + data = length 450, hash 99567E6F + sample 26: + time = 1642222 + flags = 1 + data = length 450, hash 91D53D15 + sample 27: + time = 1683900 + flags = 1 + data = length 450, hash AD0DC631 + sample 28: + time = 1725577 + flags = 1 + data = length 450, hash 6DDB52D + sample 29: + time = 1767244 + flags = 1 + data = length 450, hash 563846ED + sample 30: + time = 1808922 + flags = 1 + data = length 450, hash E4BF4849 + sample 31: + time = 1850533 + flags = 1 + data = length 450, hash 7A5646D3 + sample 32: + time = 1892211 + flags = 1 + data = length 450, hash 59B2529E + sample 33: + time = 1933955 + flags = 1 + data = length 450, hash 8EEAF538 + sample 34: + time = 1975633 + flags = 1 + data = length 450, hash 1D6CFB63 + sample 35: + time = 2017311 + flags = 1 + data = length 450, hash 9D344846 + sample 36: + time = 2058988 + flags = 1 + data = length 450, hash D07CD09D + sample 37: + time = 2100700 + flags = 536870913 + data = length 450, hash B6FD8734 +track 3: + total output bytes = 59 + sample count = 1 + format 0: + id = 4 + sampleMimeType = application/motionphoto-image-meta + maxInputSize = 89 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 0 + flags = 536870913 + data = length 59, hash 869099E5 +track 1024: + total output bytes = 0 + sample count = 0 + format 0: + containerMimeType = image/jpeg + metadata = entries=[Motion photo metadata: photoStartPosition=0, photoSize=2603594, photoPresentationTimestampUs=1133745, videoStartPosition=2603594, videoSize=3487735] +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.2.dump b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.2.dump new file mode 100644 index 0000000000..f15a2f5410 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.2.dump @@ -0,0 +1,240 @@ +seekMap: + isSeekable = true + duration = 2100700 + getPosition(0) = [[timeUs=0, position=2603638]] + getPosition(1) = [[timeUs=0, position=2603638], [timeUs=233244, position=2954238]] + getPosition(1050350) = [[timeUs=933666, position=3996417], [timeUs=1167088, position=4338425]] + getPosition(2100700) = [[timeUs=2058988, position=5701022]] +numberOfTracks = 5 +track 0: + total output bytes = 1572110 + sample count = 23 + format 0: + id = 1 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 229249 + width = 1024 + height = 768 + frameRate = 27.609846 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash C508E2F1 + sample 0: + time = 1167088 + flags = 1 + data = length 154591, hash 62D2311C + sample 1: + time = 1200433 + flags = 0 + data = length 27223, hash 6733CC93 + sample 2: + time = 1233777 + flags = 0 + data = length 27659, hash BCE01964 + sample 3: + time = 1267077 + flags = 0 + data = length 39427, hash 4260E860 + sample 4: + time = 1300422 + flags = 0 + data = length 27698, hash 8D6087A2 + sample 5: + time = 1333811 + flags = 0 + data = length 40089, hash 61C9B394 + sample 6: + time = 1367222 + flags = 0 + data = length 27601, hash 7B3D87E8 + sample 7: + time = 1408833 + flags = 1 + data = length 219559, hash 881031BA + sample 8: + time = 1450511 + flags = 0 + data = length 30027, hash 7BBBF608 + sample 9: + time = 1492188 + flags = 0 + data = length 41623, hash 3A6D4A48 + sample 10: + time = 1600544 + flags = 0 + data = length 114695, hash D61EAD29 + sample 11: + time = 1642222 + flags = 0 + data = length 82113, hash DA0FCB1F + sample 12: + time = 1683900 + flags = 0 + data = length 59998, hash 72EE3D06 + sample 13: + time = 1725577 + flags = 0 + data = length 37475, hash FA6E62C4 + sample 14: + time = 1767244 + flags = 1 + data = length 229219, hash 37A06706 + sample 15: + time = 1808922 + flags = 0 + data = length 24001, hash 3DA0DA79 + sample 16: + time = 1850533 + flags = 0 + data = length 45931, hash 6B88632C + sample 17: + time = 1892211 + flags = 0 + data = length 35838, hash 3DC6FDE6 + sample 18: + time = 1933955 + flags = 0 + data = length 36848, hash 6F9986EC + sample 19: + time = 1975633 + flags = 0 + data = length 29700, hash CF094404 + sample 20: + time = 2017311 + flags = 0 + data = length 31282, hash 57AABAAA + sample 21: + time = 2058988 + flags = 1 + data = length 171963, hash 7115AF3D + sample 22: + time = 2100700 + flags = 536870912 + data = length 37550, hash F7D849CB +track 1: + total output bytes = 151315 + sample count = 1 + format 0: + id = 2 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 151345 + width = 2048 + height = 1536 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash 1924973 + sample 0: + time = 0 + flags = 536870913 + data = length 151315, hash FBF6FF68 +track 2: + total output bytes = 7650 + sample count = 17 + format 0: + id = 3 + sampleMimeType = application/microvideo-meta-stream + maxInputSize = 480 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 1367222 + flags = 1 + data = length 450, hash 5D066E86 + sample 1: + time = 1408833 + flags = 1 + data = length 450, hash C778961C + sample 2: + time = 1450511 + flags = 1 + data = length 450, hash 9BAFB769 + sample 3: + time = 1492188 + flags = 1 + data = length 450, hash D75C7D3B + sample 4: + time = 1600544 + flags = 1 + data = length 450, hash 99567E6F + sample 5: + time = 1642222 + flags = 1 + data = length 450, hash 91D53D15 + sample 6: + time = 1683900 + flags = 1 + data = length 450, hash AD0DC631 + sample 7: + time = 1725577 + flags = 1 + data = length 450, hash 6DDB52D + sample 8: + time = 1767244 + flags = 1 + data = length 450, hash 563846ED + sample 9: + time = 1808922 + flags = 1 + data = length 450, hash E4BF4849 + sample 10: + time = 1850533 + flags = 1 + data = length 450, hash 7A5646D3 + sample 11: + time = 1892211 + flags = 1 + data = length 450, hash 59B2529E + sample 12: + time = 1933955 + flags = 1 + data = length 450, hash 8EEAF538 + sample 13: + time = 1975633 + flags = 1 + data = length 450, hash 1D6CFB63 + sample 14: + time = 2017311 + flags = 1 + data = length 450, hash 9D344846 + sample 15: + time = 2058988 + flags = 1 + data = length 450, hash D07CD09D + sample 16: + time = 2100700 + flags = 536870913 + data = length 450, hash B6FD8734 +track 3: + total output bytes = 59 + sample count = 1 + format 0: + id = 4 + sampleMimeType = application/motionphoto-image-meta + maxInputSize = 89 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 0 + flags = 536870913 + data = length 59, hash 869099E5 +track 1024: + total output bytes = 0 + sample count = 0 + format 0: + containerMimeType = image/jpeg + metadata = entries=[Motion photo metadata: photoStartPosition=0, photoSize=2603594, photoPresentationTimestampUs=1133745, videoStartPosition=2603594, videoSize=3487735] +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.3.dump b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.3.dump new file mode 100644 index 0000000000..dbe7d56ea6 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.3.dump @@ -0,0 +1,92 @@ +seekMap: + isSeekable = true + duration = 2100700 + getPosition(0) = [[timeUs=0, position=2603638]] + getPosition(1) = [[timeUs=0, position=2603638], [timeUs=233244, position=2954238]] + getPosition(1050350) = [[timeUs=933666, position=3996417], [timeUs=1167088, position=4338425]] + getPosition(2100700) = [[timeUs=2058988, position=5701022]] +numberOfTracks = 5 +track 0: + total output bytes = 209513 + sample count = 2 + format 0: + id = 1 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 229249 + width = 1024 + height = 768 + frameRate = 27.609846 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash C508E2F1 + sample 0: + time = 2058988 + flags = 1 + data = length 171963, hash 7115AF3D + sample 1: + time = 2100700 + flags = 536870912 + data = length 37550, hash F7D849CB +track 1: + total output bytes = 151315 + sample count = 1 + format 0: + id = 2 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L153 + maxInputSize = 151345 + width = 2048 + height = 1536 + rotationDegrees = 90 + colorInfo: + colorSpace = 1 + colorRange = 1 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + initializationData: + data = length 82, hash 1924973 + sample 0: + time = 0 + flags = 536870913 + data = length 151315, hash FBF6FF68 +track 2: + total output bytes = 450 + sample count = 1 + format 0: + id = 3 + sampleMimeType = application/microvideo-meta-stream + maxInputSize = 480 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 2100700 + flags = 536870913 + data = length 450, hash B6FD8734 +track 3: + total output bytes = 59 + sample count = 1 + format 0: + id = 4 + sampleMimeType = application/motionphoto-image-meta + maxInputSize = 89 + metadata = entries=[Mp4Timestamp: creation time=3784612704, modification time=3784612704, timescale=10000] + sample 0: + time = 0 + flags = 536870913 + data = length 59, hash 869099E5 +track 1024: + total output bytes = 0 + sample count = 0 + format 0: + containerMimeType = image/jpeg + metadata = entries=[Motion photo metadata: photoStartPosition=0, photoSize=2603594, photoPresentationTimestampUs=1133745, videoStartPosition=2603594, videoSize=3487735] +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.unknown_length.dump new file mode 100644 index 0000000000..02c10855b5 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/jpeg/pixel-motion-photo-2-hevc-tracks.jpg.unknown_length.dump @@ -0,0 +1,12 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 1024: + total output bytes = 0 + sample count = 0 + format 0: + containerMimeType = image/jpeg + metadata = entries=[] +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/jpeg/pixel-motion-photo-2-hevc-tracks.jpg b/libraries/test_data/src/test/assets/media/jpeg/pixel-motion-photo-2-hevc-tracks.jpg new file mode 100644 index 0000000000..c80badf58c Binary files /dev/null and b/libraries/test_data/src/test/assets/media/jpeg/pixel-motion-photo-2-hevc-tracks.jpg differ diff --git a/libraries/test_data/src/test/assets/playbackdumps/jpeg-motion-photo/pixel-motion-photo-2-hevc-tracks.jpg.dump b/libraries/test_data/src/test/assets/playbackdumps/jpeg-motion-photo/pixel-motion-photo-2-hevc-tracks.jpg.dump new file mode 100644 index 0000000000..6383485b2c --- /dev/null +++ b/libraries/test_data/src/test/assets/playbackdumps/jpeg-motion-photo/pixel-motion-photo-2-hevc-tracks.jpg.dump @@ -0,0 +1,16 @@ +MediaCodecAdapter (exotest.video.hevc): + inputBuffers: + count = 2 + input buffer #0: + timeUs = 1000000000000 + contents = length 151315, hash FBF6FF68 + input buffer #1: + timeUs = 0 + flags = 4 + contents = length 0, hash 1 + outputBuffers: + count = 1 + output buffer #0: + timeUs = 1000000000000 + size = 151315 + rendered = true diff --git a/libraries/test_data/src/test/assets/playbackdumps/jpeg-motion-photo/pixel-motion-photo-jfif-segment-shortened.jpg.dump b/libraries/test_data/src/test/assets/playbackdumps/jpeg-motion-photo/pixel-motion-photo-jfif-segment-shortened.jpg.dump new file mode 100644 index 0000000000..5293853462 --- /dev/null +++ b/libraries/test_data/src/test/assets/playbackdumps/jpeg-motion-photo/pixel-motion-photo-jfif-segment-shortened.jpg.dump @@ -0,0 +1,16 @@ +MediaCodecAdapter (exotest.video.avc): + inputBuffers: + count = 2 + input buffer #0: + timeUs = 1000000000000 + contents = length 3865, hash 5B0DEEC7 + input buffer #1: + timeUs = 0 + flags = 4 + contents = length 0, hash 1 + outputBuffers: + count = 1 + output buffer #0: + timeUs = 1000000000000 + size = 3865 + rendered = true