Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef MOZILLA_MEDIASOURCERESOURCE_H_
8 : #define MOZILLA_MEDIASOURCERESOURCE_H_
9 :
10 : #include "MediaResource.h"
11 : #include "mozilla/Monitor.h"
12 : #include "mozilla/Logging.h"
13 :
14 : extern mozilla::LogModule* GetMediaSourceLog();
15 :
16 : #define MSE_DEBUG(arg, ...) \
17 : MOZ_LOG( \
18 : GetMediaSourceLog(), \
19 : mozilla::LogLevel::Debug, \
20 : ("MediaSourceResource(%p)::%s: " arg, this, __func__, ##__VA_ARGS__))
21 :
22 : #define UNIMPLEMENTED() MSE_DEBUG("UNIMPLEMENTED FUNCTION at %s:%d", __FILE__, __LINE__)
23 :
24 : namespace mozilla {
25 :
26 0 : class MediaSourceResource final : public MediaResource
27 : {
28 : public:
29 0 : explicit MediaSourceResource(nsIPrincipal* aPrincipal = nullptr)
30 0 : : mPrincipal(aPrincipal)
31 : , mMonitor("MediaSourceResource")
32 0 : , mEnded(false)
33 0 : {}
34 :
35 0 : nsresult Close() override { return NS_OK; }
36 0 : void Suspend(bool aCloseImmediately) override { UNIMPLEMENTED(); }
37 0 : void Resume() override { UNIMPLEMENTED(); }
38 0 : void SetReadMode(MediaCacheStream::ReadMode aMode) override { UNIMPLEMENTED(); }
39 0 : void SetPlaybackRate(uint32_t aBytesPerSecond) override { UNIMPLEMENTED(); }
40 0 : nsresult ReadAt(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes) override { UNIMPLEMENTED(); return NS_ERROR_FAILURE; }
41 0 : bool ShouldCacheReads() override { UNIMPLEMENTED(); return false; }
42 0 : int64_t Tell() override { UNIMPLEMENTED(); return -1; }
43 0 : void Pin() override { UNIMPLEMENTED(); }
44 0 : void Unpin() override { UNIMPLEMENTED(); }
45 0 : double GetDownloadRate(bool* aIsReliable) override { UNIMPLEMENTED(); *aIsReliable = false; return 0; }
46 0 : int64_t GetLength() override { UNIMPLEMENTED(); return -1; }
47 0 : int64_t GetNextCachedData(int64_t aOffset) override { UNIMPLEMENTED(); return -1; }
48 0 : int64_t GetCachedDataEnd(int64_t aOffset) override { UNIMPLEMENTED(); return -1; }
49 0 : bool IsDataCachedToEndOfResource(int64_t aOffset) override { UNIMPLEMENTED(); return false; }
50 0 : bool IsSuspendedByCache() override { UNIMPLEMENTED(); return false; }
51 0 : bool IsSuspended() override { UNIMPLEMENTED(); return false; }
52 0 : nsresult ReadFromCache(char* aBuffer, int64_t aOffset, uint32_t aCount) override { UNIMPLEMENTED(); return NS_ERROR_FAILURE; }
53 0 : nsresult Open(nsIStreamListener** aStreamListener) override { UNIMPLEMENTED(); return NS_ERROR_FAILURE; }
54 :
55 0 : already_AddRefed<nsIPrincipal> GetCurrentPrincipal() override
56 : {
57 0 : return RefPtr<nsIPrincipal>(mPrincipal).forget();
58 : }
59 :
60 0 : nsresult GetCachedRanges(MediaByteRangeSet& aRanges) override
61 : {
62 0 : UNIMPLEMENTED();
63 0 : aRanges += MediaByteRange(0, GetLength());
64 0 : return NS_OK;
65 : }
66 :
67 0 : bool IsTransportSeekable() override { return true; }
68 :
69 0 : bool IsLiveStream() override
70 : {
71 0 : MonitorAutoLock mon(mMonitor);
72 0 : return !mEnded;
73 : }
74 0 : void SetEnded(bool aEnded)
75 : {
76 0 : MonitorAutoLock mon(mMonitor);
77 0 : mEnded = aEnded;
78 0 : }
79 :
80 0 : bool IsExpectingMoreData() override
81 : {
82 0 : MonitorAutoLock mon(mMonitor);
83 0 : return !mEnded;
84 : }
85 :
86 : private:
87 0 : size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override
88 : {
89 0 : size_t size = MediaResource::SizeOfExcludingThis(aMallocSizeOf);
90 0 : return size;
91 : }
92 :
93 0 : size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override
94 : {
95 0 : return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
96 : }
97 :
98 : RefPtr<nsIPrincipal> mPrincipal;
99 : Monitor mMonitor;
100 : bool mEnded; // protected by mMonitor
101 : };
102 :
103 : } // namespace mozilla
104 :
105 : #undef MSE_DEBUG
106 : #undef UNIMPLEMENTED
107 :
108 : #endif /* MOZILLA_MEDIASOURCERESOURCE_H_ */
|