MockMediaResource.cpp (2367B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=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 #include "MockMediaResource.h" 8 9 #include <sys/stat.h> 10 #include <sys/types.h> 11 12 namespace mozilla { 13 14 MockMediaResource::MockMediaResource(const char* aFileName) 15 : mFileHandle(nullptr), mFileName(aFileName) {} 16 17 nsresult MockMediaResource::Open() { 18 mFileHandle = fopen(mFileName, "rb"); 19 if (mFileHandle == nullptr) { 20 printf_stderr("Can't open %s\n", mFileName); 21 return NS_ERROR_FAILURE; 22 } 23 return NS_OK; 24 } 25 26 MockMediaResource::~MockMediaResource() { 27 if (mFileHandle != nullptr) { 28 fclose(mFileHandle); 29 } 30 } 31 32 nsresult MockMediaResource::ReadAt(int64_t aOffset, char* aBuffer, 33 uint32_t aCount, uint32_t* aBytes) { 34 if (mFileHandle == nullptr) { 35 return NS_ERROR_FAILURE; 36 } 37 38 // Make it fail if we're re-entrant 39 if (mEntry++) { 40 MOZ_ASSERT(false); 41 return NS_ERROR_FAILURE; 42 } 43 44 fseek(mFileHandle, aOffset, SEEK_SET); 45 *aBytes = fread(aBuffer, 1, aCount, mFileHandle); 46 47 mEntry--; 48 49 return ferror(mFileHandle) ? NS_ERROR_FAILURE : NS_OK; 50 } 51 52 int64_t MockMediaResource::GetLength() { 53 if (mFileHandle == nullptr) { 54 return -1; 55 } 56 fseek(mFileHandle, 0, SEEK_END); 57 return ftell(mFileHandle); 58 } 59 60 void MockMediaResource::MockClearBufferedRanges() { mRanges.Clear(); } 61 62 void MockMediaResource::MockAddBufferedRange(int64_t aStart, int64_t aEnd) { 63 mRanges += MediaByteRange(aStart, aEnd); 64 } 65 66 int64_t MockMediaResource::GetNextCachedData(int64_t aOffset) { 67 if (!aOffset) { 68 return mRanges.Length() ? mRanges[0].mStart : -1; 69 } 70 for (size_t i = 0; i < mRanges.Length(); i++) { 71 if (aOffset == mRanges[i].mStart) { 72 ++i; 73 return i < mRanges.Length() ? mRanges[i].mStart : -1; 74 } 75 } 76 return -1; 77 } 78 79 int64_t MockMediaResource::GetCachedDataEnd(int64_t aOffset) { 80 for (size_t i = 0; i < mRanges.Length(); i++) { 81 if (aOffset == mRanges[i].mStart) { 82 return mRanges[i].mEnd; 83 } 84 } 85 return aOffset; 86 } 87 88 nsresult MockMediaResource::GetCachedRanges(MediaByteRangeSet& aRanges) { 89 aRanges = mRanges; 90 return NS_OK; 91 } 92 93 } // namespace mozilla