Add extractor and playback tests for Pixel JPEG motion photo

This image has two video tracks in the MP4 data, one is a 'real' video
which we want to play by default, and the other is a low-fps video track
which isn't intended to be directly played, it's encoded in HEVC for
compression and decoding efficiency.

This test demonstrates ExoPlayer's current behaviour default extraction
and playback, which results in selecting the high-res, low-fps track
(actually single sample in this example), instead of playing the actual
video.

PiperOrigin-RevId: 588068908
(cherry picked from commit 6360082b879e9cba394f169b7b50c8c500173027)
This commit is contained in:
ibaker 2023-12-05 07:44:08 -08:00 committed by microkatz
parent ea72856ac8
commit 482d5d69d5
10 changed files with 1421 additions and 0 deletions

View File

@ -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<String> 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");
}
}

View File

@ -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);
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

View File

@ -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

View File

@ -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