webrtc_m130/talk/app/webrtc/videosourceinterface.h

83 lines
3.6 KiB
C
Raw Normal View History

/*
* libjingle
* Copyright 2012 Google Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TALK_APP_WEBRTC_VIDEOSOURCEINTERFACE_H_
#define TALK_APP_WEBRTC_VIDEOSOURCEINTERFACE_H_
#include "talk/app/webrtc/mediastreaminterface.h"
#include "talk/media/base/mediachannel.h"
#include "talk/media/base/videorenderer.h"
namespace webrtc {
// VideoSourceInterface is a reference counted source used for VideoTracks.
// The same source can be used in multiple VideoTracks.
// The methods are only supposed to be called by the PeerConnection
// implementation.
class VideoSourceInterface : public MediaSourceInterface {
public:
// Get access to the source implementation of cricket::VideoCapturer.
// This can be used for receiving frames and state notifications.
// But it should not be used for starting or stopping capturing.
virtual cricket::VideoCapturer* GetVideoCapturer() = 0;
// Stop the video capturer.
virtual void Stop() = 0;
virtual void Restart() = 0;
// TODO(nisse): Delete these backwards compatibility wrappers after
// chrome is updated. Needed now because chrome's MockVideoSource
// defines a method with this signature (and marked with override).
// In addition, we need a dummy default implementation for the new
// AddSink/RemoveSink methods below, because they're unimplemented
// in the same class. This is ugly, but for MockVideoSource it
// doesn't really matter what these methods do, because they're not
// used.
virtual void AddSink(cricket::VideoRenderer* output) {
AddSink(static_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>(output));
}
virtual void RemoveSink(cricket::VideoRenderer* output) {
RemoveSink(
static_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>(output));
}
// Adds |output| to the source to receive frames.
// TODO(nisse): Delete dummy default implementation.
virtual void AddSink(rtc::VideoSinkInterface<cricket::VideoFrame>* output){};
virtual void RemoveSink(
rtc::VideoSinkInterface<cricket::VideoFrame>* output){};
virtual const cricket::VideoOptions* options() const = 0;
virtual cricket::VideoRenderer* FrameInput() = 0;
protected:
virtual ~VideoSourceInterface() {}
};
} // namespace webrtc
#endif // TALK_APP_WEBRTC_VIDEOSOURCEINTERFACE_H_