return unique_id.fetch_add(1);
}
+media::VideoCodecProfile GetDefaultVideoCodecProfile(
+ media::VideoCodec video_codec) {
+ switch (video_codec) {
+ case media::VideoCodec::kH264:
+ return media::H264PROFILE_MAIN;
+ case media::VideoCodec::kVP8:
+ return media::VP8PROFILE_ANY;
+ case media::VideoCodec::kVP9:
+ return media::VP9PROFILE_PROFILE1;
+ case media::VideoCodec::kHEVC:
+ return media::HEVCPROFILE_MAIN;
+ case media::VideoCodec::kAV1:
+ return media::AV1PROFILE_PROFILE_MAIN;
+ default:
+ LOG(WARNING) << "Unsupported video codec: "
+ << media::GetCodecName(video_codec);
+ return media::VIDEO_CODEC_PROFILE_UNKNOWN;
+ }
+}
+
String MakeMsTrackId(int32_t unique_id, ElementaryMediaTrack::TrackType type) {
std::ostringstream oss;
oss << (type == ElementaryMediaTrack::TrackType::kVideo ? "video" : "audio")
}
if (profile == media::VIDEO_CODEC_PROFILE_UNKNOWN) {
- // Don't return here. Some codecs doesn't have profile.
- EMSS_LOG_NO_INSTANCE(INFO) << "Unknown video profile";
+ // Don't return here. Some codecs doesn't have profile, but profile is
+ // required by GPU factory.
+ profile = GetDefaultVideoCodecProfile(codec);
+ EMSS_LOG_NO_INSTANCE(INFO)
+ << "Unknown video profile, using default profile: "
+ << media::GetProfileName(profile) << "(" << profile << ")";
}
if (!config->hasWidth() || !config->hasHeight()) {
ContentType content_type(config->mimeType());
auto video_codec = StringToVideoCodec(
content_type.Parameter("codecs").Utf8().data(), &profile);
+ if (profile == media::VIDEO_CODEC_PROFILE_UNKNOWN) {
+ // See comment in VerifyVideoConfiguration(...)
+ profile = GetDefaultVideoCodecProfile(video_codec);
+ }
auto video_size = gfx::Size{static_cast<int32_t>(config->width()),
static_cast<int32_t>(config->height())};