BufferStream.cpp (1804B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #include "BufferStream.h" 6 7 #include <algorithm> 8 9 #include "MediaData.h" 10 #include "MediaResource.h" 11 12 namespace mozilla { 13 14 BufferStream::BufferStream() 15 : mStartOffset(0), mData(new mozilla::MediaByteBuffer) {} 16 17 BufferStream::BufferStream(mozilla::MediaByteBuffer* aBuffer) 18 : mStartOffset(0), mData(aBuffer) {} 19 20 BufferStream::~BufferStream() = default; 21 22 /*virtual*/ 23 nsresult BufferStream::ReadAt(int64_t aOffset, void* aData, size_t aLength, 24 size_t* aBytesRead) { 25 if (aOffset < mStartOffset || aOffset > mStartOffset + mData->Length()) { 26 return NS_ERROR_DOM_MEDIA_RANGE_ERR; 27 } 28 *aBytesRead = 29 std::min(aLength, size_t(mStartOffset + mData->Length() - aOffset)); 30 memcpy(aData, mData->Elements() + aOffset - mStartOffset, *aBytesRead); 31 return NS_OK; 32 } 33 34 /*virtual*/ 35 nsresult BufferStream::CachedReadAt(int64_t aOffset, void* aData, 36 size_t aLength, size_t* aBytesRead) { 37 return ReadAt(aOffset, aData, aLength, aBytesRead); 38 } 39 40 /*virtual*/ 41 bool BufferStream::Length(int64_t* aLength) { 42 *aLength = mStartOffset + mData->Length(); 43 return true; 44 } 45 46 /* virtual */ 47 void BufferStream::DiscardBefore(int64_t aOffset) { 48 if (aOffset > mStartOffset) { 49 mData->RemoveElementsAt(0, aOffset - mStartOffset); 50 mStartOffset = aOffset; 51 } 52 } 53 54 bool BufferStream::AppendBytes(const uint8_t* aData, size_t aLength) { 55 return mData->AppendElements(aData, aLength, fallible); 56 } 57 58 MediaByteRange BufferStream::GetByteRange() { 59 return MediaByteRange(mStartOffset, mStartOffset + mData->Length()); 60 } 61 } // namespace mozilla