/src/mozilla-central/dom/media/CloneableWithRangeMediaResource.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* vim:set ts=2 sw=2 sts=2 et cindent: */ |
2 | | /* This Source Code Form is subject to the terms of the Mozilla Public |
3 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
4 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
5 | | |
6 | | #ifndef mozilla_dom_media_CloneableWithRangeMediaResource_h |
7 | | #define mozilla_dom_media_CloneableWithRangeMediaResource_h |
8 | | |
9 | | #include "BaseMediaResource.h" |
10 | | #include "nsICloneableInputStream.h" |
11 | | |
12 | | namespace mozilla { |
13 | | |
14 | | class CloneableWithRangeMediaResource : public BaseMediaResource |
15 | | { |
16 | | public: |
17 | | CloneableWithRangeMediaResource(MediaResourceCallback* aCallback, |
18 | | nsIChannel* aChannel, |
19 | | nsIURI* aURI, |
20 | | nsIInputStream* aStream, |
21 | | uint64_t aSize) |
22 | | : BaseMediaResource(aCallback, aChannel, aURI) |
23 | | , mStream(do_QueryInterface(aStream)) |
24 | | , mSize(aSize) |
25 | | , mInitialized(false) |
26 | 0 | { |
27 | 0 | MOZ_ASSERT(mStream); |
28 | 0 | } |
29 | | |
30 | | ~CloneableWithRangeMediaResource() |
31 | 0 | { |
32 | 0 | } |
33 | | |
34 | | // Main thread |
35 | | nsresult Open(nsIStreamListener** aStreamListener) override; |
36 | | nsresult Close() override; |
37 | 0 | void Suspend(bool aCloseImmediately) override {} |
38 | 0 | void Resume() override {} |
39 | | already_AddRefed<nsIPrincipal> GetCurrentPrincipal() override; |
40 | | nsresult ReadFromCache(char* aBuffer, int64_t aOffset, uint32_t aCount) override; |
41 | | |
42 | | // These methods are called off the main thread. |
43 | | |
44 | | // Other thread |
45 | 0 | void SetReadMode(MediaCacheStream::ReadMode aMode) override {} |
46 | 0 | void SetPlaybackRate(uint32_t aBytesPerSecond) override {} |
47 | | nsresult ReadAt(int64_t aOffset, char* aBuffer, |
48 | | uint32_t aCount, uint32_t* aBytes) override; |
49 | | // (Probably) file-based, caching recommended. |
50 | 0 | bool ShouldCacheReads() override { return true; } |
51 | | |
52 | | // Any thread |
53 | 0 | void Pin() override {} |
54 | 0 | void Unpin() override {} |
55 | | |
56 | | double GetDownloadRate(bool* aIsReliable) override |
57 | 0 | { |
58 | 0 | // The data's all already here |
59 | 0 | *aIsReliable = true; |
60 | 0 | return 100*1024*1024; // arbitray, use 100MB/s |
61 | 0 | } |
62 | | |
63 | | int64_t GetLength() override |
64 | 0 | { |
65 | 0 | MaybeInitialize(); |
66 | 0 | return mSize; |
67 | 0 | } |
68 | | |
69 | | int64_t GetNextCachedData(int64_t aOffset) override |
70 | 0 | { |
71 | 0 | MaybeInitialize(); |
72 | 0 | return (aOffset < (int64_t)mSize) ? aOffset : -1; |
73 | 0 | } |
74 | | |
75 | | int64_t GetCachedDataEnd(int64_t aOffset) override |
76 | 0 | { |
77 | 0 | MaybeInitialize(); |
78 | 0 | return std::max(aOffset, (int64_t)mSize); |
79 | 0 | } |
80 | | |
81 | 0 | bool IsDataCachedToEndOfResource(int64_t aOffset) override { return true; } |
82 | 0 | bool IsTransportSeekable() override { return true; } |
83 | | |
84 | | nsresult GetCachedRanges(MediaByteRangeSet& aRanges) override; |
85 | | |
86 | | size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override |
87 | 0 | { |
88 | 0 | return BaseMediaResource::SizeOfExcludingThis(aMallocSizeOf); |
89 | 0 | } |
90 | | |
91 | | size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override |
92 | 0 | { |
93 | 0 | return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); |
94 | 0 | } |
95 | | |
96 | | private: |
97 | | void MaybeInitialize(); |
98 | | |
99 | | // Input stream for the media data. This can be used from any |
100 | | // thread. |
101 | | nsCOMPtr<nsICloneableInputStreamWithRange> mStream; |
102 | | |
103 | | // The stream size. |
104 | | uint64_t mSize; |
105 | | |
106 | | bool mInitialized; |
107 | | }; |
108 | | |
109 | | } // namespace mozilla |
110 | | |
111 | | #endif // mozilla_dom_media_CloneableWithRangeMediaResource_h |