blob: 2858aff2e5913be5753f363cee350845829c989a [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIASTREAM_MEDIA_STREAM_VIDEO_SINK_H_
#define THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIASTREAM_MEDIA_STREAM_VIDEO_SINK_H_
#include "media/capture/video_capture_types.h"
#include "third_party/blink/public/common/media/video_capture.h"
#include "third_party/blink/public/platform/modules/mediastream/web_media_stream_sink.h"
#include "third_party/blink/public/platform/modules/mediastream/web_media_stream_track.h"
#include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/public/web/modules/mediastream/encoded_video_frame.h"
namespace blink {
// MediaStreamVideoSink is a base class that contains implementation commonly
// useful for implementations of WebMediaStreamSink which
// connect/disconnect the sink implementation to a track to start/stop the flow
// of video frames.
//
// http://dev.w3.org/2011/webrtc/editor/getusermedia.html
// All methods calls must be made from the main render thread.
class BLINK_MODULES_EXPORT MediaStreamVideoSink : public WebMediaStreamSink {
public:
void OnFrameDropped(media::VideoCaptureFrameDropReason reason);
// Required minimum frames per second needed for the sink. Default is zero
// unless overridden.
virtual double GetRequiredMinFramesPerSec() const;
protected:
MediaStreamVideoSink();
~MediaStreamVideoSink() override;
// A subclass should call ConnectToTrack and/or ConnectEncodedToTrack when it
// is ready to receive data from a video track. Before destruction,
// DisconnectFromTrack must be called. This base class holds a reference to
// the WebMediaStreamTrack until DisconnectFromTrack is called.
//
// Calls to these methods must be done on the main render thread.
// Note that |callback| for frame delivery happens on the IO thread.
//
// Warning: Calling DisconnectFromTrack does not immediately stop frame
// delivery through the |callback|, since frames are being delivered on a
// different thread.
//
// |is_sink_secure| indicates if this MediaStreamVideoSink is secure (i.e.
// meets output protection requirement). Generally, this should be false
// unless you know what you are doing.
// Encoded sinks are never secure.
void ConnectToTrack(const WebMediaStreamTrack& track,
const VideoCaptureDeliverFrameCB& callback,
bool is_sink_secure);
void ConnectEncodedToTrack(const WebMediaStreamTrack& track,
const EncodedVideoFrameCB& callback);
void DisconnectFromTrack();
void DisconnectEncodedFromTrack();
// Returns the currently-connected track, or a null instance otherwise.
const WebMediaStreamTrack& connected_track() const {
return connected_track_;
}
private:
// Set by ConnectToTrack() and cleared by DisconnectFromTrack().
WebMediaStreamTrack connected_track_;
WebMediaStreamTrack connected_encoded_track_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIASTREAM_MEDIA_STREAM_VIDEO_SINK_H_