Commit 74b393b8 authored by Steven Zhu's avatar Steven Zhu Committed by Commit Bot

[Chromecast] Enable "what's playing" for external audio pipeline.

. Add ExternalMediaMetadata to the external input source and state.
. Add ExternalMediaMetadataChangeObserver for the external pipeline to report media state change.
. Report external pipeline state to the Assistant Server via MediaParams.

Design doc: internal http://go/voice-control-for-external-audio-pipeline

Bug: internal b/80156336
Change-Id: I68ec11cc6fe4f368c34fe705c05a0f50ee9011cc
Reviewed-on: https://chromium-review.googlesource.com/1192116Reviewed-by: default avatarKenneth MacKay <kmackay@chromium.org>
Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Commit-Queue: Kenneth MacKay <kmackay@chromium.org>
Cr-Commit-Position: refs/heads/master@{#588177}
parent f97e28e3
...@@ -52,6 +52,16 @@ void ExternalAudioPipelineShlib::RemoveExternalLoopbackAudioObserver( ...@@ -52,6 +52,16 @@ void ExternalAudioPipelineShlib::RemoveExternalLoopbackAudioObserver(
NOTREACHED(); NOTREACHED();
} }
void ExternalAudioPipelineShlib::AddExternalMediaMetadataChangeObserver(
ExternalMediaMetadataChangeObserver* observer) {
NOTREACHED();
}
void ExternalAudioPipelineShlib::RemoveExternalMediaMetadataChangeObserver(
ExternalMediaMetadataChangeObserver* observer) {
NOTREACHED();
}
std::unique_ptr<MixerOutputStream> std::unique_ptr<MixerOutputStream>
ExternalAudioPipelineShlib::CreateMixerOutputStream() { ExternalAudioPipelineShlib::CreateMixerOutputStream() {
NOTREACHED(); NOTREACHED();
......
...@@ -12,6 +12,9 @@ ...@@ -12,6 +12,9 @@
#include "chromecast/public/media/external_audio_pipeline_shlib.h" #include "chromecast/public/media/external_audio_pipeline_shlib.h"
#include "chromecast/public/media/mixer_output_stream.h" #include "chromecast/public/media/mixer_output_stream.h"
using ExternalMediaMetadataChangeObserver = chromecast::media::
ExternalAudioPipelineShlib::ExternalMediaMetadataChangeObserver;
namespace chromecast { namespace chromecast {
namespace media { namespace media {
...@@ -110,6 +113,12 @@ void ExternalAudioPipelineShlib::RemoveExternalLoopbackAudioObserver( ...@@ -110,6 +113,12 @@ void ExternalAudioPipelineShlib::RemoveExternalLoopbackAudioObserver(
g_test_loop_back.RemoveObserver(observer); g_test_loop_back.RemoveObserver(observer);
} }
void ExternalAudioPipelineShlib::AddExternalMediaMetadataChangeObserver(
ExternalMediaMetadataChangeObserver* observer) {}
void ExternalAudioPipelineShlib::RemoveExternalMediaMetadataChangeObserver(
ExternalMediaMetadataChangeObserver* observer) {}
std::unique_ptr<MixerOutputStream> std::unique_ptr<MixerOutputStream>
ExternalAudioPipelineShlib::CreateMixerOutputStream() { ExternalAudioPipelineShlib::CreateMixerOutputStream() {
return std::make_unique<MixerOutputStreamTest>(&g_test_loop_back); return std::make_unique<MixerOutputStreamTest>(&g_test_loop_back);
......
...@@ -17,6 +17,21 @@ namespace media { ...@@ -17,6 +17,21 @@ namespace media {
class CHROMECAST_EXPORT ExternalAudioPipelineShlib { class CHROMECAST_EXPORT ExternalAudioPipelineShlib {
public: public:
// Represents a media input source of the external media pipeline.
enum class MediaInputSource {
UNKNOWN_INPUT_SOURCE,
HDMI,
AIRPLAY,
};
// Represents a media playback state of the external media pipeline.
enum class MediaPlaybackState {
UNKNOWN_STATE,
STOPPED,
PAUSED,
PLAYING,
};
// Observer for reporting requests for media volume change/muting from the // Observer for reporting requests for media volume change/muting from the
// external media pipeline. The external pipeline should communicate the media // external media pipeline. The external pipeline should communicate the media
// volume change requests through this observer and otherwise shouldn't change // volume change requests through this observer and otherwise shouldn't change
...@@ -40,6 +55,33 @@ class CHROMECAST_EXPORT ExternalAudioPipelineShlib { ...@@ -40,6 +55,33 @@ class CHROMECAST_EXPORT ExternalAudioPipelineShlib {
virtual ~ExternalMediaVolumeChangeRequestObserver() = default; virtual ~ExternalMediaVolumeChangeRequestObserver() = default;
}; };
// Media metadata which can be acquired from the external pipeline.
struct ExternalMediaMetadata {
ExternalMediaMetadata();
ExternalMediaMetadata(const ExternalMediaMetadata& other);
~ExternalMediaMetadata();
std::string title;
std::string artist;
std::string album;
std::string genre;
int track_num = -1;
MediaInputSource source = MediaInputSource::HDMI;
MediaPlaybackState state = MediaPlaybackState::UNKNOWN_STATE;
};
// Observer for reporting media metadata change from the external media
// pipeline, e.g., title, artist, input source, play back state, and etc.
class ExternalMediaMetadataChangeObserver {
public:
// Called when media metadata is updated.
virtual void OnExternalMediaMetadataChanged(
const ExternalMediaMetadata& metadata) = 0;
protected:
virtual ~ExternalMediaMetadataChangeObserver() = default;
};
// Returns whether this shlib is supported. If this returns true, it indicates // Returns whether this shlib is supported. If this returns true, it indicates
// that the platform uses an external audio pipeline that needs to be combined // that the platform uses an external audio pipeline that needs to be combined
// with Cast's media pipeline. // with Cast's media pipeline.
...@@ -84,11 +126,29 @@ class CHROMECAST_EXPORT ExternalAudioPipelineShlib { ...@@ -84,11 +126,29 @@ class CHROMECAST_EXPORT ExternalAudioPipelineShlib {
static void RemoveExternalLoopbackAudioObserver( static void RemoveExternalLoopbackAudioObserver(
CastMediaShlib::LoopbackAudioObserver* observer); CastMediaShlib::LoopbackAudioObserver* observer);
// Adds an external media metadata observer.
static void AddExternalMediaMetadataChangeObserver(
ExternalMediaMetadataChangeObserver* observer) __attribute__((__weak__));
// Removes an external media volume observer. After this is called, the
// implementation must not call any more methods on the observer.
static void RemoveExternalMediaMetadataChangeObserver(
ExternalMediaMetadataChangeObserver* observer) __attribute__((__weak__));
// Returns an instance of MixerOutputStream from the shared library. // Returns an instance of MixerOutputStream from the shared library.
// Caller will take ownership of the returned pointer. // Caller will take ownership of the returned pointer.
static std::unique_ptr<MixerOutputStream> CreateMixerOutputStream(); static std::unique_ptr<MixerOutputStream> CreateMixerOutputStream();
}; };
inline ExternalAudioPipelineShlib::ExternalMediaMetadata::
ExternalMediaMetadata() = default;
inline ExternalAudioPipelineShlib::ExternalMediaMetadata::ExternalMediaMetadata(
const ExternalMediaMetadata& other) = default;
inline ExternalAudioPipelineShlib::ExternalMediaMetadata::
~ExternalMediaMetadata() = default;
} // namespace media } // namespace media
} // namespace chromecast } // namespace chromecast
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment