blob: 512dc91f93c31b33fea3c454e827fc21e99c24d9 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellander1afca732016-02-07 20:46:45 -08002 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellander1afca732016-02-07 20:46:45 -08004 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "media/base/testutils.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000012
andresp@webrtc.orgff689be2015-02-12 11:54:26 +000013#include <algorithm>
kwiberg686a8ef2016-02-26 03:00:35 -080014#include <memory>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000015
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "api/video/video_frame.h"
17#include "media/base/videocapturer.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000018
19namespace cricket {
20
henrike@webrtc.org28e20752013-07-10 00:45:36 +000021// Implementation of VideoCaptureListener.
22VideoCapturerListener::VideoCapturerListener(VideoCapturer* capturer)
nisse79246972016-08-23 05:50:09 -070023 : capturer_(capturer),
24 last_capture_state_(CS_STARTING),
henrike@webrtc.org28e20752013-07-10 00:45:36 +000025 frame_count_(0),
henrike@webrtc.org28e20752013-07-10 00:45:36 +000026 frame_width_(0),
27 frame_height_(0),
henrike@webrtc.org28e20752013-07-10 00:45:36 +000028 resolution_changed_(false) {
29 capturer->SignalStateChange.connect(this,
Yves Gerey665174f2018-06-19 15:03:05 +020030 &VideoCapturerListener::OnStateChange);
nisse79246972016-08-23 05:50:09 -070031 capturer->AddOrUpdateSink(this, rtc::VideoSinkWants());
32}
33
34VideoCapturerListener::~VideoCapturerListener() {
35 capturer_->RemoveSink(this);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000036}
37
38void VideoCapturerListener::OnStateChange(VideoCapturer* capturer,
39 CaptureState result) {
40 last_capture_state_ = result;
41}
42
nisseacd935b2016-11-11 03:55:13 -080043void VideoCapturerListener::OnFrame(const webrtc::VideoFrame& frame) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000044 ++frame_count_;
45 if (1 == frame_count_) {
nisse79246972016-08-23 05:50:09 -070046 frame_width_ = frame.width();
47 frame_height_ = frame.height();
48 } else if (frame_width_ != frame.width() || frame_height_ != frame.height()) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000049 resolution_changed_ = true;
50 }
51}
52
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000053cricket::StreamParams CreateSimStreamParams(
Peter Boström0c4e06b2015-10-07 12:23:21 +020054 const std::string& cname,
55 const std::vector<uint32_t>& ssrcs) {
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000056 cricket::StreamParams sp;
57 cricket::SsrcGroup sg(cricket::kSimSsrcGroupSemantics, ssrcs);
58 sp.ssrcs = ssrcs;
59 sp.ssrc_groups.push_back(sg);
60 sp.cname = cname;
61 return sp;
62}
63
64// There should be an rtx_ssrc per ssrc.
65cricket::StreamParams CreateSimWithRtxStreamParams(
Peter Boström0c4e06b2015-10-07 12:23:21 +020066 const std::string& cname,
67 const std::vector<uint32_t>& ssrcs,
68 const std::vector<uint32_t>& rtx_ssrcs) {
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000069 cricket::StreamParams sp = CreateSimStreamParams(cname, ssrcs);
70 for (size_t i = 0; i < ssrcs.size(); ++i) {
71 sp.ssrcs.push_back(rtx_ssrcs[i]);
Peter Boström0c4e06b2015-10-07 12:23:21 +020072 std::vector<uint32_t> fid_ssrcs;
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000073 fid_ssrcs.push_back(ssrcs[i]);
74 fid_ssrcs.push_back(rtx_ssrcs[i]);
75 cricket::SsrcGroup fid_group(cricket::kFidSsrcGroupSemantics, fid_ssrcs);
76 sp.ssrc_groups.push_back(fid_group);
77 }
78 return sp;
79}
80
brandtr9688e382016-11-22 00:59:48 -080081cricket::StreamParams CreatePrimaryWithFecFrStreamParams(
82 const std::string& cname,
83 uint32_t primary_ssrc,
84 uint32_t flexfec_ssrc) {
85 cricket::StreamParams sp;
86 cricket::SsrcGroup sg(cricket::kFecFrSsrcGroupSemantics,
87 {primary_ssrc, flexfec_ssrc});
88 sp.ssrcs = {primary_ssrc};
89 sp.ssrc_groups.push_back(sg);
90 sp.cname = cname;
91 return sp;
92}
93
henrike@webrtc.org28e20752013-07-10 00:45:36 +000094} // namespace cricket