| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/cast/sender/video_sender.h" | 5 #include "media/cast/sender/video_sender.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <cstring> | 9 #include <cstring> |
| 10 | 10 |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 scoped_ptr<VideoFrameFactory> VideoSender::CreateVideoFrameFactory() { | 281 scoped_ptr<VideoFrameFactory> VideoSender::CreateVideoFrameFactory() { |
| 282 return video_encoder_ ? video_encoder_->CreateVideoFrameFactory() : nullptr; | 282 return video_encoder_ ? video_encoder_->CreateVideoFrameFactory() : nullptr; |
| 283 } | 283 } |
| 284 | 284 |
| 285 int VideoSender::GetNumberOfFramesInEncoder() const { | 285 int VideoSender::GetNumberOfFramesInEncoder() const { |
| 286 return frames_in_encoder_; | 286 return frames_in_encoder_; |
| 287 } | 287 } |
| 288 | 288 |
| 289 base::TimeDelta VideoSender::GetInFlightMediaDuration() const { | 289 base::TimeDelta VideoSender::GetInFlightMediaDuration() const { |
| 290 if (GetUnacknowledgedFrameCount() > 0) { | 290 if (GetUnacknowledgedFrameCount() > 0) { |
| 291 const uint32 oldest_unacked_frame_id = latest_acked_frame_id_ + 1; | 291 const uint32_t oldest_unacked_frame_id = latest_acked_frame_id_ + 1; |
| 292 return last_enqueued_frame_reference_time_ - | 292 return last_enqueued_frame_reference_time_ - |
| 293 GetRecordedReferenceTime(oldest_unacked_frame_id); | 293 GetRecordedReferenceTime(oldest_unacked_frame_id); |
| 294 } else { | 294 } else { |
| 295 return duration_in_encoder_; | 295 return duration_in_encoder_; |
| 296 } | 296 } |
| 297 } | 297 } |
| 298 | 298 |
| 299 // static | 299 // static |
| 300 int VideoSender::GetMaximumTargetBitrateForFrame( | 300 int VideoSender::GetMaximumTargetBitrateForFrame( |
| 301 const media::VideoFrame& frame) { | 301 const media::VideoFrame& frame) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 321 | 321 |
| 322 // Determine the approximate height of a 16:9 frame having the same area | 322 // Determine the approximate height of a 16:9 frame having the same area |
| 323 // (number of pixels) as |frame|. | 323 // (number of pixels) as |frame|. |
| 324 const gfx::Size& resolution = frame.visible_rect().size(); | 324 const gfx::Size& resolution = frame.visible_rect().size(); |
| 325 const int lines_of_resolution = | 325 const int lines_of_resolution = |
| 326 ((resolution.width() * 9) == (resolution.height() * 16)) ? | 326 ((resolution.width() * 9) == (resolution.height() * 16)) ? |
| 327 resolution.height() : | 327 resolution.height() : |
| 328 static_cast<int>(sqrt(resolution.GetArea() * 9.0 / 16.0)); | 328 static_cast<int>(sqrt(resolution.GetArea() * 9.0 / 16.0)); |
| 329 | 329 |
| 330 // Linearly translate from |lines_of_resolution| to a maximum target bitrate. | 330 // Linearly translate from |lines_of_resolution| to a maximum target bitrate. |
| 331 int64 result = lines_of_resolution - STANDARD_RESOLUTION_LINES; | 331 int64_t result = lines_of_resolution - STANDARD_RESOLUTION_LINES; |
| 332 result *= BITRATE_FOR_HIGH_RESOLUTION - BITRATE_FOR_STANDARD_RESOLUTION; | 332 result *= BITRATE_FOR_HIGH_RESOLUTION - BITRATE_FOR_STANDARD_RESOLUTION; |
| 333 result /= HIGH_RESOLUTION_LINES - STANDARD_RESOLUTION_LINES; | 333 result /= HIGH_RESOLUTION_LINES - STANDARD_RESOLUTION_LINES; |
| 334 result += BITRATE_FOR_STANDARD_RESOLUTION; | 334 result += BITRATE_FOR_STANDARD_RESOLUTION; |
| 335 | 335 |
| 336 // Boost the result for high frame rate content. | 336 // Boost the result for high frame rate content. |
| 337 base::TimeDelta frame_duration; | 337 base::TimeDelta frame_duration; |
| 338 if (frame.metadata()->GetTimeDelta(media::VideoFrameMetadata::FRAME_DURATION, | 338 if (frame.metadata()->GetTimeDelta(media::VideoFrameMetadata::FRAME_DURATION, |
| 339 &frame_duration) && | 339 &frame_duration) && |
| 340 frame_duration > base::TimeDelta() && | 340 frame_duration > base::TimeDelta() && |
| 341 frame_duration.InMicroseconds() <= HIGH_FRAME_RATE_THRESHOLD_USEC) { | 341 frame_duration.InMicroseconds() <= HIGH_FRAME_RATE_THRESHOLD_USEC) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 media::VideoFrameMetadata::RESOURCE_UTILIZATION, | 381 media::VideoFrameMetadata::RESOURCE_UTILIZATION, |
| 382 encoded_frame->dependency == EncodedFrame::KEY ? | 382 encoded_frame->dependency == EncodedFrame::KEY ? |
| 383 std::min(1.0, attenuated_utilization) : attenuated_utilization); | 383 std::min(1.0, attenuated_utilization) : attenuated_utilization); |
| 384 } | 384 } |
| 385 | 385 |
| 386 SendEncodedFrame(encoder_bitrate, encoded_frame.Pass()); | 386 SendEncodedFrame(encoder_bitrate, encoded_frame.Pass()); |
| 387 } | 387 } |
| 388 | 388 |
| 389 } // namespace cast | 389 } // namespace cast |
| 390 } // namespace media | 390 } // namespace media |
| OLD | NEW |