summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/binding/SinfParser.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /media/libstagefright/binding/SinfParser.cpp
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'media/libstagefright/binding/SinfParser.cpp')
-rw-r--r--media/libstagefright/binding/SinfParser.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/media/libstagefright/binding/SinfParser.cpp b/media/libstagefright/binding/SinfParser.cpp
new file mode 100644
index 000000000..5cf3aa553
--- /dev/null
+++ b/media/libstagefright/binding/SinfParser.cpp
@@ -0,0 +1,72 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/Unused.h"
+#include "mp4_demuxer/SinfParser.h"
+#include "mp4_demuxer/AtomType.h"
+#include "mp4_demuxer/Box.h"
+
+namespace mp4_demuxer {
+
+Sinf::Sinf(Box& aBox)
+ : mDefaultIVSize(0)
+ , mDefaultEncryptionType()
+{
+ SinfParser parser(aBox);
+ if (parser.GetSinf().IsValid()) {
+ *this = parser.GetSinf();
+ }
+}
+
+SinfParser::SinfParser(Box& aBox)
+{
+ for (Box box = aBox.FirstChild(); box.IsAvailable(); box = box.Next()) {
+ if (box.IsType("schm")) {
+ ParseSchm(box);
+ } else if (box.IsType("schi")) {
+ ParseSchi(box);
+ }
+ }
+}
+
+void
+SinfParser::ParseSchm(Box& aBox)
+{
+ BoxReader reader(aBox);
+
+ if (reader->Remaining() < 8) {
+ return;
+ }
+
+ mozilla::Unused << reader->ReadU32(); // flags -- ignore
+ mSinf.mDefaultEncryptionType = reader->ReadU32();
+}
+
+void
+SinfParser::ParseSchi(Box& aBox)
+{
+ for (Box box = aBox.FirstChild(); box.IsAvailable(); box = box.Next()) {
+ if (box.IsType("tenc")) {
+ ParseTenc(box);
+ }
+ }
+}
+
+void
+SinfParser::ParseTenc(Box& aBox)
+{
+ BoxReader reader(aBox);
+
+ if (reader->Remaining() < 24) {
+ return;
+ }
+
+ mozilla::Unused << reader->ReadU32(); // flags -- ignore
+
+ uint32_t isEncrypted = reader->ReadU24();
+ mSinf.mDefaultIVSize = reader->ReadU8();
+ memcpy(mSinf.mDefaultKeyID, reader->Read(16), 16);
+}
+
+}