/usr/include/thunderbird/mozilla/dom/SourceBuffer.h is in thunderbird-dev 1:52.8.0-1~deb8u1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | /* -*- 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_SourceBuffer_h_
#define mozilla_dom_SourceBuffer_h_
#include "mozilla/MozPromise.h"
#include "MediaSource.h"
#include "js/RootingAPI.h"
#include "mozilla/Assertions.h"
#include "mozilla/Atomics.h"
#include "mozilla/Attributes.h"
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/dom/SourceBufferBinding.h"
#include "mozilla/dom/TypedArray.h"
#include "mozilla/mozalloc.h"
#include "nsCOMPtr.h"
#include "nsCycleCollectionNoteChild.h"
#include "nsCycleCollectionParticipant.h"
#include "nsISupports.h"
#include "nsString.h"
#include "nscore.h"
#include "TrackBuffersManager.h"
#include "SourceBufferTask.h"
class JSObject;
struct JSContext;
namespace mozilla {
class ErrorResult;
class MediaByteBuffer;
template <typename T> class AsyncEventRunner;
namespace dom {
class TimeRanges;
class SourceBuffer final : public DOMEventTargetHelper
{
public:
/** WebIDL Methods. */
SourceBufferAppendMode Mode() const
{
return mCurrentAttributes.GetAppendMode();
}
void SetMode(SourceBufferAppendMode aMode, ErrorResult& aRv);
bool Updating() const
{
return mUpdating;
}
TimeRanges* GetBuffered(ErrorResult& aRv);
media::TimeIntervals GetTimeIntervals();
double TimestampOffset() const
{
return mCurrentAttributes.GetApparentTimestampOffset();
}
void SetTimestampOffset(double aTimestampOffset, ErrorResult& aRv);
double AppendWindowStart() const
{
return mCurrentAttributes.GetAppendWindowStart();
}
void SetAppendWindowStart(double aAppendWindowStart, ErrorResult& aRv);
double AppendWindowEnd() const
{
return mCurrentAttributes.GetAppendWindowEnd();
}
void SetAppendWindowEnd(double aAppendWindowEnd, ErrorResult& aRv);
void AppendBuffer(const ArrayBuffer& aData, ErrorResult& aRv);
void AppendBuffer(const ArrayBufferView& aData, ErrorResult& aRv);
void Abort(ErrorResult& aRv);
void AbortBufferAppend();
void Remove(double aStart, double aEnd, ErrorResult& aRv);
IMPL_EVENT_HANDLER(updatestart);
IMPL_EVENT_HANDLER(update);
IMPL_EVENT_HANDLER(updateend);
IMPL_EVENT_HANDLER(error);
IMPL_EVENT_HANDLER(abort);
/** End WebIDL Methods. */
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(SourceBuffer, DOMEventTargetHelper)
SourceBuffer(MediaSource* aMediaSource, const nsACString& aType);
MediaSource* GetParentObject() const;
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
// Notify the SourceBuffer that it has been detached from the
// MediaSource's sourceBuffer list.
void Detach();
bool IsAttached() const
{
return mMediaSource != nullptr;
}
void Ended();
double GetBufferedStart();
double GetBufferedEnd();
double HighestStartTime();
double HighestEndTime();
// Runs the range removal algorithm as defined by the MSE spec.
void RangeRemoval(double aStart, double aEnd);
bool IsActive() const
{
return mActive;
}
private:
~SourceBuffer();
friend class AsyncEventRunner<SourceBuffer>;
friend class BufferAppendRunnable;
friend class mozilla::TrackBuffersManager;
void DispatchSimpleEvent(const char* aName);
void QueueAsyncSimpleEvent(const char* aName);
// Update mUpdating and fire the appropriate events.
void StartUpdating();
void StopUpdating();
void AbortUpdating();
void ResetParserState();
// If the media segment contains data beyond the current duration,
// then run the duration change algorithm with new duration set to the
// maximum of the current duration and the group end timestamp.
void CheckEndTime();
// Shared implementation of AppendBuffer overloads.
void AppendData(const uint8_t* aData, uint32_t aLength, ErrorResult& aRv);
// Implement the "Append Error Algorithm".
// Will call endOfStream() with "decode" error if aDecodeError is true.
// 3.5.3 Append Error Algorithm
// http://w3c.github.io/media-source/#sourcebuffer-append-error
void AppendError(const MediaResult& aDecodeError);
// Implements the "Prepare Append Algorithm". Returns MediaByteBuffer object
// on success or nullptr (with aRv set) on error.
already_AddRefed<MediaByteBuffer> PrepareAppend(const uint8_t* aData,
uint32_t aLength,
ErrorResult& aRv);
void AppendDataCompletedWithSuccess(SourceBufferTask::AppendBufferResult aResult);
void AppendDataErrored(const MediaResult& aError);
RefPtr<MediaSource> mMediaSource;
RefPtr<TrackBuffersManager> mTrackBuffersManager;
SourceBufferAttributes mCurrentAttributes;
bool mUpdating;
mozilla::Atomic<bool> mActive;
MozPromiseRequestHolder<SourceBufferTask::AppendPromise> mPendingAppend;
MozPromiseRequestHolder<SourceBufferTask::RangeRemovalPromise> mPendingRemoval;
const nsCString mType;
RefPtr<TimeRanges> mBuffered;
};
} // namespace dom
} // namespace mozilla
#endif /* mozilla_dom_SourceBuffer_h_ */
|