Commit e0445cdb authored by Ilya Nikolaevskiy's avatar Ilya Nikolaevskiy Committed by Commit Bot

Pass encode timestamps to WebRTC from WebrtcDummyVideoEncoder

Bug: webrtc:9058
Change-Id: I6bc96a93517dc926e9d847860977ac2d10380a7e
Reviewed-on: https://chromium-review.googlesource.com/977922Reviewed-by: default avatarLambros Lambrou <lambroslambrou@chromium.org>
Commit-Queue: Ilya Nikolaevskiy <ilnik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#546059}
parent 8bc8fd3d
...@@ -134,7 +134,9 @@ int32_t WebrtcDummyVideoEncoder::SetRates(uint32_t bitrate, ...@@ -134,7 +134,9 @@ int32_t WebrtcDummyVideoEncoder::SetRates(uint32_t bitrate,
webrtc::EncodedImageCallback::Result WebrtcDummyVideoEncoder::SendEncodedFrame( webrtc::EncodedImageCallback::Result WebrtcDummyVideoEncoder::SendEncodedFrame(
const WebrtcVideoEncoder::EncodedFrame& frame, const WebrtcVideoEncoder::EncodedFrame& frame,
base::TimeTicks capture_time) { base::TimeTicks capture_time,
base::TimeTicks encode_started_time,
base::TimeTicks encode_finished_time) {
DCHECK(main_task_runner_->BelongsToCurrentThread()); DCHECK(main_task_runner_->BelongsToCurrentThread());
uint8_t* buffer = reinterpret_cast<uint8_t*>( uint8_t* buffer = reinterpret_cast<uint8_t*>(
base::string_as_array(const_cast<std::string*>(&frame.data))); base::string_as_array(const_cast<std::string*>(&frame.data)));
...@@ -153,10 +155,16 @@ webrtc::EncodedImageCallback::Result WebrtcDummyVideoEncoder::SendEncodedFrame( ...@@ -153,10 +155,16 @@ webrtc::EncodedImageCallback::Result WebrtcDummyVideoEncoder::SendEncodedFrame(
encoded_image._frameType = encoded_image._frameType =
frame.key_frame ? webrtc::kVideoFrameKey : webrtc::kVideoFrameDelta; frame.key_frame ? webrtc::kVideoFrameKey : webrtc::kVideoFrameDelta;
int64_t capture_time_ms = (capture_time - base::TimeTicks()).InMilliseconds(); int64_t capture_time_ms = (capture_time - base::TimeTicks()).InMilliseconds();
int64_t encode_started_time_ms =
(encode_started_time - base::TimeTicks()).InMilliseconds();
int64_t encode_finished_time_ms =
(encode_finished_time - base::TimeTicks()).InMilliseconds();
encoded_image.capture_time_ms_ = capture_time_ms; encoded_image.capture_time_ms_ = capture_time_ms;
encoded_image._timeStamp = static_cast<uint32_t>(capture_time_ms * 90); encoded_image._timeStamp = static_cast<uint32_t>(capture_time_ms * 90);
encoded_image.playout_delay_.min_ms = 0; encoded_image.playout_delay_.min_ms = 0;
encoded_image.playout_delay_.max_ms = 0; encoded_image.playout_delay_.max_ms = 0;
encoded_image.timing_.encode_start_ms = encode_started_time_ms;
encoded_image.timing_.encode_finish_ms = encode_finished_time_ms;
webrtc::CodecSpecificInfo codec_specific_info; webrtc::CodecSpecificInfo codec_specific_info;
memset(&codec_specific_info, 0, sizeof(codec_specific_info)); memset(&codec_specific_info, 0, sizeof(codec_specific_info));
...@@ -280,7 +288,9 @@ void WebrtcDummyVideoEncoderFactory::DestroyVideoEncoder( ...@@ -280,7 +288,9 @@ void WebrtcDummyVideoEncoderFactory::DestroyVideoEncoder(
webrtc::EncodedImageCallback::Result webrtc::EncodedImageCallback::Result
WebrtcDummyVideoEncoderFactory::SendEncodedFrame( WebrtcDummyVideoEncoderFactory::SendEncodedFrame(
const WebrtcVideoEncoder::EncodedFrame& frame, const WebrtcVideoEncoder::EncodedFrame& frame,
base::TimeTicks capture_time) { base::TimeTicks capture_time,
base::TimeTicks encode_started_time,
base::TimeTicks encode_finished_time) {
DCHECK(main_task_runner_->BelongsToCurrentThread()); DCHECK(main_task_runner_->BelongsToCurrentThread());
base::AutoLock lock(lock_); base::AutoLock lock(lock_);
if (encoders_.size() != 1) { if (encoders_.size() != 1) {
...@@ -288,7 +298,8 @@ WebrtcDummyVideoEncoderFactory::SendEncodedFrame( ...@@ -288,7 +298,8 @@ WebrtcDummyVideoEncoderFactory::SendEncodedFrame(
return webrtc::EncodedImageCallback::Result( return webrtc::EncodedImageCallback::Result(
webrtc::EncodedImageCallback::Result::ERROR_SEND_FAILED); webrtc::EncodedImageCallback::Result::ERROR_SEND_FAILED);
} }
return encoders_.front()->SendEncodedFrame(frame, capture_time); return encoders_.front()->SendEncodedFrame(
frame, capture_time, encode_started_time, encode_finished_time);
} }
void WebrtcDummyVideoEncoderFactory::RegisterEncoderSelectedCallback( void WebrtcDummyVideoEncoderFactory::RegisterEncoderSelectedCallback(
......
...@@ -53,7 +53,9 @@ class WebrtcDummyVideoEncoder : public webrtc::VideoEncoder { ...@@ -53,7 +53,9 @@ class WebrtcDummyVideoEncoder : public webrtc::VideoEncoder {
webrtc::EncodedImageCallback::Result SendEncodedFrame( webrtc::EncodedImageCallback::Result SendEncodedFrame(
const WebrtcVideoEncoder::EncodedFrame& frame, const WebrtcVideoEncoder::EncodedFrame& frame,
base::TimeTicks capture_time); base::TimeTicks capture_time,
base::TimeTicks encode_started_time,
base::TimeTicks encode_finished_time);
private: private:
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
...@@ -88,7 +90,9 @@ class WebrtcDummyVideoEncoderFactory ...@@ -88,7 +90,9 @@ class WebrtcDummyVideoEncoderFactory
webrtc::EncodedImageCallback::Result SendEncodedFrame( webrtc::EncodedImageCallback::Result SendEncodedFrame(
const WebrtcVideoEncoder::EncodedFrame& packet, const WebrtcVideoEncoder::EncodedFrame& packet,
base::TimeTicks capture_time); base::TimeTicks capture_time,
base::TimeTicks encode_started_time,
base::TimeTicks encode_finished_time);
// Callback will be called once the dummy encoder has been created on // Callback will be called once the dummy encoder has been created on
// |main_task_runner_|. // |main_task_runner_|.
......
...@@ -265,7 +265,9 @@ void WebrtcVideoStream::OnFrameEncoded( ...@@ -265,7 +265,9 @@ void WebrtcVideoStream::OnFrameEncoded(
webrtc::EncodedImageCallback::Result result = webrtc::EncodedImageCallback::Result result =
webrtc_transport_->video_encoder_factory()->SendEncodedFrame( webrtc_transport_->video_encoder_factory()->SendEncodedFrame(
*frame, current_frame_stats_->capture_started_time); *frame, current_frame_stats_->capture_started_time,
current_frame_stats_->encode_started_time,
current_frame_stats_->encode_ended_time);
if (result.error != webrtc::EncodedImageCallback::Result::OK) { if (result.error != webrtc::EncodedImageCallback::Result::OK) {
// TODO(sergeyu): Stop the stream. // TODO(sergeyu): Stop the stream.
LOG(ERROR) << "Failed to send video frame."; LOG(ERROR) << "Failed to send video frame.";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment