summaryrefslogtreecommitdiffstats
path: root/dom/media/mediasource/SourceBufferAttributes.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/mediasource/SourceBufferAttributes.h')
-rw-r--r--dom/media/mediasource/SourceBufferAttributes.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/dom/media/mediasource/SourceBufferAttributes.h b/dom/media/mediasource/SourceBufferAttributes.h
new file mode 100644
index 000000000..0af80a4fe
--- /dev/null
+++ b/dom/media/mediasource/SourceBufferAttributes.h
@@ -0,0 +1,157 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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 mozilla_SourceBufferAttributes_h_
+#define mozilla_SourceBufferAttributes_h_
+
+#include "TimeUnits.h"
+#include "mozilla/dom/SourceBufferBinding.h"
+#include "mozilla/Maybe.h"
+
+namespace mozilla {
+
+class SourceBufferAttributes {
+public:
+
+ // Current state as per Segment Parser Loop Algorithm
+ // http://w3c.github.io/media-source/index.html#sourcebuffer-segment-parser-loop
+ enum class AppendState
+ {
+ WAITING_FOR_SEGMENT,
+ PARSING_INIT_SEGMENT,
+ PARSING_MEDIA_SEGMENT,
+ };
+
+ explicit SourceBufferAttributes(bool aGenerateTimestamp)
+ : mGenerateTimestamps(aGenerateTimestamp)
+ , mAppendWindowStart(0)
+ , mAppendWindowEnd(PositiveInfinity<double>())
+ , mAppendMode(dom::SourceBufferAppendMode::Segments)
+ , mApparentTimestampOffset(0)
+ , mAppendState(AppendState::WAITING_FOR_SEGMENT)
+ {}
+
+ SourceBufferAttributes(const SourceBufferAttributes& aOther) = default;
+
+ double GetAppendWindowStart() const
+ {
+ return mAppendWindowStart;
+ }
+
+ double GetAppendWindowEnd() const
+ {
+ return mAppendWindowEnd;
+ }
+
+ void SetAppendWindowStart(double aWindowStart)
+ {
+ mAppendWindowStart = aWindowStart;
+ }
+
+ void SetAppendWindowEnd(double aWindowEnd)
+ {
+ mAppendWindowEnd = aWindowEnd;
+ }
+
+ double GetApparentTimestampOffset() const
+ {
+ return mApparentTimestampOffset;
+ }
+
+ void SetApparentTimestampOffset(double aTimestampOffset)
+ {
+ mApparentTimestampOffset = aTimestampOffset;
+ mTimestampOffset = media::TimeUnit::FromSeconds(aTimestampOffset);
+ }
+
+ media::TimeUnit GetTimestampOffset() const
+ {
+ return mTimestampOffset;
+ }
+
+ void SetTimestampOffset(const media::TimeUnit& aTimestampOffset)
+ {
+ mTimestampOffset = aTimestampOffset;
+ mApparentTimestampOffset = aTimestampOffset.ToSeconds();
+ }
+
+ dom::SourceBufferAppendMode GetAppendMode() const
+ {
+ return mAppendMode;
+ }
+
+ void SetAppendMode(dom::SourceBufferAppendMode aAppendMode)
+ {
+ mAppendMode = aAppendMode;
+ }
+
+ void SetGroupStartTimestamp(const media::TimeUnit& aGroupStartTimestamp)
+ {
+ mGroupStartTimestamp = Some(aGroupStartTimestamp);
+ }
+
+ media::TimeUnit GetGroupStartTimestamp() const
+ {
+ return mGroupStartTimestamp.ref();
+ }
+
+ bool HaveGroupStartTimestamp() const
+ {
+ return mGroupStartTimestamp.isSome();
+ }
+
+ void ResetGroupStartTimestamp()
+ {
+ mGroupStartTimestamp.reset();
+ }
+
+ void RestartGroupStartTimestamp()
+ {
+ mGroupStartTimestamp = Some(mGroupEndTimestamp);
+ }
+
+ media::TimeUnit GetGroupEndTimestamp() const
+ {
+ return mGroupEndTimestamp;
+ }
+
+ void SetGroupEndTimestamp(const media::TimeUnit& aGroupEndTimestamp)
+ {
+ mGroupEndTimestamp = aGroupEndTimestamp;
+ }
+
+ AppendState GetAppendState() const
+ {
+ return mAppendState;
+ }
+
+ void SetAppendState(AppendState aState)
+ {
+ mAppendState = aState;
+ }
+
+ // mGenerateTimestamp isn't mutable once the source buffer has been constructed
+ bool mGenerateTimestamps;
+
+ SourceBufferAttributes& operator=(const SourceBufferAttributes& aOther) = default;
+
+private:
+ SourceBufferAttributes() = delete;
+
+ double mAppendWindowStart;
+ double mAppendWindowEnd;
+ dom::SourceBufferAppendMode mAppendMode;
+ double mApparentTimestampOffset;
+ media::TimeUnit mTimestampOffset;
+ Maybe<media::TimeUnit> mGroupStartTimestamp;
+ media::TimeUnit mGroupEndTimestamp;
+ // The current append state as per https://w3c.github.io/media-source/#sourcebuffer-append-state
+ AppendState mAppendState;
+};
+
+} // end namespace mozilla
+
+#endif /* mozilla_SourceBufferAttributes_h_ */