summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-05-05 23:04:10 +0300
committerMoonchild <moonchild@palemoon.org>2020-05-20 13:47:10 +0000
commit16aaa21930e316a8fb870a2b300b4c1f0899fb10 (patch)
tree40382003defdf9171ee3277b5a2884fbc8964b70
parent6b7997abbe7acb25d77266633db03680f80cb8eb (diff)
downloadUXP-16aaa21930e316a8fb870a2b300b4c1f0899fb10.tar
UXP-16aaa21930e316a8fb870a2b300b4c1f0899fb10.tar.gz
UXP-16aaa21930e316a8fb870a2b300b4c1f0899fb10.tar.lz
UXP-16aaa21930e316a8fb870a2b300b4c1f0899fb10.tar.xz
UXP-16aaa21930e316a8fb870a2b300b4c1f0899fb10.zip
Issue #1536 - Part 3: Parse content to decide whether it's an init segment.
-rw-r--r--dom/media/mediasource/ContainerParser.cpp26
1 files changed, 8 insertions, 18 deletions
diff --git a/dom/media/mediasource/ContainerParser.cpp b/dom/media/mediasource/ContainerParser.cpp
index 628f8d7cd..9711d4fb6 100644
--- a/dom/media/mediasource/ContainerParser.cpp
+++ b/dom/media/mediasource/ContainerParser.cpp
@@ -127,28 +127,18 @@ public:
MediaResult IsInitSegmentPresent(MediaByteBuffer* aData) override
{
ContainerParser::IsInitSegmentPresent(aData);
- // XXX: This is overly primitive, needs to collect data as it's appended
- // to the SB and handle, rather than assuming everything is present in a
- // single aData segment.
- // 0x1a45dfa3 // EBML
- // ...
- // DocType == "webm"
- // ...
- // 0x18538067 // Segment (must be "unknown" size or contain a value large
- // enough to include the Segment Information and Tracks
- // elements that follow)
- // 0x1549a966 // -> Segment Info
- // 0x1654ae6b // -> One or more Tracks
-
- // 0x1a45dfa3 // EBML
if (aData->Length() < 4) {
return NS_ERROR_NOT_AVAILABLE;
}
- if ((*aData)[0] == 0x1a && (*aData)[1] == 0x45 && (*aData)[2] == 0xdf &&
- (*aData)[3] == 0xa3) {
- return NS_OK;
+ WebMBufferedParser parser(0);
+ nsTArray<WebMTimeDataOffset> mapping;
+ ReentrantMonitor dummy("dummy");
+ bool result = parser.Append(aData->Elements(), aData->Length(), mapping,
+ dummy);
+ if (!result) {
+ return MediaResult(NS_ERROR_FAILURE, RESULT_DETAIL("Invalid webm content"));
}
- return MediaResult(NS_ERROR_FAILURE, RESULT_DETAIL("Invalid webm content"));
+ return parser.mInitEndOffset > 0 ? NS_OK : NS_ERROR_NOT_AVAILABLE;
}
MediaResult IsMediaSegmentPresent(MediaByteBuffer* aData) override