summaryrefslogtreecommitdiffstats
path: root/dom/media/encoder/fmp4_muxer/MP4ESDS.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/encoder/fmp4_muxer/MP4ESDS.h')
-rw-r--r--dom/media/encoder/fmp4_muxer/MP4ESDS.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/dom/media/encoder/fmp4_muxer/MP4ESDS.h b/dom/media/encoder/fmp4_muxer/MP4ESDS.h
new file mode 100644
index 000000000..ee91312c1
--- /dev/null
+++ b/dom/media/encoder/fmp4_muxer/MP4ESDS.h
@@ -0,0 +1,87 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
+/* 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/. */
+
+#ifndef MP4ESDS_h_
+#define MP4ESDS_h_
+
+#include "nsTArray.h"
+#include "MuxerOperation.h"
+
+namespace mozilla {
+
+class ISOControl;
+
+/**
+ * ESDS tag
+ */
+#define ESDescrTag 0x03
+
+/**
+ * 14496-1 '8.3.3 ES_Descriptor'.
+ * It will get DecoderConfigDescriptor and SLConfigDescriptor from
+ * AAC CSD data.
+ */
+class ES_Descriptor : public MuxerOperation {
+public:
+ // ISO BMFF members
+ uint8_t tag; // ESDescrTag
+ uint8_t length;
+ uint16_t ES_ID;
+ std::bitset<1> streamDependenceFlag;
+ std::bitset<1> URL_Flag;
+ std::bitset<1> reserved;
+ std::bitset<5> streamPriority;
+
+ nsTArray<uint8_t> DecodeSpecificInfo;
+
+ // MuxerOperation methods
+ nsresult Generate(uint32_t* aBoxSize) override;
+ nsresult Write() override;
+ nsresult Find(const nsACString& aType,
+ nsTArray<RefPtr<MuxerOperation>>& aOperations) override;
+
+ // ES_Descriptor methods
+ ES_Descriptor(ISOControl* aControl);
+ ~ES_Descriptor();
+
+protected:
+ ISOControl* mControl;
+};
+
+// 14496-14 5.6 'Sample Description Boxes'
+// Box type: 'esds'
+class ESDBox : public FullBox {
+public:
+ // ISO BMFF members
+ RefPtr<ES_Descriptor> es_descriptor;
+
+ // MuxerOperation methods
+ nsresult Generate(uint32_t* aBoxSize) override;
+ nsresult Write() override;
+
+ // ESDBox methods
+ ESDBox(ISOControl* aControl);
+ ~ESDBox();
+};
+
+// 14496-14 5.6 'Sample Description Boxes'
+// Box type: 'mp4a'
+class MP4AudioSampleEntry : public AudioSampleEntry {
+public:
+ // ISO BMFF members
+ RefPtr<ESDBox> es;
+
+ // MuxerOperation methods
+ nsresult Generate(uint32_t* aBoxSize) override;
+ nsresult Write() override;
+
+ // MP4AudioSampleEntry methods
+ MP4AudioSampleEntry(ISOControl* aControl);
+ ~MP4AudioSampleEntry();
+};
+
+}
+
+#endif // MP4ESDS_h_