mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-16 05:45:33 +00:00
Bug 1765898. Expose GetEncoderInfo() for out of tree encoders. r=bwc
The Qp thresholds are taken from h264_encoder_impl.cc Adding a ScalingSettings for WebrtcGmpVideoEncoder will enable the quality scaler for WebrtcGmpVideoEncoder which will fix the resolution not being changed at low bitrates. Differential Revision: https://phabricator.services.mozilla.com/D144485
This commit is contained in:
parent
09a4cd7a93
commit
00d62a96a1
@ -24,6 +24,10 @@
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
// QP scaling thresholds.
|
||||
static const int kLowH264QpThreshold = 24;
|
||||
static const int kHighH264QpThreshold = 37;
|
||||
|
||||
// Encoder.
|
||||
WebrtcGmpVideoEncoder::WebrtcGmpVideoEncoder(std::string aPCHandle)
|
||||
: mGMP(nullptr),
|
||||
@ -459,6 +463,18 @@ int32_t WebrtcGmpVideoEncoder::SetRates(
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
}
|
||||
|
||||
WebrtcVideoEncoder::EncoderInfo WebrtcGmpVideoEncoder::GetEncoderInfo() const {
|
||||
|
||||
WebrtcVideoEncoder::EncoderInfo info;
|
||||
info.supports_native_handle = false;
|
||||
info.implementation_name = "GMPOpenH264";
|
||||
info.scaling_settings =
|
||||
WebrtcVideoEncoder::ScalingSettings(kLowH264QpThreshold, kHighH264QpThreshold);
|
||||
info.is_hardware_accelerated = false;
|
||||
info.supports_simulcast = false;
|
||||
return info;
|
||||
}
|
||||
|
||||
/* static */
|
||||
int32_t WebrtcGmpVideoEncoder::SetRates_g(RefPtr<WebrtcGmpVideoEncoder> aThis,
|
||||
uint32_t aNewBitRateKbps,
|
||||
|
@ -145,6 +145,8 @@ class RefCountedWebrtcVideoEncoder {
|
||||
|
||||
virtual MediaEventSource<uint64_t>* ReleasePluginEvent() = 0;
|
||||
|
||||
virtual WebrtcVideoEncoder::EncoderInfo GetEncoderInfo() const = 0;
|
||||
|
||||
protected:
|
||||
virtual ~RefCountedWebrtcVideoEncoder() = default;
|
||||
};
|
||||
@ -171,6 +173,8 @@ class WebrtcGmpVideoEncoder : public GMPVideoEncoderCallbackProxy,
|
||||
int32_t SetRates(
|
||||
const webrtc::VideoEncoder::RateControlParameters& aParameters) override;
|
||||
|
||||
WebrtcVideoEncoder::EncoderInfo GetEncoderInfo() const override;
|
||||
|
||||
MediaEventSource<uint64_t>* InitPluginEvent() override {
|
||||
return &mInitPluginEvent;
|
||||
}
|
||||
@ -341,6 +345,10 @@ class WebrtcVideoEncoderProxy : public WebrtcVideoEncoder {
|
||||
mEncoderImpl->SetRates(aParameters);
|
||||
}
|
||||
|
||||
EncoderInfo GetEncoderInfo() const override {
|
||||
return mEncoderImpl->GetEncoderInfo();
|
||||
}
|
||||
|
||||
private:
|
||||
const RefPtr<RefCountedWebrtcVideoEncoder> mEncoderImpl;
|
||||
};
|
||||
|
@ -261,6 +261,15 @@ already_AddRefed<MediaDataEncoder> WebrtcMediaDataEncoder::CreateEncoder(
|
||||
return mFactory->CreateEncoder(params);
|
||||
}
|
||||
|
||||
WebrtcVideoEncoder::EncoderInfo WebrtcMediaDataEncoder::GetEncoderInfo() const {
|
||||
WebrtcVideoEncoder::EncoderInfo info;
|
||||
info.supports_native_handle = false;
|
||||
info.implementation_name = "MediaDataEncoder";
|
||||
info.is_hardware_accelerated = false;
|
||||
info.supports_simulcast = false;
|
||||
return info;
|
||||
}
|
||||
|
||||
int32_t WebrtcMediaDataEncoder::RegisterEncodeCompleteCallback(
|
||||
webrtc::EncodedImageCallback* aCallback) {
|
||||
MutexAutoLock lock(mCallbackMutex);
|
||||
|
@ -41,6 +41,7 @@ class WebrtcMediaDataEncoder : public RefCountedWebrtcVideoEncoder {
|
||||
int32_t SetRates(
|
||||
const webrtc::VideoEncoder::RateControlParameters& aParameters) override;
|
||||
|
||||
WebrtcVideoEncoder::EncoderInfo GetEncoderInfo() const override;
|
||||
MediaEventSource<uint64_t>* InitPluginEvent() override { return nullptr; }
|
||||
|
||||
MediaEventSource<uint64_t>* ReleasePluginEvent() override { return nullptr; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user