aboutsummaryrefslogtreecommitdiff
path: root/cast/streaming/receiver_session.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cast/streaming/receiver_session.cc')
-rw-r--r--cast/streaming/receiver_session.cc16
1 files changed, 11 insertions, 5 deletions
diff --git a/cast/streaming/receiver_session.cc b/cast/streaming/receiver_session.cc
index 8082af8e..b55784b2 100644
--- a/cast/streaming/receiver_session.cc
+++ b/cast/streaming/receiver_session.cc
@@ -29,10 +29,14 @@ namespace {
template <typename Stream, typename Codec>
std::unique_ptr<Stream> SelectStream(
const std::vector<Codec>& preferred_codecs,
+ ReceiverSession::Client* client,
const std::vector<Stream>& offered_streams) {
for (auto codec : preferred_codecs) {
for (const Stream& offered_stream : offered_streams) {
- if (offered_stream.codec == codec) {
+ if (offered_stream.codec == codec &&
+ (offered_stream.stream.codec_parameter.empty() ||
+ client->SupportsCodecParameter(
+ offered_stream.stream.codec_parameter))) {
OSP_VLOG << "Selected " << CodecToString(codec)
<< " as codec for streaming";
return std::make_unique<Stream>(offered_stream);
@@ -378,11 +382,11 @@ void ReceiverSession::SelectStreams(const Offer& offer,
if (offer.cast_mode == CastMode::kMirroring) {
if (!offer.audio_streams.empty() && !preferences_.audio_codecs.empty()) {
properties->selected_audio =
- SelectStream(preferences_.audio_codecs, offer.audio_streams);
+ SelectStream(preferences_.audio_codecs, client_, offer.audio_streams);
}
if (!offer.video_streams.empty() && !preferences_.video_codecs.empty()) {
properties->selected_video =
- SelectStream(preferences_.video_codecs, offer.video_streams);
+ SelectStream(preferences_.video_codecs, client_, offer.video_streams);
}
} else {
OSP_DCHECK(offer.cast_mode == CastMode::kRemoting);
@@ -459,7 +463,8 @@ ReceiverSession::ConfiguredReceivers ReceiverSession::SpawnReceivers(
properties.selected_audio->stream.channels,
properties.selected_audio->bit_rate,
properties.selected_audio->stream.rtp_timebase,
- properties.selected_audio->stream.target_delay};
+ properties.selected_audio->stream.target_delay,
+ properties.selected_audio->stream.codec_parameter};
}
VideoCaptureConfig video_config;
@@ -471,7 +476,8 @@ ReceiverSession::ConfiguredReceivers ReceiverSession::SpawnReceivers(
properties.selected_video->max_frame_rate,
properties.selected_video->max_bit_rate,
properties.selected_video->resolutions,
- properties.selected_video->stream.target_delay};
+ properties.selected_video->stream.target_delay,
+ properties.selected_video->stream.codec_parameter};
}
return ConfiguredReceivers{