mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-26 02:17:34 +09:00
Merge remote-tracking branch 'origin/tracking' into custom
This commit is contained in:
commit
0c6e087291
55 changed files with 320 additions and 34 deletions
|
|
@ -16,7 +16,9 @@
|
|||
#include "nsDataHashtable.h"
|
||||
#include "nsThreadUtils.h"
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
class GMPCrashHelper;
|
||||
#endif
|
||||
|
||||
namespace mozilla
|
||||
{
|
||||
|
|
@ -110,7 +112,9 @@ public:
|
|||
// Set by Reader if the current audio track can be offloaded
|
||||
virtual void SetPlatformCanOffloadAudio(bool aCanOffloadAudio) {}
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
virtual already_AddRefed<GMPCrashHelper> GetCrashHelper() { return nullptr; }
|
||||
#endif
|
||||
|
||||
// Stack based class to assist in notifying the frame statistics of
|
||||
// parsed and decoded frames. Use inside video demux & decode functions
|
||||
|
|
|
|||
|
|
@ -845,6 +845,7 @@ DecoderDoctorDiagnostics::GetDescription() const
|
|||
if (mFFmpegFailedToLoad) {
|
||||
s += ", Linux platform decoder failed to load";
|
||||
}
|
||||
#ifdef MOZ_GMP
|
||||
if (mGMPPDMFailedToStartup) {
|
||||
s += ", GMP PDM failed to startup";
|
||||
} else if (!mGMP.IsEmpty()) {
|
||||
|
|
@ -852,6 +853,7 @@ DecoderDoctorDiagnostics::GetDescription() const
|
|||
s += mGMP;
|
||||
s += "'";
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case eMediaKeySystemAccessRequest:
|
||||
s = "key system='";
|
||||
|
|
|
|||
|
|
@ -78,14 +78,18 @@ public:
|
|||
void SetFFmpegFailedToLoad() { mFFmpegFailedToLoad = true; }
|
||||
bool DidFFmpegFailToLoad() const { return mFFmpegFailedToLoad; }
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
void SetGMPPDMFailedToStartup() { mGMPPDMFailedToStartup = true; }
|
||||
bool DidGMPPDMFailToStartup() const { return mGMPPDMFailedToStartup; }
|
||||
#endif
|
||||
|
||||
void SetVideoNotSupported() { mVideoNotSupported = true; }
|
||||
void SetAudioNotSupported() { mAudioNotSupported = true; }
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
void SetGMP(const nsACString& aGMP) { mGMP = aGMP; }
|
||||
const nsACString& GMP() const { return mGMP; }
|
||||
#endif
|
||||
|
||||
const nsAString& KeySystem() const { return mKeySystem; }
|
||||
bool IsKeySystemSupported() const { return mIsKeySystemSupported; }
|
||||
|
|
@ -119,10 +123,14 @@ private:
|
|||
|
||||
bool mWMFFailedToLoad = false;
|
||||
bool mFFmpegFailedToLoad = false;
|
||||
#ifdef MOZ_GMP
|
||||
bool mGMPPDMFailedToStartup = false;
|
||||
#endif
|
||||
bool mVideoNotSupported = false;
|
||||
bool mAudioNotSupported = false;
|
||||
#ifdef MOZ_GMP
|
||||
nsCString mGMP;
|
||||
#endif
|
||||
|
||||
nsString mKeySystem;
|
||||
bool mIsKeySystemSupported = false;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,9 @@
|
|||
#include "mozilla/dom/VideoTrack.h"
|
||||
#include "mozilla/dom/VideoTrackList.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#ifdef MOZ_GMP
|
||||
#include "GMPService.h"
|
||||
#endif
|
||||
#include "Layers.h"
|
||||
#include "mozilla/layers/ShadowLayers.h"
|
||||
|
||||
|
|
@ -929,6 +931,7 @@ MediaDecoder::OwnerHasError() const
|
|||
return mOwner->HasError();
|
||||
}
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
class MediaElementGMPCrashHelper : public GMPCrashHelper
|
||||
{
|
||||
public:
|
||||
|
|
@ -956,6 +959,7 @@ MediaDecoder::GetCrashHelper()
|
|||
return mOwner->GetMediaElement() ?
|
||||
MakeAndAddRef<MediaElementGMPCrashHelper>(mOwner->GetMediaElement()) : nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool
|
||||
MediaDecoder::IsEnded() const
|
||||
|
|
|
|||
|
|
@ -242,7 +242,9 @@ public:
|
|||
// Must be called before Shutdown().
|
||||
bool OwnerHasError() const;
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
already_AddRefed<GMPCrashHelper> GetCrashHelper() override;
|
||||
#endif
|
||||
|
||||
protected:
|
||||
// Updates the media duration. This is called while the media is being
|
||||
|
|
|
|||
|
|
@ -365,7 +365,9 @@ MediaFormatReader::DecoderFactory::DoCreateDecoder(TrackType aTrack)
|
|||
: *ownerData.mOriginalInfo->GetAsAudioInfo(),
|
||||
ownerData.mTaskQueue,
|
||||
ownerData.mCallback.get(),
|
||||
#ifdef MOZ_GMP
|
||||
mOwner->mCrashHelper,
|
||||
#endif
|
||||
ownerData.mIsBlankDecode,
|
||||
&result
|
||||
});
|
||||
|
|
@ -383,7 +385,9 @@ MediaFormatReader::DecoderFactory::DoCreateDecoder(TrackType aTrack)
|
|||
ownerData.mCallback.get(),
|
||||
mOwner->mKnowsCompositor,
|
||||
mOwner->GetImageContainer(),
|
||||
#ifdef MOZ_GMP
|
||||
mOwner->mCrashHelper,
|
||||
#endif
|
||||
ownerData.mIsBlankDecode,
|
||||
&result
|
||||
});
|
||||
|
|
@ -576,9 +580,11 @@ MediaFormatReader::InitInternal()
|
|||
mVideo.mTaskQueue =
|
||||
new TaskQueue(GetMediaThreadPool(MediaThreadType::PLATFORM_DECODER));
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
// Note: GMPCrashHelper must be created on main thread, as it may use
|
||||
// weak references, which aren't threadsafe.
|
||||
mCrashHelper = mDecoder->GetCrashHelper();
|
||||
#endif
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -585,7 +585,9 @@ private:
|
|||
|
||||
RefPtr<CDMProxy> mCDMProxy;
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
RefPtr<GMPCrashHelper> mCrashHelper;
|
||||
#endif
|
||||
|
||||
void SetBlankDecode(TrackType aTrack, bool aIsBlankDecode);
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,9 @@ static StripAtomic<Type> Get##Name##PrefDefault() { return Default; } \
|
|||
PrefTemplate<Type, Get##Name##PrefDefault, Get##Name##PrefName> mPref##Name
|
||||
|
||||
// Custom Definitions.
|
||||
#ifdef MOZ_GMP
|
||||
#define GMP_DEFAULT_ASYNC_SHUTDOWN_TIMEOUT 3000
|
||||
#endif
|
||||
#define SUSPEND_BACKGROUND_VIDEO_DELAY_MS 10000
|
||||
#define TEST_PREFERENCE_FAKE_RECOGNITION_SERVICE "media.webspeech.test.fake_recognition_service"
|
||||
|
||||
|
|
@ -96,9 +98,13 @@ private:
|
|||
|
||||
// PlatformDecoderModule
|
||||
DECL_MEDIA_PREF("media.apple.forcevda", AppleForceVDA, bool, false);
|
||||
#ifdef MOZ_GMP
|
||||
DECL_MEDIA_PREF("media.gmp.insecure.allow", GMPAllowInsecure, bool, false);
|
||||
DECL_MEDIA_PREF("media.gmp.async-shutdown-timeout", GMPAsyncShutdownTimeout, uint32_t, GMP_DEFAULT_ASYNC_SHUTDOWN_TIMEOUT);
|
||||
#endif
|
||||
#ifdef MOZ_EME
|
||||
DECL_MEDIA_PREF("media.eme.enabled", EMEEnabled, bool, false);
|
||||
#endif
|
||||
DECL_MEDIA_PREF("media.use-blank-decoder", PDMUseBlankDecoder, bool, false);
|
||||
DECL_MEDIA_PREF("media.gpu-process-decoder", PDMUseGPUDecoder, bool, false);
|
||||
#ifdef MOZ_FFMPEG
|
||||
|
|
@ -124,9 +130,11 @@ private:
|
|||
DECL_MEDIA_PREF("media.decoder.fuzzing.enabled", PDMFuzzingEnabled, bool, false);
|
||||
DECL_MEDIA_PREF("media.decoder.fuzzing.video-output-minimum-interval-ms", PDMFuzzingInterval, uint32_t, 0);
|
||||
DECL_MEDIA_PREF("media.decoder.fuzzing.dont-delay-inputexhausted", PDMFuzzingDelayInputExhausted, bool, true);
|
||||
#ifdef MOZ_GMP
|
||||
DECL_MEDIA_PREF("media.gmp.decoder.enabled", PDMGMPEnabled, bool, true);
|
||||
DECL_MEDIA_PREF("media.gmp.decoder.aac", GMPAACPreferred, uint32_t, 0);
|
||||
DECL_MEDIA_PREF("media.gmp.decoder.h264", GMPH264Preferred, uint32_t, 0);
|
||||
#endif
|
||||
|
||||
// MediaDecoderStateMachine
|
||||
DECL_MEDIA_PREF("media.suspend-bkgnd-video.enabled", MDSMSuspendBackgroundVideoEnabled, bool, false);
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ UNIFIED_SOURCES += [
|
|||
'TestAudioMixer.cpp',
|
||||
'TestAudioPacketizer.cpp',
|
||||
'TestAudioSegment.cpp',
|
||||
'TestGMPCrossOrigin.cpp',
|
||||
'TestGMPRemoveAndDelete.cpp',
|
||||
'TestGMPUtils.cpp',
|
||||
'TestIntervalSet.cpp',
|
||||
'TestMediaDataDecoder.cpp',
|
||||
'TestMediaEventSource.cpp',
|
||||
|
|
@ -27,6 +24,13 @@ UNIFIED_SOURCES += [
|
|||
'TestWebMBuffered.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_GMP']:
|
||||
UNIFIED_SOURCES += [
|
||||
'TestGMPCrossOrigin.cpp',
|
||||
'TestGMPRemoveAndDelete.cpp',
|
||||
'TestGMPUtils.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WEBM_ENCODER']:
|
||||
UNIFIED_SOURCES += [
|
||||
'TestVideoTrackEncoder.cpp',
|
||||
|
|
@ -59,11 +63,15 @@ LOCAL_INCLUDES += [
|
|||
'/dom/media',
|
||||
'/dom/media/encoder',
|
||||
'/dom/media/fmp4',
|
||||
'/dom/media/gmp',
|
||||
'/security/certverifier',
|
||||
'/security/pkix/include',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_GMP']:
|
||||
LOCAL_INCLUDES += [
|
||||
'/dom/media/gmp',
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'xul-gtest'
|
||||
|
||||
if CONFIG['GNU_CXX']:
|
||||
|
|
|
|||
|
|
@ -19,12 +19,8 @@ with Files('GetUserMedia*'):
|
|||
BUG_COMPONENT = component_av
|
||||
|
||||
DIRS += [
|
||||
'eme',
|
||||
'encoder',
|
||||
'flac',
|
||||
'gmp',
|
||||
'gmp-plugin',
|
||||
'gmp-plugin-openh264',
|
||||
'imagecapture',
|
||||
'ipc',
|
||||
'mediasink',
|
||||
|
|
@ -48,6 +44,16 @@ if CONFIG['MOZ_FMP4']:
|
|||
if CONFIG['MOZ_WEBRTC']:
|
||||
DIRS += ['bridge']
|
||||
|
||||
if CONFIG['MOZ_EME']:
|
||||
DIRS += ['eme']
|
||||
|
||||
if CONFIG['MOZ_GMP']:
|
||||
DIRS += [
|
||||
'gmp',
|
||||
'gmp-plugin',
|
||||
'gmp-plugin-openh264',
|
||||
]
|
||||
|
||||
TEST_DIRS += [
|
||||
'gtest',
|
||||
]
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@
|
|||
#ifdef MOZ_APPLEMEDIA
|
||||
#include "AppleDecoderModule.h"
|
||||
#endif
|
||||
#ifdef MOZ_GMP
|
||||
#include "GMPDecoderModule.h"
|
||||
#endif
|
||||
|
||||
#include "mozilla/CDMProxy.h"
|
||||
#include "mozilla/ClearOnShutdown.h"
|
||||
|
|
@ -221,9 +223,11 @@ PDMFactory::CreateDecoder(const CreateDecoderParams& aParams)
|
|||
if (mFFmpegFailedToLoad) {
|
||||
diagnostics->SetFFmpegFailedToLoad();
|
||||
}
|
||||
#ifdef MOZ_GMP
|
||||
if (mGMPPDMFailedToStartup) {
|
||||
diagnostics->SetGMPPDMFailedToStartup();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
for (auto& current : mCurrentPDMs) {
|
||||
|
|
@ -393,12 +397,14 @@ PDMFactory::CreatePDMs()
|
|||
m = new AgnosticDecoderModule();
|
||||
StartupPDM(m);
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
if (MediaPrefs::PDMGMPEnabled()) {
|
||||
m = new GMPDecoderModule();
|
||||
mGMPPDMFailedToStartup = !StartupPDM(m);
|
||||
} else {
|
||||
mGMPPDMFailedToStartup = false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -431,9 +437,11 @@ PDMFactory::GetDecoder(const TrackInfo& aTrackInfo,
|
|||
if (mFFmpegFailedToLoad) {
|
||||
aDiagnostics->SetFFmpegFailedToLoad();
|
||||
}
|
||||
#ifdef MOZ_GMP
|
||||
if (mGMPPDMFailedToStartup) {
|
||||
aDiagnostics->SetGMPPDMFailedToStartup();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
RefPtr<PlatformDecoderModule> pdm;
|
||||
|
|
|
|||
|
|
@ -70,7 +70,9 @@ private:
|
|||
|
||||
bool mWMFFailedToLoad = false;
|
||||
bool mFFmpegFailedToLoad = false;
|
||||
#ifdef MOZ_GMP
|
||||
bool mGMPPDMFailedToStartup = false;
|
||||
#endif
|
||||
|
||||
void EnsureInit() const;
|
||||
template<class T> friend class StaticAutoPtr;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,9 @@
|
|||
#include "mozilla/layers/KnowsCompositor.h"
|
||||
#include "nsTArray.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
#ifdef MOZ_GMP
|
||||
#include "GMPService.h"
|
||||
#endif
|
||||
#include <queue>
|
||||
#include "MediaResult.h"
|
||||
|
||||
|
|
@ -38,7 +40,9 @@ class RemoteDecoderModule;
|
|||
class MediaDataDecoder;
|
||||
class MediaDataDecoderCallback;
|
||||
class TaskQueue;
|
||||
#ifdef MOZ_EME
|
||||
class CDMProxy;
|
||||
#endif
|
||||
|
||||
static LazyLogModule sPDMLog("PlatformDecoderModule");
|
||||
|
||||
|
|
@ -81,7 +85,9 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
|
|||
layers::ImageContainer* mImageContainer = nullptr;
|
||||
MediaResult* mError = nullptr;
|
||||
RefPtr<layers::KnowsCompositor> mKnowsCompositor;
|
||||
#ifdef MOZ_GMP
|
||||
RefPtr<GMPCrashHelper> mCrashHelper;
|
||||
#endif
|
||||
bool mUseBlankDecoder = false;
|
||||
|
||||
private:
|
||||
|
|
@ -90,7 +96,9 @@ private:
|
|||
void Set(DecoderDoctorDiagnostics* aDiagnostics) { mDiagnostics = aDiagnostics; }
|
||||
void Set(layers::ImageContainer* aImageContainer) { mImageContainer = aImageContainer; }
|
||||
void Set(MediaResult* aError) { mError = aError; }
|
||||
#ifdef MOZ_GMP
|
||||
void Set(GMPCrashHelper* aCrashHelper) { mCrashHelper = aCrashHelper; }
|
||||
#endif
|
||||
void Set(bool aUseBlankDecoder) { mUseBlankDecoder = aUseBlankDecoder; }
|
||||
void Set(layers::KnowsCompositor* aKnowsCompositor) { mKnowsCompositor = aKnowsCompositor; }
|
||||
template <typename T1, typename T2, typename... Ts>
|
||||
|
|
|
|||
|
|
@ -29,11 +29,15 @@ UNIFIED_SOURCES += [
|
|||
]
|
||||
|
||||
DIRS += [
|
||||
'agnostic/eme',
|
||||
'agnostic/gmp',
|
||||
'omx'
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_EME']:
|
||||
DIRS += ['agnostic/eme']
|
||||
|
||||
if CONFIG['MOZ_GMP']:
|
||||
DIRS += ['agnostic/gmp']
|
||||
|
||||
if CONFIG['MOZ_WMF']:
|
||||
DIRS += [ 'wmf' ];
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@
|
|||
#include "IMFYCbCrImage.h"
|
||||
#include "mozilla/WindowsVersion.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#ifdef MOZ_GMP
|
||||
#include "GMPUtils.h" // For SplitAt. TODO: Move SplitAt to a central place.
|
||||
#endif
|
||||
#include "MP4Decoder.h"
|
||||
#include "VPXDecoder.h"
|
||||
#include "mozilla/SyncRunnable.h"
|
||||
|
|
@ -66,6 +68,23 @@ const CLSID CLSID_WebmMfVpxDec =
|
|||
|
||||
namespace mozilla {
|
||||
|
||||
#ifndef MOZ_GMP
|
||||
// Utility function only used when not building GMP
|
||||
// XXXMC: Perhaps make this available globally?
|
||||
void
|
||||
SplitAt(const char* aDelims,
|
||||
const nsACString& aInput,
|
||||
nsTArray<nsCString>& aOutTokens)
|
||||
{
|
||||
nsAutoCString str(aInput);
|
||||
char* end = str.BeginWriting();
|
||||
const char* start = nullptr;
|
||||
while (!!(start = NS_strtok(aDelims, &end))) {
|
||||
aOutTokens.AppendElement(nsCString(start));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
LayersBackend
|
||||
GetCompositorBackendType(layers::KnowsCompositor* aKnowsCompositor)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@ H264Converter::H264Converter(PlatformDecoderModule* aPDM,
|
|||
, mTaskQueue(aParams.mTaskQueue)
|
||||
, mCallback(aParams.mCallback)
|
||||
, mDecoder(nullptr)
|
||||
#ifdef MOZ_GMP
|
||||
, mGMPCrashHelper(aParams.mCrashHelper)
|
||||
#endif
|
||||
, mNeedAVCC(aPDM->DecoderNeedsConversion(aParams.mConfig)
|
||||
== PlatformDecoderModule::ConversionRequired::kNeedAVCC)
|
||||
, mLastError(NS_OK)
|
||||
|
|
@ -201,8 +203,12 @@ H264Converter::CreateDecoder(DecoderDoctorDiagnostics* aDiagnostics)
|
|||
mCallback,
|
||||
aDiagnostics,
|
||||
mImageContainer,
|
||||
#ifdef MOZ_GMP
|
||||
mKnowsCompositor,
|
||||
mGMPCrashHelper
|
||||
#else
|
||||
mKnowsCompositor
|
||||
#endif
|
||||
});
|
||||
|
||||
if (!mDecoder) {
|
||||
|
|
|
|||
|
|
@ -62,7 +62,9 @@ private:
|
|||
MediaDataDecoderCallback* mCallback;
|
||||
RefPtr<MediaDataDecoder> mDecoder;
|
||||
MozPromiseRequestHolder<InitPromise> mInitPromiseRequest;
|
||||
#ifdef MOZ_GMP
|
||||
RefPtr<GMPCrashHelper> mGMPCrashHelper;
|
||||
#endif
|
||||
bool mNeedAVCC;
|
||||
nsresult mLastError;
|
||||
bool mNeedKeyframe = true;
|
||||
|
|
|
|||
|
|
@ -425,7 +425,9 @@ support-files =
|
|||
dirac.ogg^headers^
|
||||
dynamic_redirect.sjs
|
||||
dynamic_resource.sjs
|
||||
#ifdef MOZ_EME
|
||||
eme.js
|
||||
#endif
|
||||
file_access_controls.html
|
||||
flac-s24.flac
|
||||
flac-s24.flac^headers^
|
||||
|
|
@ -682,6 +684,7 @@ tags=capturestream
|
|||
[test_decoder_disable.html]
|
||||
[test_defaultMuted.html]
|
||||
[test_delay_load.html]
|
||||
#ifdef MOZ_EME
|
||||
[test_eme_session_callable_value.html]
|
||||
[test_eme_canvas_blocked.html]
|
||||
skip-if = toolkit == 'android' # bug 1149374
|
||||
|
|
@ -712,13 +715,16 @@ tags=msg capturestream
|
|||
skip-if = toolkit == 'android' # bug 1149374
|
||||
[test_eme_waitingforkey.html]
|
||||
skip-if = toolkit == 'android' # bug 1149374
|
||||
#endif
|
||||
[test_empty_resource.html]
|
||||
[test_error_in_video_document.html]
|
||||
[test_error_on_404.html]
|
||||
[test_fastSeek.html]
|
||||
[test_fastSeek-forwards.html]
|
||||
#ifdef MOZ_GMP
|
||||
[test_gmp_playback.html]
|
||||
skip-if = (os != 'win' || os_version == '5.1') # Only gmp-clearkey on Windows Vista and later decodes
|
||||
#endif
|
||||
[test_imagecapture.html]
|
||||
[test_info_leak.html]
|
||||
[test_invalid_reject.html]
|
||||
|
|
|
|||
|
|
@ -7,15 +7,23 @@
|
|||
|
||||
#include "nsISupports.h"
|
||||
#include "MediaResource.h"
|
||||
#ifdef MOZ_GMP
|
||||
#include "GMPService.h"
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
NS_IMPL_ISUPPORTS0(BufferDecoder)
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
BufferDecoder::BufferDecoder(MediaResource* aResource, GMPCrashHelper* aCrashHelper)
|
||||
#else
|
||||
BufferDecoder::BufferDecoder(MediaResource* aResource)
|
||||
#endif
|
||||
: mResource(aResource)
|
||||
#ifdef MOZ_GMP
|
||||
, mCrashHelper(aCrashHelper)
|
||||
#endif
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_COUNT_CTOR(BufferDecoder);
|
||||
|
|
@ -67,10 +75,12 @@ BufferDecoder::GetOwner() const
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
already_AddRefed<GMPCrashHelper>
|
||||
BufferDecoder::GetCrashHelper()
|
||||
{
|
||||
return do_AddRef(mCrashHelper);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
|||
|
|
@ -23,7 +23,11 @@ class BufferDecoder final : public AbstractMediaDecoder
|
|||
public:
|
||||
// This class holds a weak pointer to MediaResource. It's the responsibility
|
||||
// of the caller to manage the memory of the MediaResource object.
|
||||
#ifdef MOZ_GMP
|
||||
explicit BufferDecoder(MediaResource* aResource, GMPCrashHelper* aCrashHelper);
|
||||
#else
|
||||
explicit BufferDecoder(MediaResource* aResource);
|
||||
#endif
|
||||
|
||||
NS_DECL_THREADSAFE_ISUPPORTS
|
||||
|
||||
|
|
@ -39,13 +43,17 @@ public:
|
|||
|
||||
MediaDecoderOwner* GetOwner() const final override;
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
already_AddRefed<GMPCrashHelper> GetCrashHelper() override;
|
||||
#endif
|
||||
|
||||
private:
|
||||
virtual ~BufferDecoder();
|
||||
RefPtr<TaskQueue> mTaskQueueIdentity;
|
||||
RefPtr<MediaResource> mResource;
|
||||
#ifdef MOZ_GMP
|
||||
RefPtr<GMPCrashHelper> mCrashHelper;
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@
|
|||
#include "WebAudioUtils.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#ifdef MOZ_GMP
|
||||
#include "GMPService.h"
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
|
|
@ -180,6 +182,7 @@ MediaDecodeTask::Run()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
#ifdef MOZ_GMP
|
||||
class BufferDecoderGMPCrashHelper : public GMPCrashHelper
|
||||
{
|
||||
public:
|
||||
|
|
@ -197,6 +200,7 @@ public:
|
|||
private:
|
||||
nsWeakPtr mParent;
|
||||
};
|
||||
#endif
|
||||
|
||||
bool
|
||||
MediaDecodeTask::CreateReader()
|
||||
|
|
@ -215,8 +219,12 @@ MediaDecodeTask::CreateReader()
|
|||
mLength, principal, mContentType);
|
||||
|
||||
MOZ_ASSERT(!mBufferDecoder);
|
||||
#ifdef MOZ_GMP
|
||||
mBufferDecoder = new BufferDecoder(resource,
|
||||
new BufferDecoderGMPCrashHelper(mDecodeJob.mContext->GetParentObject()));
|
||||
#else
|
||||
mBufferDecoder = new BufferDecoder(resource);
|
||||
#endif
|
||||
|
||||
// If you change this list to add support for new decoders, please consider
|
||||
// updating HTMLMediaElement::CreateDecoder as well.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue