Skip to content

Commit 4918f2e

Browse files
committed
MKA : Properly read files whose first Cluster doesn't start at Timestamp 0 [#310]
1 parent b8066fd commit 4918f2e

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

ATL/AudioData/IO/MKA.cs

+12-5
Original file line numberDiff line numberDiff line change
@@ -404,18 +404,25 @@ private bool readPhysicalData(EBMLReader reader)
404404

405405
// Find AudioDataOffset using Clusters' timecodes
406406
reader.seek(segmentOffset);
407-
// Cluster with Timecode 0
407+
// Seek Cluster with Timecode 0
408408
crits = new HashSet<Tuple<long, int>>
409409
{
410410
new Tuple<long, int>(ID_TIMESTAMP, 0), // Timestamp
411411
};
412-
res = reader.seekElement(ID_CLUSTER, crits); // Cluster
412+
res = reader.seekElement(ID_CLUSTER, crits);
413413
if (res != EBMLReader.SeekResult.FOUND_MATCH)
414414
{
415415
LogDelegator.GetLogDelegate()(Log.LV_WARNING, "Couldn't locate Cluster for timestamp 0");
416-
return false;
416+
// Seek first cluster instead
417+
reader.seek(segmentOffset);
418+
if (!reader.seekElement(ID_CLUSTER))
419+
{
420+
LogDelegator.GetLogDelegate()(Log.LV_WARNING, "Couldn't locate any Cluster!");
421+
return false;
422+
}
417423
}
418-
long zeroClusterOffset = reader.Position;
424+
425+
long firstClusterOffset = reader.Position;
419426

420427
long blockAudioSize = -1;
421428
while (-1 == AudioDataOffset)
@@ -440,7 +447,7 @@ private bool readPhysicalData(EBMLReader reader)
440447
else break;
441448
}
442449

443-
reader.seek(zeroClusterOffset);
450+
reader.seek(firstClusterOffset);
444451
while (-1 == AudioDataOffset)
445452
{
446453
if (reader.seekElement(ID_SIMPLEBLOCK)) // SimpleBlock

0 commit comments

Comments
 (0)