From cb6c66cb97bdfb479d648b8e53cc4516eca7a538 Mon Sep 17 00:00:00 2001 From: Matthew Gregan Date: Mon, 25 Aug 2014 18:05:48 +1200 Subject: [PATCH] Bug 1058418 - Make SBR::GetNextCachedData return a sane value, add more unimplemented function logging in MSE, drop unused mPrincipal from SBR. r=cajbir --- .../media/mediasource/MediaSourceReader.cpp | 2 +- .../media/mediasource/MediaSourceResource.h | 54 +++++++++---------- .../mediasource/SourceBufferResource.cpp | 10 ++-- .../media/mediasource/SourceBufferResource.h | 36 ++++++------- 4 files changed, 47 insertions(+), 55 deletions(-) diff --git a/content/media/mediasource/MediaSourceReader.cpp b/content/media/mediasource/MediaSourceReader.cpp index e57d4b90d02..87080edd140 100644 --- a/content/media/mediasource/MediaSourceReader.cpp +++ b/content/media/mediasource/MediaSourceReader.cpp @@ -346,7 +346,7 @@ MediaSourceReader::CreateSubDecoder(const nsACString& aType) { MOZ_ASSERT(GetTaskQueue()); nsRefPtr decoder = - new SourceBufferDecoder(new SourceBufferResource(nullptr, aType), mDecoder); + new SourceBufferDecoder(new SourceBufferResource(aType), mDecoder); nsRefPtr reader(CreateReaderForType(aType, decoder)); if (!reader) { return nullptr; diff --git a/content/media/mediasource/MediaSourceResource.h b/content/media/mediasource/MediaSourceResource.h index 39f7c6577c9..8c9eba4dcbf 100644 --- a/content/media/mediasource/MediaSourceResource.h +++ b/content/media/mediasource/MediaSourceResource.h @@ -19,7 +19,7 @@ extern PRLogModuleInfo* GetMediaSourceAPILog(); #define MSE_DEBUG(...) #endif -#define UNIMPLEMENTED() MSE_DEBUG("MediaSourceResource(%p): UNIMPLEMENTED FUNCTION at line %d", this, __LINE__) +#define UNIMPLEMENTED() MSE_DEBUG("MediaSourceResource(%p): UNIMPLEMENTED FUNCTION at %s:%d", this, __FILE__, __LINE__) namespace mozilla { @@ -29,30 +29,30 @@ public: MediaSourceResource() {} virtual nsresult Close() MOZ_OVERRIDE { return NS_OK; } - virtual void Suspend(bool aCloseImmediately) MOZ_OVERRIDE {} - virtual void Resume() MOZ_OVERRIDE {} - virtual already_AddRefed GetCurrentPrincipal() MOZ_OVERRIDE { return nullptr; } - virtual bool CanClone() MOZ_OVERRIDE { return false; } - virtual already_AddRefed CloneData(MediaDecoder* aDecoder) MOZ_OVERRIDE { return nullptr; } - virtual void SetReadMode(MediaCacheStream::ReadMode aMode) MOZ_OVERRIDE {} - virtual void SetPlaybackRate(uint32_t aBytesPerSecond) MOZ_OVERRIDE {} - virtual nsresult Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes) MOZ_OVERRIDE { return NS_ERROR_FAILURE; } - virtual nsresult ReadAt(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes) MOZ_OVERRIDE { return NS_ERROR_FAILURE; } - virtual nsresult Seek(int32_t aWhence, int64_t aOffset) MOZ_OVERRIDE { return NS_ERROR_FAILURE; } - virtual void StartSeekingForMetadata() MOZ_OVERRIDE {} - virtual void EndSeekingForMetadata() MOZ_OVERRIDE {} - virtual int64_t Tell() MOZ_OVERRIDE { return -1; } - virtual void Pin() MOZ_OVERRIDE {} - virtual void Unpin() MOZ_OVERRIDE {} - virtual double GetDownloadRate(bool* aIsReliable) MOZ_OVERRIDE { *aIsReliable = false; return 0; } - virtual int64_t GetLength() MOZ_OVERRIDE { return -1; } - virtual int64_t GetNextCachedData(int64_t aOffset) MOZ_OVERRIDE { return aOffset; } - virtual int64_t GetCachedDataEnd(int64_t aOffset) MOZ_OVERRIDE { return GetLength(); } - virtual bool IsDataCachedToEndOfResource(int64_t aOffset) MOZ_OVERRIDE { return false; } - virtual bool IsSuspendedByCache() MOZ_OVERRIDE { return false; } - virtual bool IsSuspended() MOZ_OVERRIDE { return false; } - virtual nsresult ReadFromCache(char* aBuffer, int64_t aOffset, uint32_t aCount) MOZ_OVERRIDE { return NS_ERROR_FAILURE; } - virtual nsresult Open(nsIStreamListener** aStreamListener) MOZ_OVERRIDE { return NS_ERROR_FAILURE; } + virtual void Suspend(bool aCloseImmediately) MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual void Resume() MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual already_AddRefed GetCurrentPrincipal() MOZ_OVERRIDE { UNIMPLEMENTED(); return nullptr; } + virtual bool CanClone() MOZ_OVERRIDE { UNIMPLEMENTED(); return false; } + virtual already_AddRefed CloneData(MediaDecoder* aDecoder) MOZ_OVERRIDE { UNIMPLEMENTED(); return nullptr; } + virtual void SetReadMode(MediaCacheStream::ReadMode aMode) MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual void SetPlaybackRate(uint32_t aBytesPerSecond) MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual nsresult Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes) MOZ_OVERRIDE { UNIMPLEMENTED(); return NS_ERROR_FAILURE; } + virtual nsresult ReadAt(int64_t aOffset, char* aBuffer, uint32_t aCount, uint32_t* aBytes) MOZ_OVERRIDE { UNIMPLEMENTED(); return NS_ERROR_FAILURE; } + virtual nsresult Seek(int32_t aWhence, int64_t aOffset) MOZ_OVERRIDE { UNIMPLEMENTED(); return NS_ERROR_FAILURE; } + virtual void StartSeekingForMetadata() MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual void EndSeekingForMetadata() MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual int64_t Tell() MOZ_OVERRIDE { UNIMPLEMENTED(); return -1; } + virtual void Pin() MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual void Unpin() MOZ_OVERRIDE { UNIMPLEMENTED(); } + virtual double GetDownloadRate(bool* aIsReliable) MOZ_OVERRIDE { UNIMPLEMENTED(); *aIsReliable = false; return 0; } + virtual int64_t GetLength() MOZ_OVERRIDE { UNIMPLEMENTED(); return -1; } + virtual int64_t GetNextCachedData(int64_t aOffset) MOZ_OVERRIDE { UNIMPLEMENTED(); return -1; } + virtual int64_t GetCachedDataEnd(int64_t aOffset) MOZ_OVERRIDE { UNIMPLEMENTED(); return -1; } + virtual bool IsDataCachedToEndOfResource(int64_t aOffset) MOZ_OVERRIDE { UNIMPLEMENTED(); return false; } + virtual bool IsSuspendedByCache() MOZ_OVERRIDE { UNIMPLEMENTED(); return false; } + virtual bool IsSuspended() MOZ_OVERRIDE { UNIMPLEMENTED(); return false; } + virtual nsresult ReadFromCache(char* aBuffer, int64_t aOffset, uint32_t aCount) MOZ_OVERRIDE { UNIMPLEMENTED(); return NS_ERROR_FAILURE; } + virtual nsresult Open(nsIStreamListener** aStreamListener) MOZ_OVERRIDE { UNIMPLEMENTED(); return NS_ERROR_FAILURE; } virtual nsresult GetCachedRanges(nsTArray& aRanges) MOZ_OVERRIDE { @@ -61,8 +61,8 @@ public: return NS_OK; } - virtual bool IsTransportSeekable() MOZ_OVERRIDE { UNIMPLEMENTED(); return true; } - virtual const nsCString& GetContentType() const MOZ_OVERRIDE { UNIMPLEMENTED(); return mType; } + virtual bool IsTransportSeekable() MOZ_OVERRIDE { return true; } + virtual const nsCString& GetContentType() const MOZ_OVERRIDE { return mType; } private: virtual size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const MOZ_OVERRIDE diff --git a/content/media/mediasource/SourceBufferResource.cpp b/content/media/mediasource/SourceBufferResource.cpp index ccc7993e105..009599d9842 100644 --- a/content/media/mediasource/SourceBufferResource.cpp +++ b/content/media/mediasource/SourceBufferResource.cpp @@ -190,17 +190,15 @@ SourceBufferResource::~SourceBufferResource() MOZ_COUNT_DTOR(SourceBufferResource); } -SourceBufferResource::SourceBufferResource(nsIPrincipal* aPrincipal, - const nsACString& aType) - : mPrincipal(aPrincipal) - , mType(aType) +SourceBufferResource::SourceBufferResource(const nsACString& aType) + : mType(aType) , mMonitor("mozilla::SourceBufferResource::mMonitor") , mOffset(0) , mClosed(false) , mEnded(false) { - SBR_DEBUG("SourceBufferResource(%p)::SourceBufferResource(aPrincipal=%p, aType=%s)", - this, aPrincipal, nsCString(aType).get()); + SBR_DEBUG("SourceBufferResource(%p)::SourceBufferResource(aType=%s)", + this, nsCString(aType).get()); MOZ_COUNT_CTOR(SourceBufferResource); } diff --git a/content/media/mediasource/SourceBufferResource.h b/content/media/mediasource/SourceBufferResource.h index 5834fcb134f..a1717df74cf 100644 --- a/content/media/mediasource/SourceBufferResource.h +++ b/content/media/mediasource/SourceBufferResource.h @@ -29,7 +29,7 @@ extern PRLogModuleInfo* GetMediaSourceAPILog(); #define MSE_DEBUG(...) #endif -#define UNIMPLEMENTED() MSE_DEBUG("SourceBufferResource(%p): UNIMPLEMENTED FUNCTION at line %d", this, __LINE__) +#define UNIMPLEMENTED() MSE_DEBUG("SourceBufferResource(%p): UNIMPLEMENTED FUNCTION at %s:%d", this, __FILE__, __LINE__) class nsIStreamListener; @@ -46,23 +46,12 @@ class SourceBuffer; class SourceBufferResource MOZ_FINAL : public MediaResource { public: - SourceBufferResource(nsIPrincipal* aPrincipal, - const nsACString& aType); + SourceBufferResource(const nsACString& aType); virtual nsresult Close() MOZ_OVERRIDE; virtual void Suspend(bool aCloseImmediately) MOZ_OVERRIDE { UNIMPLEMENTED(); } virtual void Resume() MOZ_OVERRIDE { UNIMPLEMENTED(); } - - virtual already_AddRefed GetCurrentPrincipal() MOZ_OVERRIDE - { - return nsCOMPtr(mPrincipal).forget(); - } - - virtual already_AddRefed CloneData(MediaDecoder* aDecoder) MOZ_OVERRIDE - { - UNIMPLEMENTED(); - return nullptr; - } - + virtual already_AddRefed GetCurrentPrincipal() MOZ_OVERRIDE { UNIMPLEMENTED(); return nullptr; } + virtual already_AddRefed CloneData(MediaDecoder* aDecoder) MOZ_OVERRIDE { UNIMPLEMENTED(); return nullptr; } virtual void SetReadMode(MediaCacheStream::ReadMode aMode) MOZ_OVERRIDE { UNIMPLEMENTED(); } virtual void SetPlaybackRate(uint32_t aBytesPerSecond) MOZ_OVERRIDE { UNIMPLEMENTED(); } virtual nsresult Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes) MOZ_OVERRIDE; @@ -75,9 +64,17 @@ public: virtual void Unpin() MOZ_OVERRIDE { UNIMPLEMENTED(); } virtual double GetDownloadRate(bool* aIsReliable) MOZ_OVERRIDE { UNIMPLEMENTED(); *aIsReliable = false; return 0; } virtual int64_t GetLength() MOZ_OVERRIDE { return mInputBuffer.GetLength(); } - virtual int64_t GetNextCachedData(int64_t aOffset) MOZ_OVERRIDE { return GetLength() == aOffset ? -1 : aOffset; } - virtual int64_t GetCachedDataEnd(int64_t aOffset) MOZ_OVERRIDE { return GetLength(); } - virtual bool IsDataCachedToEndOfResource(int64_t aOffset) MOZ_OVERRIDE { UNIMPLEMENTED(); return false; } + virtual int64_t GetNextCachedData(int64_t aOffset) MOZ_OVERRIDE { + MOZ_ASSERT(aOffset >= 0); + if (uint64_t(aOffset) < mInputBuffer.GetOffset()) { + return mInputBuffer.GetOffset(); + } else if (aOffset == GetLength()) { + return -1; + } + return aOffset; + } + virtual int64_t GetCachedDataEnd(int64_t aOffset) MOZ_OVERRIDE { UNIMPLEMENTED(); return -1; } + virtual bool IsDataCachedToEndOfResource(int64_t aOffset) MOZ_OVERRIDE { return false; } virtual bool IsSuspendedByCache() MOZ_OVERRIDE { UNIMPLEMENTED(); return false; } virtual bool IsSuspended() MOZ_OVERRIDE { UNIMPLEMENTED(); return false; } virtual nsresult ReadFromCache(char* aBuffer, int64_t aOffset, uint32_t aCount) MOZ_OVERRIDE; @@ -100,8 +97,6 @@ public: { ReentrantMonitorAutoEnter mon(mMonitor); - // Not owned: - // - mPrincipal size_t size = MediaResource::SizeOfExcludingThis(aMallocSizeOf); size += mType.SizeOfExcludingThisIfUnshared(aMallocSizeOf); size += mInputBuffer.SizeOfExcludingThis(aMallocSizeOf); @@ -129,7 +124,6 @@ private: ~SourceBufferResource(); nsresult SeekInternal(int64_t aOffset); - nsCOMPtr mPrincipal; const nsCString mType; // Provides synchronization between SourceBuffers and InputAdapters.