mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
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:
parent
9cd5c3f48e
commit
179444c0a8
3 changed files with 30 additions and 18 deletions
|
@ -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))
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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()}}));
|
||||||
|
|
Loading…
Reference in a new issue