diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc index 6f547aff89..08a463098c 100644 --- a/media/engine/simulcast_encoder_adapter.cc +++ b/media/engine/simulcast_encoder_adapter.cc @@ -384,16 +384,22 @@ int SimulcastEncoderAdapter::Encode( const uint32_t frame_timestamp_ms = 1000 * input_image.timestamp() / 90000; // kVideoPayloadTypeFrequency; - std::vector stream_frame_types; + // If adapter is passed through and only one sw encoder does simulcast, + // frame types for all streams should be passed to the encoder unchanged. + // Otherwise a single per-encoder frame type is passed. + std::vector stream_frame_types( + streaminfos_.size() == 1 ? NumberOfStreams(codec_) : 1); if (send_key_frame) { - stream_frame_types.push_back(VideoFrameType::kVideoFrameKey); + std::fill(stream_frame_types.begin(), stream_frame_types.end(), + VideoFrameType::kVideoFrameKey); streaminfos_[stream_idx].key_frame_request = false; } else { if (streaminfos_[stream_idx].framerate_controller->DropFrame( frame_timestamp_ms)) { continue; } - stream_frame_types.push_back(VideoFrameType::kVideoFrameDelta); + std::fill(stream_frame_types.begin(), stream_frame_types.end(), + VideoFrameType::kVideoFrameDelta); } streaminfos_[stream_idx].framerate_controller->AddFrame(frame_timestamp_ms);