| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <cmath> | 9 #include <cmath> |
| 10 #include <memory> |
| 10 #include <vector> | 11 #include <vector> |
| 11 | 12 |
| 12 #include "base/callback_helpers.h" | 13 #include "base/callback_helpers.h" |
| 13 #include "base/command_line.h" | 14 #include "base/command_line.h" |
| 14 #include "base/macros.h" | 15 #include "base/macros.h" |
| 15 #include "base/memory/scoped_ptr.h" | |
| 16 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
| 17 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
| 18 #include "base/strings/stringprintf.h" | 18 #include "base/strings/stringprintf.h" |
| 19 #include "chrome/browser/extensions/extension_apitest.h" | 19 #include "chrome/browser/extensions/extension_apitest.h" |
| 20 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" |
| 21 #include "content/public/common/content_switches.h" | 21 #include "content/public/common/content_switches.h" |
| 22 #include "extensions/common/switches.h" | 22 #include "extensions/common/switches.h" |
| 23 #include "media/base/bind_to_current_loop.h" | 23 #include "media/base/bind_to_current_loop.h" |
| 24 #include "media/base/video_frame.h" | 24 #include "media/base/video_frame.h" |
| 25 #include "media/cast/cast_config.h" | 25 #include "media/cast/cast_config.h" |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 if (expected_tones_.empty() && expected_yuv_colors_.empty()) { | 149 if (expected_tones_.empty() && expected_yuv_colors_.empty()) { |
| 150 base::ResetAndReturn(&done_callback_).Run(); | 150 base::ResetAndReturn(&done_callback_).Run(); |
| 151 } else { | 151 } else { |
| 152 LOG(INFO) << "Waiting to encounter " << expected_tones_.size() | 152 LOG(INFO) << "Waiting to encounter " << expected_tones_.size() |
| 153 << " more tone(s) and " << expected_yuv_colors_.size() | 153 << " more tone(s) and " << expected_yuv_colors_.size() |
| 154 << " more color(s)."; | 154 << " more color(s)."; |
| 155 } | 155 } |
| 156 } | 156 } |
| 157 | 157 |
| 158 // Invoked by InProcessReceiver for each received audio frame. | 158 // Invoked by InProcessReceiver for each received audio frame. |
| 159 void OnAudioFrame(scoped_ptr<media::AudioBus> audio_frame, | 159 void OnAudioFrame(std::unique_ptr<media::AudioBus> audio_frame, |
| 160 const base::TimeTicks& playout_time, | 160 const base::TimeTicks& playout_time, |
| 161 bool is_continuous) override { | 161 bool is_continuous) override { |
| 162 DCHECK(cast_env()->CurrentlyOn(media::cast::CastEnvironment::MAIN)); | 162 DCHECK(cast_env()->CurrentlyOn(media::cast::CastEnvironment::MAIN)); |
| 163 | 163 |
| 164 if (audio_frame->frames() <= 0) { | 164 if (audio_frame->frames() <= 0) { |
| 165 NOTREACHED() << "OnAudioFrame called with no samples?!?"; | 165 NOTREACHED() << "OnAudioFrame called with no samples?!?"; |
| 166 return; | 166 return; |
| 167 } | 167 } |
| 168 | 168 |
| 169 if (done_callback_.is_null() || expected_tones_.empty()) | 169 if (done_callback_.is_null() || expected_tones_.empty()) |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 | 289 |
| 290 return result; | 290 return result; |
| 291 } | 291 } |
| 292 | 292 |
| 293 static uint8_t ComputeMedianIntensityInRegionInPlane(const gfx::Rect& region, | 293 static uint8_t ComputeMedianIntensityInRegionInPlane(const gfx::Rect& region, |
| 294 int stride, | 294 int stride, |
| 295 const uint8_t* data) { | 295 const uint8_t* data) { |
| 296 if (region.IsEmpty()) | 296 if (region.IsEmpty()) |
| 297 return 0; | 297 return 0; |
| 298 const size_t num_values = region.size().GetArea(); | 298 const size_t num_values = region.size().GetArea(); |
| 299 scoped_ptr<uint8_t[]> values(new uint8_t[num_values]); | 299 std::unique_ptr<uint8_t[]> values(new uint8_t[num_values]); |
| 300 for (int y = 0; y < region.height(); ++y) { | 300 for (int y = 0; y < region.height(); ++y) { |
| 301 memcpy(values.get() + y * region.width(), | 301 memcpy(values.get() + y * region.width(), |
| 302 data + (region.y() + y) * stride + region.x(), | 302 data + (region.y() + y) * stride + region.x(), |
| 303 region.width()); | 303 region.width()); |
| 304 } | 304 } |
| 305 const size_t middle_idx = num_values / 2; | 305 const size_t middle_idx = num_values / 2; |
| 306 std::nth_element(values.get(), | 306 std::nth_element(values.get(), |
| 307 values.get() + middle_idx, | 307 values.get() + middle_idx, |
| 308 values.get() + num_values); | 308 values.get() + num_values); |
| 309 return values[middle_idx]; | 309 return values[middle_idx]; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 337 // content and check whether it matches expectations. | 337 // content and check whether it matches expectations. |
| 338 // | 338 // |
| 339 // TODO(miu): Now that this test has been long-stable on Release build bots, it | 339 // TODO(miu): Now that this test has been long-stable on Release build bots, it |
| 340 // should be enabled for the Debug build bots. http://crbug.com/396413 | 340 // should be enabled for the Debug build bots. http://crbug.com/396413 |
| 341 #if defined(NDEBUG) | 341 #if defined(NDEBUG) |
| 342 #define MAYBE_EndToEnd EndToEnd | 342 #define MAYBE_EndToEnd EndToEnd |
| 343 #else | 343 #else |
| 344 #define MAYBE_EndToEnd DISABLED_EndToEnd | 344 #define MAYBE_EndToEnd DISABLED_EndToEnd |
| 345 #endif | 345 #endif |
| 346 IN_PROC_BROWSER_TEST_F(CastStreamingApiTestWithPixelOutput, MAYBE_EndToEnd) { | 346 IN_PROC_BROWSER_TEST_F(CastStreamingApiTestWithPixelOutput, MAYBE_EndToEnd) { |
| 347 scoped_ptr<net::UDPServerSocket> receive_socket( | 347 std::unique_ptr<net::UDPServerSocket> receive_socket( |
| 348 new net::UDPServerSocket(NULL, net::NetLog::Source())); | 348 new net::UDPServerSocket(NULL, net::NetLog::Source())); |
| 349 receive_socket->AllowAddressReuse(); | 349 receive_socket->AllowAddressReuse(); |
| 350 ASSERT_EQ(net::OK, receive_socket->Listen(GetFreeLocalPort())); | 350 ASSERT_EQ(net::OK, receive_socket->Listen(GetFreeLocalPort())); |
| 351 net::IPEndPoint receiver_end_point; | 351 net::IPEndPoint receiver_end_point; |
| 352 ASSERT_EQ(net::OK, receive_socket->GetLocalAddress(&receiver_end_point)); | 352 ASSERT_EQ(net::OK, receive_socket->GetLocalAddress(&receiver_end_point)); |
| 353 receive_socket.reset(); | 353 receive_socket.reset(); |
| 354 | 354 |
| 355 // Start the in-process receiver that examines audio/video for the expected | 355 // Start the in-process receiver that examines audio/video for the expected |
| 356 // test patterns. | 356 // test patterns. |
| 357 const scoped_refptr<media::cast::StandaloneCastEnvironment> cast_environment( | 357 const scoped_refptr<media::cast::StandaloneCastEnvironment> cast_environment( |
| (...skipping 30 matching lines...) Expand all Loading... |
| 388 | 388 |
| 389 delete receiver; | 389 delete receiver; |
| 390 cast_environment->Shutdown(); | 390 cast_environment->Shutdown(); |
| 391 } | 391 } |
| 392 | 392 |
| 393 IN_PROC_BROWSER_TEST_F(CastStreamingApiTestWithPixelOutput, RtpStreamError) { | 393 IN_PROC_BROWSER_TEST_F(CastStreamingApiTestWithPixelOutput, RtpStreamError) { |
| 394 ASSERT_TRUE(RunExtensionSubtest("cast_streaming", "rtp_stream_error.html")); | 394 ASSERT_TRUE(RunExtensionSubtest("cast_streaming", "rtp_stream_error.html")); |
| 395 } | 395 } |
| 396 | 396 |
| 397 } // namespace extensions | 397 } // namespace extensions |
| OLD | NEW |