Pass webrtc::Environment through InternalDecoderFactory::Create

Bug: webrtc:15791
Change-Id: I1c7cecffaa58f42f3a23520a8afdbc5ad1086d67
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/340280
Auto-Submit: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41784}
This commit is contained in:
Danil Chapovalov 2024-02-22 11:15:08 +01:00 committed by WebRTC LUCI CQ
parent 9cd5c3f48e
commit 179444c0a8
3 changed files with 30 additions and 18 deletions

View file

@ -11,6 +11,7 @@
#include "media/engine/internal_decoder_factory.h" #include "media/engine/internal_decoder_factory.h"
#include "absl/strings/match.h" #include "absl/strings/match.h"
#include "api/environment/environment.h"
#include "api/video_codecs/av1_profile.h" #include "api/video_codecs/av1_profile.h"
#include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_codec.h" #include "api/video_codecs/video_codec.h"
@ -78,7 +79,8 @@ VideoDecoderFactory::CodecSupport InternalDecoderFactory::QueryCodecSupport(
return codec_support; return codec_support;
} }
std::unique_ptr<VideoDecoder> InternalDecoderFactory::CreateVideoDecoder( std::unique_ptr<VideoDecoder> InternalDecoderFactory::Create(
const Environment& env,
const SdpVideoFormat& format) { const SdpVideoFormat& format) {
if (!format.IsCodecInList(GetSupportedFormats())) { if (!format.IsCodecInList(GetSupportedFormats())) {
RTC_LOG(LS_WARNING) << "Trying to create decoder for unsupported format. " RTC_LOG(LS_WARNING) << "Trying to create decoder for unsupported format. "
@ -87,7 +89,7 @@ std::unique_ptr<VideoDecoder> InternalDecoderFactory::CreateVideoDecoder(
} }
if (absl::EqualsIgnoreCase(format.name, cricket::kVp8CodecName)) if (absl::EqualsIgnoreCase(format.name, cricket::kVp8CodecName))
return VP8Decoder::Create(); return CreateVp8Decoder(env);
if (absl::EqualsIgnoreCase(format.name, cricket::kVp9CodecName)) if (absl::EqualsIgnoreCase(format.name, cricket::kVp9CodecName))
return VP9Decoder::Create(); return VP9Decoder::Create();
if (absl::EqualsIgnoreCase(format.name, cricket::kH264CodecName)) if (absl::EqualsIgnoreCase(format.name, cricket::kH264CodecName))

View file

@ -14,6 +14,7 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include "api/environment/environment.h"
#include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_decoder.h" #include "api/video_codecs/video_decoder.h"
#include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_decoder_factory.h"
@ -26,7 +27,7 @@ class RTC_EXPORT InternalDecoderFactory : public VideoDecoderFactory {
std::vector<SdpVideoFormat> GetSupportedFormats() const override; std::vector<SdpVideoFormat> GetSupportedFormats() const override;
CodecSupport QueryCodecSupport(const SdpVideoFormat& format, CodecSupport QueryCodecSupport(const SdpVideoFormat& format,
bool reference_scaling) const override; bool reference_scaling) const override;
std::unique_ptr<VideoDecoder> CreateVideoDecoder( std::unique_ptr<VideoDecoder> Create(const Environment& env,
const SdpVideoFormat& format) override; const SdpVideoFormat& format) override;
}; };

View file

@ -10,6 +10,8 @@
#include "media/engine/internal_decoder_factory.h" #include "media/engine/internal_decoder_factory.h"
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
#include "api/video_codecs/av1_profile.h" #include "api/video_codecs/av1_profile.h"
#include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_decoder.h" #include "api/video_codecs/video_decoder.h"
@ -56,44 +58,48 @@ MATCHER_P(Support, expected, "") {
} }
TEST(InternalDecoderFactoryTest, Vp8) { TEST(InternalDecoderFactoryTest, Vp8) {
const Environment env = CreateEnvironment();
InternalDecoderFactory factory; InternalDecoderFactory factory;
std::unique_ptr<VideoDecoder> decoder = std::unique_ptr<VideoDecoder> decoder =
factory.CreateVideoDecoder(SdpVideoFormat(cricket::kVp8CodecName)); factory.Create(env, SdpVideoFormat(cricket::kVp8CodecName));
EXPECT_TRUE(decoder); EXPECT_TRUE(decoder);
} }
TEST(InternalDecoderFactoryTest, Vp9Profile0) { TEST(InternalDecoderFactoryTest, Vp9Profile0) {
const Environment env = CreateEnvironment();
InternalDecoderFactory factory; InternalDecoderFactory factory;
std::unique_ptr<VideoDecoder> decoder = std::unique_ptr<VideoDecoder> decoder = factory.Create(
factory.CreateVideoDecoder(SdpVideoFormat( env, SdpVideoFormat(cricket::kVp9CodecName,
cricket::kVp9CodecName, {{kVP9FmtpProfileId,
{{kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})); VP9ProfileToString(VP9Profile::kProfile0)}}));
EXPECT_EQ(static_cast<bool>(decoder), kVp9Enabled); EXPECT_EQ(static_cast<bool>(decoder), kVp9Enabled);
} }
TEST(InternalDecoderFactoryTest, Vp9Profile1) { TEST(InternalDecoderFactoryTest, Vp9Profile1) {
const Environment env = CreateEnvironment();
InternalDecoderFactory factory; InternalDecoderFactory factory;
std::unique_ptr<VideoDecoder> decoder = std::unique_ptr<VideoDecoder> decoder = factory.Create(
factory.CreateVideoDecoder(SdpVideoFormat( env, SdpVideoFormat(cricket::kVp9CodecName,
cricket::kVp9CodecName, {{kVP9FmtpProfileId,
{{kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile1)}})); VP9ProfileToString(VP9Profile::kProfile1)}}));
EXPECT_EQ(static_cast<bool>(decoder), kVp9Enabled); EXPECT_EQ(static_cast<bool>(decoder), kVp9Enabled);
} }
TEST(InternalDecoderFactoryTest, H264) { TEST(InternalDecoderFactoryTest, H264) {
const Environment env = CreateEnvironment();
InternalDecoderFactory factory; InternalDecoderFactory factory;
std::unique_ptr<VideoDecoder> decoder = std::unique_ptr<VideoDecoder> decoder =
factory.CreateVideoDecoder(SdpVideoFormat(cricket::kH264CodecName)); factory.Create(env, SdpVideoFormat(cricket::kH264CodecName));
EXPECT_EQ(static_cast<bool>(decoder), kH264Enabled); EXPECT_EQ(static_cast<bool>(decoder), kH264Enabled);
} }
TEST(InternalDecoderFactoryTest, Av1Profile0) { TEST(InternalDecoderFactoryTest, Av1Profile0) {
const Environment env = CreateEnvironment();
InternalDecoderFactory factory; InternalDecoderFactory factory;
if (kDav1dIsIncluded) { if (kDav1dIsIncluded) {
EXPECT_THAT(factory.GetSupportedFormats(), EXPECT_THAT(factory.GetSupportedFormats(),
Contains(Field(&SdpVideoFormat::name, cricket::kAv1CodecName))); Contains(Field(&SdpVideoFormat::name, cricket::kAv1CodecName)));
EXPECT_TRUE( EXPECT_TRUE(factory.Create(env, SdpVideoFormat(cricket::kAv1CodecName)));
factory.CreateVideoDecoder(SdpVideoFormat(cricket::kAv1CodecName)));
} else { } else {
EXPECT_THAT( EXPECT_THAT(
factory.GetSupportedFormats(), factory.GetSupportedFormats(),
@ -103,9 +109,10 @@ TEST(InternalDecoderFactoryTest, Av1Profile0) {
// At current stage since internal H.265 decoder is not implemented, // At current stage since internal H.265 decoder is not implemented,
TEST(InternalDecoderFactoryTest, H265IsNotEnabled) { TEST(InternalDecoderFactoryTest, H265IsNotEnabled) {
const Environment env = CreateEnvironment();
InternalDecoderFactory factory; InternalDecoderFactory factory;
std::unique_ptr<VideoDecoder> decoder = std::unique_ptr<VideoDecoder> decoder =
factory.CreateVideoDecoder(SdpVideoFormat(cricket::kH265CodecName)); factory.Create(env, SdpVideoFormat(cricket::kH265CodecName));
EXPECT_EQ(static_cast<bool>(decoder), kH265Enabled); EXPECT_EQ(static_cast<bool>(decoder), kH265Enabled);
} }
@ -118,8 +125,10 @@ TEST(InternalDecoderFactoryTest, Av1) {
#endif #endif
TEST(InternalDecoderFactoryTest, Av1Profile1_Dav1dDecoderTrialEnabled) { TEST(InternalDecoderFactoryTest, Av1Profile1_Dav1dDecoderTrialEnabled) {
const Environment env = CreateEnvironment();
InternalDecoderFactory factory; InternalDecoderFactory factory;
std::unique_ptr<VideoDecoder> decoder = factory.CreateVideoDecoder( std::unique_ptr<VideoDecoder> decoder = factory.Create(
env,
SdpVideoFormat(cricket::kAv1CodecName, SdpVideoFormat(cricket::kAv1CodecName,
{{cricket::kAv1FmtpProfile, {{cricket::kAv1FmtpProfile,
AV1ProfileToString(AV1Profile::kProfile1).data()}})); AV1ProfileToString(AV1Profile::kProfile1).data()}}));