| Index: media/cast/cast_sender.h
|
| diff --git a/media/cast/cast_sender.h b/media/cast/cast_sender.h
|
| index a15e6d31ee3d090dc21e2eda1d54e337ee14fc01..33b9393844325b8dec5b865da2130015e30c4c43 100644
|
| --- a/media/cast/cast_sender.h
|
| +++ b/media/cast/cast_sender.h
|
| @@ -2,11 +2,10 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
| //
|
| -// This is the main interface for the cast sender. All configuration are done
|
| -// at creation.
|
| +// This is the main interface for the cast sender.
|
| //
|
| -// The FrameInput and PacketReciever interfaces should normally be accessed from
|
| -// the IO thread. However they are allowed to be called from any thread.
|
| +// The AudioFrameInput, VideoFrameInput and PacketReciever interfaces should
|
| +// be accessed from the main thread.
|
|
|
| #ifndef MEDIA_CAST_CAST_SENDER_H_
|
| #define MEDIA_CAST_CAST_SENDER_H_
|
| @@ -23,23 +22,32 @@
|
|
|
| namespace media {
|
| class AudioBus;
|
| +class GpuVideoAcceleratorFactories;
|
| class VideoFrame;
|
| -}
|
|
|
| -namespace media {
|
| namespace cast {
|
| +class AudioSender;
|
| +class VideoSender;
|
|
|
| -// This Class is thread safe.
|
| -class FrameInput : public base::RefCountedThreadSafe<FrameInput> {
|
| +class VideoFrameInput : public base::RefCountedThreadSafe<VideoFrameInput> {
|
| public:
|
| - // The video_frame must be valid until the callback is called.
|
| - // The callback is called from the main cast thread as soon as
|
| - // the encoder is done with the frame; it does not mean that the encoded frame
|
| - // has been sent out.
|
| + // Insert video frames into Cast sender. Frames will be encoded, packetized
|
| + // and sent to the network.
|
| virtual void InsertRawVideoFrame(
|
| const scoped_refptr<media::VideoFrame>& video_frame,
|
| const base::TimeTicks& capture_time) = 0;
|
|
|
| + protected:
|
| + virtual ~VideoFrameInput() {}
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<VideoFrameInput>;
|
| +};
|
| +
|
| +class AudioFrameInput : public base::RefCountedThreadSafe<AudioFrameInput> {
|
| + public:
|
| + // Insert audio frames into Cast sender. Frames will be encoded, packetized
|
| + // and sent to the network.
|
| // The |audio_bus| must be valid until the |done_callback| is called.
|
| // The callback is called from the main cast thread as soon as the encoder is
|
| // done with |audio_bus|; it does not mean that the encoded data has been
|
| @@ -49,36 +57,44 @@ class FrameInput : public base::RefCountedThreadSafe<FrameInput> {
|
| const base::Closure& done_callback) = 0;
|
|
|
| protected:
|
| - virtual ~FrameInput() {}
|
| + virtual ~AudioFrameInput() {}
|
|
|
| private:
|
| - friend class base::RefCountedThreadSafe<FrameInput>;
|
| + friend class base::RefCountedThreadSafe<AudioFrameInput>;
|
| };
|
|
|
| -// This Class is thread safe.
|
| -// The provided CastTransportSender object will always be called from the main
|
| -// cast thread.
|
| -// At least one of AudioSenderConfig and VideoSenderConfig have to be provided.
|
| +// The provided CastTransportSender and the CastSender should be called from the
|
| +// main thread.
|
| class CastSender {
|
| public:
|
| - static CastSender* CreateCastSender(
|
| + static scoped_ptr<CastSender> Create(
|
| scoped_refptr<CastEnvironment> cast_environment,
|
| - const AudioSenderConfig* audio_config,
|
| - const VideoSenderConfig* video_config,
|
| - const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories,
|
| - const CastInitializationCallback& cast_initialization,
|
| transport::CastTransportSender* const transport_sender);
|
|
|
| virtual ~CastSender() {}
|
|
|
| - // All audio and video frames for the session should be inserted to this
|
| - // object.
|
| - // Can be called from any thread.
|
| - virtual scoped_refptr<FrameInput> frame_input() = 0;
|
| + // All video frames for the session should be inserted to this object.
|
| + virtual scoped_refptr<VideoFrameInput> video_frame_input() = 0;
|
| +
|
| + // All audio frames for the session should be inserted to this object.
|
| + virtual scoped_refptr<AudioFrameInput> audio_frame_input() = 0;
|
|
|
| // All RTCP packets for the session should be inserted to this object.
|
| - // Can be called from any thread.
|
| + // This function and the callback must be called on the main thread.
|
| virtual transport::PacketReceiverCallback packet_receiver() = 0;
|
| +
|
| + // Initialize the audio stack. Must be called in order to send audio frames.
|
| + // Status of the initialization will be returned on cast_initialization_cb.
|
| + virtual void InitializeAudio(
|
| + const AudioSenderConfig& audio_config,
|
| + const CastInitializationCallback& cast_initialization_cb) = 0;
|
| +
|
| + // Initialize the video stack. Must be called in order to send video frames.
|
| + // Status of the initialization will be returned on cast_initialization_cb.
|
| + virtual void InitializeVideo(
|
| + const VideoSenderConfig& video_config,
|
| + const CastInitializationCallback& cast_initialization_cb,
|
| + const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories) = 0;
|
| };
|
|
|
| } // namespace cast
|
|
|