Bug 1323152 - protect DurationQueue with lock. r?snorp
Remove an unused class too.
MozReview-Commit-ID: KlUKMIPbMuo
--- a/dom/media/platforms/android/RemoteDataDecoder.cpp
+++ b/dom/media/platforms/android/RemoteDataDecoder.cpp
@@ -94,28 +94,16 @@ public:
{
mDecoderCallback = nullptr;
}
protected:
MediaDataDecoderCallback* mDecoderCallback;
};
-struct SampleTime final
-{
- SampleTime(int64_t aStart, int64_t aDuration)
- : mStart(aStart)
- , mDuration(aDuration)
- {}
-
- int64_t mStart;
- int64_t mDuration;
-};
-
-
class RemoteVideoDecoder final : public RemoteDataDecoder
{
public:
// Hold an output buffer and render it to the surface when the frame is sent to compositor, or
// release it if not presented.
class RenderOrReleaseOutput : public VideoData::Listener
{
public:
@@ -283,39 +271,45 @@ public:
}
bool SupportDecoderRecycling() const override { return mIsCodecSupportAdaptivePlayback; }
private:
class DurationQueue {
public:
+ DurationQueue() : mMutex("Video duration queue") {}
+
void Clear()
{
+ MutexAutoLock lock(mMutex);
mValues.clear();
}
void Put(int64_t aDurationUs)
{
+ MutexAutoLock lock(mMutex);
mValues.emplace_back(aDurationUs);
}
Maybe<int64_t> Get()
{
+ MutexAutoLock lock(mMutex);
if (mValues.empty()) {
return Nothing();
}
auto value = Some(mValues.front());
mValues.pop_front();
return value;
}
private:
+ Mutex mMutex; // To protect mValues.
std::deque<int64_t> mValues;
};
layers::ImageContainer* mImageContainer;
const VideoInfo& mConfig;
RefPtr<AndroidSurfaceTexture> mSurfaceTexture;
DurationQueue mInputDurations;
bool mIsCodecSupportAdaptivePlayback = false;