From 8f1bf15aa3aa28aa896454befceb08472f77dd5a Mon Sep 17 00:00:00 2001 From: John Lin Date: Tue, 8 Oct 2019 17:15:52 +0000 Subject: [PATCH] Bug 1581902 - p5: check H.264 hardware availability. r=pehrsons Differential Revision: https://phabricator.services.mozilla.com/D46367 --HG-- extra : moz-landing-system : lando --- .../signaling/src/media-conduit/VideoConduit.cpp | 13 +++++++++++++ .../signaling/src/media-conduit/VideoConduit.h | 3 +++ .../src/peerconnection/PeerConnectionImpl.cpp | 2 ++ 3 files changed, 18 insertions(+) diff --git a/media/webrtc/signaling/src/media-conduit/VideoConduit.cpp b/media/webrtc/signaling/src/media-conduit/VideoConduit.cpp index b63725fb65e1..f9426de3ca0a 100644 --- a/media/webrtc/signaling/src/media-conduit/VideoConduit.cpp +++ b/media/webrtc/signaling/src/media-conduit/VideoConduit.cpp @@ -2305,4 +2305,17 @@ bool WebrtcVideoConduit::RequiresNewSendStream( ; } +bool WebrtcVideoConduit::HasH264Hardware() { + nsCOMPtr gfxInfo = do_GetService("@mozilla.org/gfx/info;1"); + if (!gfxInfo) { + return false; + } + int32_t status; + nsCString discardFailureId; + return NS_SUCCEEDED(gfxInfo->GetFeatureStatus( + nsIGfxInfo::FEATURE_WEBRTC_HW_ACCELERATION_H264, discardFailureId, + &status)) && + status == nsIGfxInfo::FEATURE_STATUS_OK; +} + } // namespace mozilla diff --git a/media/webrtc/signaling/src/media-conduit/VideoConduit.h b/media/webrtc/signaling/src/media-conduit/VideoConduit.h index e1242f8c4921..cc8cfb295e3b 100644 --- a/media/webrtc/signaling/src/media-conduit/VideoConduit.h +++ b/media/webrtc/signaling/src/media-conduit/VideoConduit.h @@ -76,6 +76,9 @@ class WebrtcVideoConduit // VoiceEngine defined constant for Payload Name Size. static const unsigned int CODEC_PLNAME_SIZE; + // Returns true when both encoder and decoder are HW accelerated. + static bool HasH264Hardware(); + MediaConduitErrorCode SetLocalRTPExtensions( MediaSessionConduitLocalDirection aDirection, const RtpExtList& aExtensions) override; diff --git a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp index fd1a14f75c8c..1830c292e7e1 100644 --- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp +++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp @@ -637,6 +637,8 @@ class ConfigureCodec { mDtmfEnabled(false) { mSoftwareH264Enabled = PeerConnectionCtx::GetInstance()->gmpHasH264(); + mHardwareH264Supported = WebrtcVideoConduit::HasH264Hardware(); + mH264Enabled = mHardwareH264Supported || mSoftwareH264Enabled; branch->GetIntPref("media.navigator.video.h264.level", &mH264Level);