Implement seeking to the start of a MIDI file

- Fixed MidiExtractor state issues which caused seeking to behave unexpectedly. Ensures the extractor is now always in the file loading state after returning RESULT_END_OF_INPUT.
- Fixed an infinite loop in MidiExtractor caused by the file data array having an initial size of 0. The extractor attempted to increase the capacity of the array by using this size of 0 in it's calculations.

PiperOrigin-RevId: 455107511
This commit is contained in:
hmzh 2022-06-15 12:42:05 +00:00 committed by Marc Baechinger
parent ad3348cc69
commit 84c43f855f
3 changed files with 710 additions and 0 deletions

View File

@ -0,0 +1,355 @@
seekMap:
isSeekable = false
duration = UNSET TIME
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
total output bytes = 264
sample count = 86
format 0:
sampleMimeType = audio/midi
sample 0:
time = 0
flags = 1
data = length 7, hash C95FA520
sample 1:
time = 0
flags = 1
data = length 5, hash 1CF3DA7
sample 2:
time = 0
flags = 1
data = length 3, hash FFFED75B
sample 3:
time = 2108
flags = 1
data = length 3, hash FFFED448
sample 4:
time = 2148
flags = 1
data = length 3, hash FFFE9730
sample 5:
time = 2276
flags = 1
data = length 3, hash FFFED733
sample 6:
time = 4384
flags = 1
data = length 3, hash FFFECFEF
sample 7:
time = 4384
flags = 1
data = length 3, hash FFFECF7F
sample 8:
time = 4384
flags = 1
data = length 3, hash FFFED751
sample 9:
time = 6492
flags = 1
data = length 3, hash FFFED312
sample 10:
time = 6522
flags = 1
data = length 3, hash FFFE9730
sample 11:
time = 6650
flags = 1
data = length 3, hash FFFED733
sample 12:
time = 8758
flags = 1
data = length 3, hash FFFECFEF
sample 13:
time = 8758
flags = 1
data = length 3, hash FFFECF7F
sample 14:
time = 8758
flags = 1
data = length 3, hash FFFED839
sample 15:
time = 10873
flags = 1
data = length 3, hash FFFED4E3
sample 16:
time = 10918
flags = 1
data = length 3, hash FFFE9730
sample 17:
time = 11046
flags = 1
data = length 3, hash FFFED80C
sample 18:
time = 13161
flags = 1
data = length 3, hash FFFECFEF
sample 19:
time = 13161
flags = 1
data = length 3, hash FFFECF7F
sample 20:
time = 13161
flags = 1
data = length 3, hash FFFED83E
sample 21:
time = 15276
flags = 1
data = length 3, hash FFFED57E
sample 22:
time = 15326
flags = 1
data = length 3, hash FFFE9730
sample 23:
time = 15454
flags = 1
data = length 3, hash FFFED80C
sample 24:
time = 17569
flags = 1
data = length 3, hash FFFECFEF
sample 25:
time = 17569
flags = 1
data = length 3, hash FFFECF7F
sample 26:
time = 17569
flags = 1
data = length 3, hash FFFED877
sample 27:
time = 19686
flags = 1
data = length 3, hash FFFED4E3
sample 28:
time = 19731
flags = 1
data = length 3, hash FFFE9730
sample 29:
time = 19859
flags = 1
data = length 3, hash FFFED84A
sample 30:
time = 21976
flags = 1
data = length 3, hash FFFECFEF
sample 31:
time = 21976
flags = 1
data = length 3, hash FFFECF7F
sample 32:
time = 21976
flags = 1
data = length 3, hash FFFED87C
sample 33:
time = 24093
flags = 1
data = length 3, hash FFFED57E
sample 34:
time = 24143
flags = 1
data = length 3, hash FFFE9730
sample 35:
time = 24271
flags = 1
data = length 3, hash FFFED84A
sample 36:
time = 26388
flags = 1
data = length 3, hash FFFECFEF
sample 37:
time = 26388
flags = 1
data = length 3, hash FFFECF7F
sample 38:
time = 26388
flags = 1
data = length 3, hash FFFED82F
sample 39:
time = 28503
flags = 1
data = length 3, hash FFFED3AE
sample 40:
time = 28538
flags = 1
data = length 3, hash FFFE9AF1
sample 41:
time = 28794
flags = 1
data = length 3, hash FFFED80C
sample 42:
time = 30909
flags = 1
data = length 3, hash FFFECFEF
sample 43:
time = 30909
flags = 1
data = length 3, hash FFFECF7F
sample 44:
time = 30909
flags = 1
data = length 3, hash FFFED800
sample 45:
time = 33022
flags = 1
data = length 3, hash FFFED57E
sample 46:
time = 33072
flags = 1
data = length 3, hash FFFE9730
sample 47:
time = 33200
flags = 1
data = length 3, hash FFFED7CE
sample 48:
time = 35313
flags = 1
data = length 3, hash FFFECFEF
sample 49:
time = 35313
flags = 1
data = length 3, hash FFFECF7F
sample 50:
time = 35313
flags = 1
data = length 3, hash FFFED7FB
sample 51:
time = 37426
flags = 1
data = length 3, hash FFFED4E3
sample 52:
time = 37471
flags = 1
data = length 3, hash FFFE9730
sample 53:
time = 37599
flags = 1
data = length 3, hash FFFED7CE
sample 54:
time = 39712
flags = 1
data = length 3, hash FFFECFEF
sample 55:
time = 39712
flags = 1
data = length 3, hash FFFECF7F
sample 56:
time = 39712
flags = 1
data = length 3, hash FFFED7E1
sample 57:
time = 41824
flags = 1
data = length 3, hash FFFED63D
sample 58:
time = 41874
flags = 1
data = length 3, hash FFFED73F
sample 59:
time = 41938
flags = 1
data = length 3, hash FFFED7AF
sample 60:
time = 44050
flags = 1
data = length 3, hash FFFED02F
sample 61:
time = 44050
flags = 1
data = length 3, hash FFFED73F
sample 62:
time = 44114
flags = 1
data = length 3, hash FFFED7D7
sample 63:
time = 46226
flags = 1
data = length 3, hash FFFED507
sample 64:
time = 46266
flags = 1
data = length 3, hash FFFED73F
sample 65:
time = 46330
flags = 1
data = length 3, hash FFFED7AF
sample 66:
time = 48442
flags = 1
data = length 3, hash FFFED02F
sample 67:
time = 48442
flags = 1
data = length 3, hash FFFED73F
sample 68:
time = 48506
flags = 1
data = length 3, hash FFFED79E
sample 69:
time = 50616
flags = 1
data = length 3, hash FFFED5A2
sample 70:
time = 50661
flags = 1
data = length 3, hash FFFED73F
sample 71:
time = 50725
flags = 1
data = length 3, hash FFFED771
sample 72:
time = 52835
flags = 1
data = length 3, hash FFFED02F
sample 73:
time = 52835
flags = 1
data = length 3, hash FFFED73F
sample 74:
time = 52899
flags = 1
data = length 3, hash FFFED7A3
sample 75:
time = 55009
flags = 1
data = length 3, hash FFFED63D
sample 76:
time = 55059
flags = 1
data = length 3, hash FFFED73F
sample 77:
time = 55123
flags = 1
data = length 3, hash FFFED771
sample 78:
time = 57233
flags = 1
data = length 3, hash FFFED02F
sample 79:
time = 57233
flags = 1
data = length 3, hash FFFED73F
sample 80:
time = 57297
flags = 1
data = length 3, hash FFFED751
sample 81:
time = 59405
flags = 1
data = length 3, hash FFFED313
sample 82:
time = 59435
flags = 1
data = length 3, hash FFFE9AF1
sample 83:
time = 59691
flags = 1
data = length 3, hash FFFED733
sample 84:
time = 61799
flags = 1
data = length 3, hash FFFECFEF
sample 85:
time = 61799
flags = 1
data = length 3, hash FFFECFEE
tracksEnded = true

View File

@ -0,0 +1,355 @@
seekMap:
isSeekable = false
duration = UNSET TIME
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
total output bytes = 264
sample count = 86
format 0:
sampleMimeType = audio/midi
sample 0:
time = 0
flags = 1
data = length 7, hash C95FA520
sample 1:
time = 0
flags = 1
data = length 5, hash 1CF3DA7
sample 2:
time = 0
flags = 1
data = length 3, hash FFFED75B
sample 3:
time = 2108
flags = 1
data = length 3, hash FFFED448
sample 4:
time = 2148
flags = 1
data = length 3, hash FFFE9730
sample 5:
time = 2276
flags = 1
data = length 3, hash FFFED733
sample 6:
time = 4384
flags = 1
data = length 3, hash FFFECFEF
sample 7:
time = 4384
flags = 1
data = length 3, hash FFFECF7F
sample 8:
time = 4384
flags = 1
data = length 3, hash FFFED751
sample 9:
time = 6492
flags = 1
data = length 3, hash FFFED312
sample 10:
time = 6522
flags = 1
data = length 3, hash FFFE9730
sample 11:
time = 6650
flags = 1
data = length 3, hash FFFED733
sample 12:
time = 8758
flags = 1
data = length 3, hash FFFECFEF
sample 13:
time = 8758
flags = 1
data = length 3, hash FFFECF7F
sample 14:
time = 8758
flags = 1
data = length 3, hash FFFED839
sample 15:
time = 10873
flags = 1
data = length 3, hash FFFED4E3
sample 16:
time = 10918
flags = 1
data = length 3, hash FFFE9730
sample 17:
time = 11046
flags = 1
data = length 3, hash FFFED80C
sample 18:
time = 13161
flags = 1
data = length 3, hash FFFECFEF
sample 19:
time = 13161
flags = 1
data = length 3, hash FFFECF7F
sample 20:
time = 13161
flags = 1
data = length 3, hash FFFED83E
sample 21:
time = 15276
flags = 1
data = length 3, hash FFFED57E
sample 22:
time = 15326
flags = 1
data = length 3, hash FFFE9730
sample 23:
time = 15454
flags = 1
data = length 3, hash FFFED80C
sample 24:
time = 17569
flags = 1
data = length 3, hash FFFECFEF
sample 25:
time = 17569
flags = 1
data = length 3, hash FFFECF7F
sample 26:
time = 17569
flags = 1
data = length 3, hash FFFED877
sample 27:
time = 19686
flags = 1
data = length 3, hash FFFED4E3
sample 28:
time = 19731
flags = 1
data = length 3, hash FFFE9730
sample 29:
time = 19859
flags = 1
data = length 3, hash FFFED84A
sample 30:
time = 21976
flags = 1
data = length 3, hash FFFECFEF
sample 31:
time = 21976
flags = 1
data = length 3, hash FFFECF7F
sample 32:
time = 21976
flags = 1
data = length 3, hash FFFED87C
sample 33:
time = 24093
flags = 1
data = length 3, hash FFFED57E
sample 34:
time = 24143
flags = 1
data = length 3, hash FFFE9730
sample 35:
time = 24271
flags = 1
data = length 3, hash FFFED84A
sample 36:
time = 26388
flags = 1
data = length 3, hash FFFECFEF
sample 37:
time = 26388
flags = 1
data = length 3, hash FFFECF7F
sample 38:
time = 26388
flags = 1
data = length 3, hash FFFED82F
sample 39:
time = 28503
flags = 1
data = length 3, hash FFFED3AE
sample 40:
time = 28538
flags = 1
data = length 3, hash FFFE9AF1
sample 41:
time = 28794
flags = 1
data = length 3, hash FFFED80C
sample 42:
time = 30909
flags = 1
data = length 3, hash FFFECFEF
sample 43:
time = 30909
flags = 1
data = length 3, hash FFFECF7F
sample 44:
time = 30909
flags = 1
data = length 3, hash FFFED800
sample 45:
time = 33022
flags = 1
data = length 3, hash FFFED57E
sample 46:
time = 33072
flags = 1
data = length 3, hash FFFE9730
sample 47:
time = 33200
flags = 1
data = length 3, hash FFFED7CE
sample 48:
time = 35313
flags = 1
data = length 3, hash FFFECFEF
sample 49:
time = 35313
flags = 1
data = length 3, hash FFFECF7F
sample 50:
time = 35313
flags = 1
data = length 3, hash FFFED7FB
sample 51:
time = 37426
flags = 1
data = length 3, hash FFFED4E3
sample 52:
time = 37471
flags = 1
data = length 3, hash FFFE9730
sample 53:
time = 37599
flags = 1
data = length 3, hash FFFED7CE
sample 54:
time = 39712
flags = 1
data = length 3, hash FFFECFEF
sample 55:
time = 39712
flags = 1
data = length 3, hash FFFECF7F
sample 56:
time = 39712
flags = 1
data = length 3, hash FFFED7E1
sample 57:
time = 41824
flags = 1
data = length 3, hash FFFED63D
sample 58:
time = 41874
flags = 1
data = length 3, hash FFFED73F
sample 59:
time = 41938
flags = 1
data = length 3, hash FFFED7AF
sample 60:
time = 44050
flags = 1
data = length 3, hash FFFED02F
sample 61:
time = 44050
flags = 1
data = length 3, hash FFFED73F
sample 62:
time = 44114
flags = 1
data = length 3, hash FFFED7D7
sample 63:
time = 46226
flags = 1
data = length 3, hash FFFED507
sample 64:
time = 46266
flags = 1
data = length 3, hash FFFED73F
sample 65:
time = 46330
flags = 1
data = length 3, hash FFFED7AF
sample 66:
time = 48442
flags = 1
data = length 3, hash FFFED02F
sample 67:
time = 48442
flags = 1
data = length 3, hash FFFED73F
sample 68:
time = 48506
flags = 1
data = length 3, hash FFFED79E
sample 69:
time = 50616
flags = 1
data = length 3, hash FFFED5A2
sample 70:
time = 50661
flags = 1
data = length 3, hash FFFED73F
sample 71:
time = 50725
flags = 1
data = length 3, hash FFFED771
sample 72:
time = 52835
flags = 1
data = length 3, hash FFFED02F
sample 73:
time = 52835
flags = 1
data = length 3, hash FFFED73F
sample 74:
time = 52899
flags = 1
data = length 3, hash FFFED7A3
sample 75:
time = 55009
flags = 1
data = length 3, hash FFFED63D
sample 76:
time = 55059
flags = 1
data = length 3, hash FFFED73F
sample 77:
time = 55123
flags = 1
data = length 3, hash FFFED771
sample 78:
time = 57233
flags = 1
data = length 3, hash FFFED02F
sample 79:
time = 57233
flags = 1
data = length 3, hash FFFED73F
sample 80:
time = 57297
flags = 1
data = length 3, hash FFFED751
sample 81:
time = 59405
flags = 1
data = length 3, hash FFFED313
sample 82:
time = 59435
flags = 1
data = length 3, hash FFFE9AF1
sample 83:
time = 59691
flags = 1
data = length 3, hash FFFED733
sample 84:
time = 61799
flags = 1
data = length 3, hash FFFECFEF
sample 85:
time = 61799
flags = 1
data = length 3, hash FFFECFEE
tracksEnded = true