Commit c5911a29 authored by John Lin's avatar John Lin
Browse files

Bug 1832832 - protect encoder accesses in Java callbacks. r=media-playback-reviewers,alwu a=pascalc

parent 6362b5d8
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -505,8 +505,11 @@ void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleInput(
template <typename ConfigType>
void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleOutput(
    java::Sample::Param aSample, java::SampleBuffer::Param aBuffer) {
  MutexAutoLock lock(mMutex);
  if (mEncoder) {
    mEncoder->ProcessOutput(std::move(aSample), std::move(aBuffer));
  }
}

template <typename ConfigType>
void AndroidDataEncoder<ConfigType>::CallbacksSupport::
@@ -515,8 +518,11 @@ void AndroidDataEncoder<ConfigType>::CallbacksSupport::
template <typename ConfigType>
void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleError(
    const MediaResult& aError) {
  MutexAutoLock lock(mMutex);
  if (mEncoder) {
    mEncoder->Error(aError);
  }
}

// Force compiler to generate code.
template class AndroidDataEncoder<MediaDataEncoder::H264Config>;
+12 −2
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@

#include "mozilla/Maybe.h"
#include "mozilla/Monitor.h"
#include "mozilla/Mutex.h"

namespace mozilla {

@@ -36,7 +37,15 @@ class AndroidDataEncoder final : public MediaDataEncoder {
  class CallbacksSupport final : public JavaCallbacksSupport {
   public:
    explicit CallbacksSupport(AndroidDataEncoder* aEncoder)
        : mEncoder(aEncoder) {}
        : mMutex("AndroidDataEncoder::CallbacksSupport") {
      MutexAutoLock lock(mMutex);
      mEncoder = aEncoder;
    }

    ~CallbacksSupport() {
      MutexAutoLock lock(mMutex);
      mEncoder = nullptr;
    }

    void HandleInput(int64_t aTimestamp, bool aProcessed) override;
    void HandleOutput(java::Sample::Param aSample,
@@ -46,7 +55,8 @@ class AndroidDataEncoder final : public MediaDataEncoder {
    void HandleError(const MediaResult& aError) override;

   private:
    AndroidDataEncoder* mEncoder;
    Mutex mMutex;
    AndroidDataEncoder* mEncoder MOZ_GUARDED_BY(mMutex);
  };
  friend class CallbacksSupport;