// 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_
