0

Pass through ac3/eac3 support to the browser.

Mojo pipe for ApplicationMediaCapabilities was broken with the browser
decoupling. This lets CastContentRendererClient receive the
OnSupportedBitstreamAudioCodecsChanged events again. In upstream
chromium, we will use AudioManagerAndroid to directly set support.

Bug: internal 371469701
Test: Cast Dolby Digital Plus (E-AC3) content.

Change-Id: I59f4c3f8df507ed69853e0e97be6722028991c69
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6216724
Reviewed-by: Vigen Issahhanjan <vigeni@google.com>
Reviewed-by: Simeon Anfinrud <sanfin@chromium.org>
Commit-Queue: Erin Yan <yiranyan@google.com>
Cr-Commit-Position: refs/heads/main@{#1416433}
This commit is contained in:
Erin Yan
2025-02-05 13:27:34 -08:00
committed by Chromium LUCI CQ
parent 5b8d79686e
commit 47845d4c20
4 changed files with 56 additions and 0 deletions

@ -227,6 +227,7 @@ void RuntimeApplicationServiceImpl::Load(
cast_web_view_ = CreateCastWebView();
metrics::CastMetricsHelper::GetInstance()->DidCompleteLoad(
request.application_config().app_id(), request.cast_session_id());
SetApplicationMediaCapabilities();
runtime_application_->Load(std::move(callback));
}
@ -420,6 +421,47 @@ void RuntimeApplicationServiceImpl::SetMediaBlocking(
}
}
void RuntimeApplicationServiceImpl::SetApplicationMediaCapabilities() {
const auto* codec_info = FindEntry(feature::kCastCoreBitstreamAudioCodecsInfo,
config_.extra_features());
if (!codec_info || !codec_info->value().has_dictionary()) {
LOG(WARNING) << "Missing BitstreamAudioCodecsInfo, failed to add "
"Application Media Capabilities.";
return;
}
const auto* codecs =
FindEntry(feature::kCastCoreCodecs, codec_info->value().dictionary());
if (!codecs) {
LOG(WARNING)
<< "Missing Codecs, failed to add Application Media Capabilities.";
return;
}
const auto* spatial_rendering = FindEntry(feature::kCastCoreSpatialRendering,
codec_info->value().dictionary());
if (!spatial_rendering) {
LOG(WARNING) << "Missing SpatialRendering, failed to add Application Media "
"Capabilities.";
return;
}
BitstreamAudioCodecsInfo new_info{codecs->value().number(),
spatial_rendering->value().number()};
LOG(INFO) << "Adding Application Media Capabilities: "
<< BitstreamAudioCodecsInfoToString(new_info);
auto* contents = cast_web_view_->cast_web_contents();
CHECK(contents);
InterfaceBundle* bundle = contents->local_interfaces();
CHECK(bundle);
bundle->AddInterface(&app_media_capabilities_);
app_media_capabilities_.SetSupportedBitstreamAudioCodecs(new_info);
}
void RuntimeApplicationServiceImpl::OnStreamingApplicationError(
cast_receiver::Status status) {
LOG(ERROR) << "Error while running streaming application: " << status

@ -10,6 +10,7 @@
#include <vector>
#include "base/task/sequenced_task_runner.h"
#include "chromecast/browser/application_media_capabilities.h"
#include "chromecast/browser/cast_content_window.h"
#include "chromecast/browser/cast_web_view.h"
#include "chromecast/cast_core/grpc/grpc_server.h"
@ -88,6 +89,8 @@ class RuntimeApplicationServiceImpl : public cast_receiver::EmbedderApplication,
void SetVisibility(cast::common::Visibility::Type state);
void SetMediaBlocking(cast::common::MediaState::Type state);
void SetApplicationMediaCapabilities();
// Called on an error is hit during running of cast mirroring or remoting.
void OnStreamingApplicationError(cast_receiver::Status status);
@ -142,6 +145,8 @@ class RuntimeApplicationServiceImpl : public cast_receiver::EmbedderApplication,
raw_ref<CastWebService> web_service_;
shell::ApplicationMediaCapabilities app_media_capabilities_;
// The WebView associated with the window in which the Cast application is
// displayed.
CastWebView::Scoped cast_web_view_;

@ -37,5 +37,10 @@ const char kCastCoreLogJsConsoleMessages[] = "cast_core_log_js_console_messages"
const char kCastCoreTurnOnScreen[] = "cast_core_turn_on_screen";
const char kCastCoreKeepScreenOn[] = "cast_core_keep_screen_on";
const char kCastCoreBitstreamAudioCodecsInfo[] =
"cast_core_bitstream_audio_codecs_info";
const char kCastCoreCodecs[] = "cast_core_codecs";
const char kCastCoreSpatialRendering[] = "cast_core_spatial_rendering";
} // namespace feature
} // namespace chromecast

@ -58,6 +58,10 @@ extern const char kCastCoreLogJsConsoleMessages[];
extern const char kCastCoreTurnOnScreen[];
extern const char kCastCoreKeepScreenOn[];
extern const char kCastCoreBitstreamAudioCodecsInfo[];
extern const char kCastCoreCodecs[];
extern const char kCastCoreSpatialRendering[];
} // namespace feature
} // namespace chromecast