Index: content/renderer/media/rtc_encoding_video_capturer.cc |
diff --git a/content/renderer/media/rtc_encoding_video_capturer.cc b/content/renderer/media/rtc_encoding_video_capturer.cc |
deleted file mode 100644 |
index 9561c8323ae8964a0d8eaf15a403382b19838a85..0000000000000000000000000000000000000000 |
--- a/content/renderer/media/rtc_encoding_video_capturer.cc |
+++ /dev/null |
@@ -1,260 +0,0 @@ |
-// 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. |
- |
-#include "content/renderer/media/rtc_encoding_video_capturer.h" |
- |
-#include "base/logging.h" |
-#include "media/base/encoded_bitstream_buffer.h" |
- |
-namespace content { |
- |
-namespace { |
- |
-static const unsigned int kMaxBitrateKbps = 50 * 1000; |
- |
-} // namespace |
- |
-// Client of EncodedVideoSource. This object is created and owned by the |
-// RtcEncodingVideoCapturer. |
-class RtcEncodingVideoCapturer::EncodedVideoSourceClient : |
- public media::EncodedVideoSource::Client { |
- public: |
- EncodedVideoSourceClient( |
- media::EncodedVideoSource* encoded_video_source, |
- media::VideoEncodingParameters params, |
- webrtc::VideoCodecType rtc_codec_type); |
- virtual ~EncodedVideoSourceClient(); |
- |
- // media::EncodedVideoSource::Client implementation. |
- virtual void OnOpened( |
- const media::VideoEncodingParameters& params) OVERRIDE; |
- virtual void OnClosed() OVERRIDE; |
- virtual void OnBufferReady( |
- scoped_refptr<const media::EncodedBitstreamBuffer> buffer) OVERRIDE; |
- virtual void OnConfigChanged( |
- const media::RuntimeVideoEncodingParameters& params) OVERRIDE; |
- |
- // Getters and setters for bitstream properties. |
- media::RuntimeVideoEncodingParameters runtime_params() const; |
- void set_round_trip_time(base::TimeDelta round_trip_time); |
- void set_callback(webrtc::EncodedImageCallback* callback); |
- |
- // Sets target bitrate and framerate. |
- void SetRates(uint32_t target_bitrate, uint32_t frame_rate); |
- |
- // Requests key frame. |
- void RequestKeyFrame(); |
- |
- private: |
- // Convert buffer to webrtc types and invoke encode complete callback. |
- void ReportEncodedFrame( |
- scoped_refptr<const media::EncodedBitstreamBuffer> buffer); |
- |
- media::VideoEncodingParameters params_; |
- webrtc::VideoCodecType rtc_codec_type_; |
- bool finished_; |
- |
- base::Time time_base_; |
- base::TimeDelta round_trip_time_; |
- media::EncodedVideoSource* encoded_video_source_; |
- webrtc::EncodedImageCallback* callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(EncodedVideoSourceClient); |
-}; |
- |
-RtcEncodingVideoCapturer::EncodedVideoSourceClient::EncodedVideoSourceClient( |
- media::EncodedVideoSource* encoded_video_source, |
- media::VideoEncodingParameters params, |
- webrtc::VideoCodecType rtc_codec_type) |
- : params_(params), |
- rtc_codec_type_(rtc_codec_type), |
- finished_(false), |
- encoded_video_source_(encoded_video_source), |
- callback_(NULL) { |
- DCHECK(encoded_video_source_); |
- encoded_video_source_->OpenBitstream(this, params); |
-} |
- |
-RtcEncodingVideoCapturer::EncodedVideoSourceClient:: |
- ~EncodedVideoSourceClient() { |
- if (!finished_) |
- encoded_video_source_->CloseBitstream(); |
-} |
- |
-media::RuntimeVideoEncodingParameters |
- RtcEncodingVideoCapturer::EncodedVideoSourceClient::runtime_params() const { |
- return params_.runtime_params; |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::set_round_trip_time( |
- base::TimeDelta round_trip_time) { |
- round_trip_time_ = round_trip_time; |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::set_callback( |
- webrtc::EncodedImageCallback* callback) { |
- DCHECK(!callback_); |
- callback_ = callback; |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::OnOpened( |
- const media::VideoEncodingParameters& params) { |
- params_ = params; |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::OnClosed() { |
- finished_ = true; |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::OnBufferReady( |
- scoped_refptr<const media::EncodedBitstreamBuffer> buffer) { |
- DCHECK(!finished_ && buffer.get()); |
- |
- // First buffer constitutes the origin of the time for this bitstream context. |
- if (time_base_.is_null()) |
- time_base_ = buffer->metadata().timestamp; |
- |
- ReportEncodedFrame(buffer); |
- encoded_video_source_->ReturnBitstreamBuffer(buffer); |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::OnConfigChanged( |
- const media::RuntimeVideoEncodingParameters& params) { |
- params_.runtime_params = params; |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::SetRates( |
- uint32_t target_bitrate, uint32_t frame_rate) { |
- params_.runtime_params.target_bitrate = target_bitrate; |
- params_.runtime_params.frames_per_second = frame_rate; |
- encoded_video_source_->TrySetBitstreamConfig(params_.runtime_params); |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::RequestKeyFrame() { |
- encoded_video_source_->RequestKeyFrame(); |
-} |
- |
-void RtcEncodingVideoCapturer::EncodedVideoSourceClient::ReportEncodedFrame( |
- scoped_refptr<const media::EncodedBitstreamBuffer> buffer) { |
- if (!callback_) |
- return; |
- |
- webrtc::EncodedImage image; |
- webrtc::CodecSpecificInfo codecInfo; |
- webrtc::RTPFragmentationHeader fragHeader; |
- |
- // TODO(hshi): remove this const_cast. Unfortunately webrtc::EncodedImage |
- // defines member |_buffer| of type uint8_t* even though webrtc never modifies |
- // the buffer contents. |
- image._buffer = const_cast<uint8_t*>(buffer->buffer()); |
- image._length = buffer->size(); |
- image._size = image._length; |
- |
- const media::BufferEncodingMetadata& metadata = buffer->metadata(); |
- base::TimeDelta capture_time = metadata.timestamp - time_base_; |
- image.capture_time_ms_ = capture_time.InMilliseconds(); |
- // Convert capture time to 90 kHz RTP timestamp. |
- image._timeStamp = (capture_time * 90000).InSeconds(); |
- if (metadata.key_frame) { |
- image._frameType = webrtc::kKeyFrame; |
- } else { |
- image._frameType = webrtc::kDeltaFrame; |
- } |
- image._completeFrame = true; |
- image._encodedWidth = params_.resolution.width(); |
- image._encodedHeight = params_.resolution.height(); |
- |
- // TODO(hshi): generate codec specific info for VP8. |
- codecInfo.codecType = rtc_codec_type_; |
- |
- // Generate header containing a single fragmentation. |
- fragHeader.VerifyAndAllocateFragmentationHeader(1); |
- fragHeader.fragmentationOffset[0] = 0; |
- fragHeader.fragmentationLength[0] = buffer->size(); |
- fragHeader.fragmentationPlType[0] = 0; |
- fragHeader.fragmentationTimeDiff[0] = 0; |
- |
- callback_->Encoded(image, &codecInfo, &fragHeader); |
-} |
- |
-// RtcEncodingVideoCapturer |
-RtcEncodingVideoCapturer::RtcEncodingVideoCapturer( |
- media::EncodedVideoSource* encoded_video_source, |
- webrtc::VideoCodecType codec_type) |
- : encoded_video_source_(encoded_video_source), |
- rtc_codec_type_(codec_type) { |
-} |
- |
-RtcEncodingVideoCapturer::~RtcEncodingVideoCapturer() { |
-} |
- |
-int32_t RtcEncodingVideoCapturer::InitEncode( |
- const webrtc::VideoCodec* codecSettings, |
- int32_t numberOfCores, |
- uint32_t maxPayloadSize) { |
- DCHECK(!encoded_video_source_client_); |
- if (codecSettings->codecType != rtc_codec_type_) |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- if (codecSettings->startBitrate > kMaxBitrateKbps || |
- codecSettings->maxBitrate > kMaxBitrateKbps) |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- |
- // Convert |codecSettings| to |params|. |
- media::VideoEncodingParameters params; |
- params.codec_name = codecSettings->plName; |
- params.resolution = gfx::Size(codecSettings->width, codecSettings->height); |
- params.runtime_params.target_bitrate = codecSettings->startBitrate * 1000; |
- params.runtime_params.max_bitrate = codecSettings->maxBitrate * 1000; |
- params.runtime_params.frames_per_second = codecSettings->maxFramerate; |
- encoded_video_source_client_.reset(new EncodedVideoSourceClient( |
- encoded_video_source_, params, rtc_codec_type_)); |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int32_t RtcEncodingVideoCapturer::Encode( |
- const webrtc::I420VideoFrame& /* inputImage */, |
- const webrtc::CodecSpecificInfo* codecSpecificInfo, |
- const std::vector<webrtc::VideoFrameType>* frame_types) { |
- if (frame_types && !frame_types->empty()) { |
- webrtc::VideoFrameType type = frame_types->front(); |
- if (type == webrtc::kKeyFrame) |
- encoded_video_source_client_->RequestKeyFrame(); |
- } |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int32_t RtcEncodingVideoCapturer::RegisterEncodeCompleteCallback( |
- webrtc::EncodedImageCallback* callback) { |
- DCHECK(encoded_video_source_client_); |
- encoded_video_source_client_->set_callback(callback); |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int32_t RtcEncodingVideoCapturer::Release() { |
- DCHECK(encoded_video_source_client_); |
- encoded_video_source_client_.reset(NULL); |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int32_t RtcEncodingVideoCapturer::SetChannelParameters( |
- uint32_t /* packetLoss */, |
- int rtt_in_ms) { |
- if (!encoded_video_source_client_) |
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
- encoded_video_source_client_->set_round_trip_time( |
- base::TimeDelta::FromMilliseconds(rtt_in_ms)); |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int32_t RtcEncodingVideoCapturer::SetRates(uint32_t newBitRate, |
- uint32_t frameRate) { |
- if (!encoded_video_source_client_) |
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
- if (newBitRate > kMaxBitrateKbps) |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- encoded_video_source_client_->SetRates(newBitRate * 1000, frameRate); |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-} // namespace content |