summaryrefslogtreecommitdiffstats
path: root/dom/media/mediasource/SourceBufferList.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/mediasource/SourceBufferList.h')
-rw-r--r--dom/media/mediasource/SourceBufferList.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/dom/media/mediasource/SourceBufferList.h b/dom/media/mediasource/SourceBufferList.h
new file mode 100644
index 0000000000..3779bf353a
--- /dev/null
+++ b/dom/media/mediasource/SourceBufferList.h
@@ -0,0 +1,110 @@
+/* -*- 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_dom_SourceBufferList_h_
+#define mozilla_dom_SourceBufferList_h_
+
+#include "SourceBuffer.h"
+#include "js/RootingAPI.h"
+#include "mozilla/Assertions.h"
+#include "mozilla/Attributes.h"
+#include "mozilla/DOMEventTargetHelper.h"
+#include "nsCycleCollectionNoteChild.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsISupports.h"
+#include "nsTArray.h"
+
+struct JSContext;
+class JSObject;
+
+namespace mozilla {
+
+template <typename T>
+class AsyncEventRunner;
+
+namespace dom {
+
+class MediaSource;
+
+class SourceBufferList final : public DOMEventTargetHelper {
+ public:
+ /** WebIDL Methods. */
+ SourceBuffer* IndexedGetter(uint32_t aIndex, bool& aFound);
+
+ uint32_t Length();
+
+ IMPL_EVENT_HANDLER(addsourcebuffer);
+ IMPL_EVENT_HANDLER(removesourcebuffer);
+
+ /** End WebIDL methods. */
+
+ NS_DECL_ISUPPORTS_INHERITED
+ NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(SourceBufferList,
+ DOMEventTargetHelper)
+
+ explicit SourceBufferList(MediaSource* aMediaSource);
+
+ MediaSource* GetParentObject() const;
+
+ JSObject* WrapObject(JSContext* aCx,
+ JS::Handle<JSObject*> aGivenProto) override;
+
+ // Append a SourceBuffer and fire "addsourcebuffer" at the list.
+ void Append(SourceBuffer* aSourceBuffer);
+
+ // Remove a SourceBuffer and fire "removesourcebuffer" at the list.
+ void Remove(SourceBuffer* aSourceBuffer);
+
+ // Returns true if aSourceBuffer is present in the list.
+ bool Contains(SourceBuffer* aSourceBuffer);
+
+ // Remove all SourceBuffers and fire a single "removesourcebuffer" at the
+ // list.
+ void Clear();
+
+ // True if list has zero entries.
+ bool IsEmpty();
+
+ // Returns true if updating is true on any SourceBuffers in the list.
+ bool AnyUpdating();
+
+ // Runs the range removal steps from the MSE specification on each
+ // SourceBuffer.
+ void RangeRemoval(double aStart, double aEnd);
+
+ // Mark all SourceBuffers input buffers as ended.
+ void Ended();
+
+ // Returns the highest end time of any of the Sourcebuffers.
+ media::TimeUnit GetHighestBufferedEndTime();
+
+ // Append a SourceBuffer to the list. No event is fired.
+ void AppendSimple(SourceBuffer* aSourceBuffer);
+
+ // Remove all SourceBuffers from mSourceBuffers.
+ // No event is fired and no action is performed on the sourcebuffers.
+ void ClearSimple();
+
+ media::TimeUnit HighestStartTime();
+ media::TimeUnit HighestEndTime();
+
+ private:
+ ~SourceBufferList();
+
+ friend class AsyncEventRunner<SourceBufferList>;
+ void DispatchSimpleEvent(const char* aName);
+ void QueueAsyncSimpleEvent(const char* aName);
+
+ RefPtr<MediaSource> mMediaSource;
+ nsTArray<RefPtr<SourceBuffer> > mSourceBuffers;
+ const RefPtr<AbstractThread> mAbstractMainThread;
+};
+
+} // namespace dom
+
+} // namespace mozilla
+
+#endif /* mozilla_dom_SourceBufferList_h_ */