// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/browser/media/media_caps_impl.h"
#include "base/logging.h"
#include "chromecast/public/media/decoder_config.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace chromecast {
namespace media {
mojom::CodecProfileLevelPtr ConvertCodecProfileLevelToMojo(
const CodecProfileLevel& codec_profile_level) {
mojom::CodecProfileLevelPtr result = mojom::CodecProfileLevel::New();
result->codec = codec_profile_level.codec;
result->profile = codec_profile_level.profile;
result->level = codec_profile_level.level;
return result;
}
MediaCapsImpl::MediaCapsImpl() = default;
MediaCapsImpl::~MediaCapsImpl() = default;
void MediaCapsImpl::AddReceiver(
mojo::PendingReceiver<mojom::MediaCaps> receiver) {
receivers_.Add(this, std::move(receiver));
}
mojo::PendingRemote<mojom::MediaCaps> MediaCapsImpl::GetPendingRemote() {
mojo::PendingRemote<mojom::MediaCaps> pending_remote;
AddReceiver(pending_remote.InitWithNewPipeAndPassReceiver());
return pending_remote;
}
void MediaCapsImpl::AddSupportedCodecProfileLevel(
const CodecProfileLevel& codec_profile_level) {
codec_profile_levels_.push_back(codec_profile_level);
for (auto& observer : observers_) {
mojom::CodecProfileLevelPtr mojo_codec_profile_level(
ConvertCodecProfileLevelToMojo(codec_profile_level));
observer->AddSupportedCodecProfileLevel(
std::move(mojo_codec_profile_level));
}
}
void MediaCapsImpl::AddObserver(
mojo::PendingRemote<mojom::MediaCapsObserver> observer_remote) {
mojo::Remote<mojom::MediaCapsObserver> observer(std::move(observer_remote));
DVLOG(1) << __func__ << ": Sending " << codec_profile_levels_.size()
<< " supported codec profile levels to observer.";
for (const auto& codec_profile_level : codec_profile_levels_) {
observer->AddSupportedCodecProfileLevel(
ConvertCodecProfileLevelToMojo(codec_profile_level));
}
observers_.Add(std::move(observer));
}
} // namespace media
} // namespace chromecast