This means there's only one thread hop to the worker thread. At the video engine level, SetOptions and SetSource are combined into one method (all within the same critical section) which ensures that no frame will be encoded while SetVideoSend is only partially finished. BUG=webrtc:5691 Review-Url: https://codereview.webrtc.org/1838413002 Cr-Commit-Position: refs/heads/master@{#13022}
115 lines
4.2 KiB
C++
115 lines
4.2 KiB
C++
/*
|
|
* Copyright 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_API_MEDIASTREAMPROVIDER_H_
|
|
#define WEBRTC_API_MEDIASTREAMPROVIDER_H_
|
|
|
|
#include <memory>
|
|
|
|
#include "webrtc/api/rtpsenderinterface.h"
|
|
#include "webrtc/base/basictypes.h"
|
|
#include "webrtc/media/base/videosinkinterface.h"
|
|
#include "webrtc/media/base/videosourceinterface.h"
|
|
|
|
namespace cricket {
|
|
|
|
class AudioSource;
|
|
class VideoFrame;
|
|
struct AudioOptions;
|
|
struct VideoOptions;
|
|
|
|
} // namespace cricket
|
|
|
|
namespace webrtc {
|
|
|
|
class AudioSinkInterface;
|
|
|
|
// TODO(deadbeef): Change the key from an ssrc to a "sender_id" or
|
|
// "receiver_id" string, which will be the MSID in the short term and MID in
|
|
// the long term.
|
|
|
|
// TODO(deadbeef): These interfaces are effectively just a way for the
|
|
// RtpSenders/Receivers to get to the BaseChannels. These interfaces should be
|
|
// refactored away eventually, as the classes converge.
|
|
|
|
// This interface is called by AudioRtpSender/Receivers to change the settings
|
|
// of an audio track connected to certain PeerConnection.
|
|
class AudioProviderInterface {
|
|
public:
|
|
// Enable/disable the audio playout of a remote audio track with |ssrc|.
|
|
virtual void SetAudioPlayout(uint32_t ssrc, bool enable) = 0;
|
|
// Enable/disable sending audio on the local audio track with |ssrc|.
|
|
// When |enable| is true |options| should be applied to the audio track.
|
|
virtual void SetAudioSend(uint32_t ssrc,
|
|
bool enable,
|
|
const cricket::AudioOptions& options,
|
|
cricket::AudioSource* source) = 0;
|
|
|
|
// Sets the audio playout volume of a remote audio track with |ssrc|.
|
|
// |volume| is in the range of [0, 10].
|
|
virtual void SetAudioPlayoutVolume(uint32_t ssrc, double volume) = 0;
|
|
|
|
// Allows for setting a direct audio sink for an incoming audio source.
|
|
// Only one audio sink is supported per ssrc and ownership of the sink is
|
|
// passed to the provider.
|
|
virtual void SetRawAudioSink(
|
|
uint32_t ssrc,
|
|
std::unique_ptr<webrtc::AudioSinkInterface> sink) = 0;
|
|
|
|
virtual RtpParameters GetAudioRtpSendParameters(uint32_t ssrc) const = 0;
|
|
virtual bool SetAudioRtpSendParameters(uint32_t ssrc,
|
|
const RtpParameters& parameters) = 0;
|
|
|
|
virtual RtpParameters GetAudioRtpReceiveParameters(uint32_t ssrc) const = 0;
|
|
virtual bool SetAudioRtpReceiveParameters(
|
|
uint32_t ssrc,
|
|
const RtpParameters& parameters) = 0;
|
|
|
|
protected:
|
|
virtual ~AudioProviderInterface() {}
|
|
};
|
|
|
|
// This interface is called by VideoRtpSender/Receivers to change the settings
|
|
// of a video track connected to a certain PeerConnection.
|
|
class VideoProviderInterface {
|
|
public:
|
|
// Enable/disable the video playout of a remote video track with |ssrc|.
|
|
virtual void SetVideoPlayout(
|
|
uint32_t ssrc,
|
|
bool enable,
|
|
rtc::VideoSinkInterface<cricket::VideoFrame>* sink) = 0;
|
|
// Enable/disable sending video on the local video track with |ssrc|.
|
|
// TODO(deadbeef): Make |options| a reference parameter.
|
|
// TODO(deadbeef): Eventually, |enable| and |options| will be contained
|
|
// in |source|. When that happens, remove those parameters and rename
|
|
// this to SetVideoSource.
|
|
virtual void SetVideoSend(
|
|
uint32_t ssrc,
|
|
bool enable,
|
|
const cricket::VideoOptions* options,
|
|
rtc::VideoSourceInterface<cricket::VideoFrame>* source) = 0;
|
|
|
|
virtual RtpParameters GetVideoRtpSendParameters(uint32_t ssrc) const = 0;
|
|
virtual bool SetVideoRtpSendParameters(uint32_t ssrc,
|
|
const RtpParameters& parameters) = 0;
|
|
|
|
virtual RtpParameters GetVideoRtpReceiveParameters(uint32_t ssrc) const = 0;
|
|
virtual bool SetVideoRtpReceiveParameters(
|
|
uint32_t ssrc,
|
|
const RtpParameters& parameters) = 0;
|
|
|
|
protected:
|
|
virtual ~VideoProviderInterface() {}
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_API_MEDIASTREAMPROVIDER_H_
|