| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/external_video_encoder.h" | 5 #include "media/cast/sender/external_video_encoder.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "media/base/video_frame.h" | 9 #include "media/base/video_frame.h" |
| 10 #include "media/base/video_types.h" | 10 #include "media/base/video_types.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 } | 30 } |
| 31 return result; | 31 return result; |
| 32 } | 32 } |
| 33 | 33 |
| 34 } // namespace | 34 } // namespace |
| 35 | 35 |
| 36 TEST(QuantizerEstimator, EstimatesForTrivialFrames) { | 36 TEST(QuantizerEstimator, EstimatesForTrivialFrames) { |
| 37 QuantizerEstimator qe; | 37 QuantizerEstimator qe; |
| 38 | 38 |
| 39 const gfx::Size frame_size(320, 180); | 39 const gfx::Size frame_size(320, 180); |
| 40 const scoped_ptr<uint8_t[]> black_frame_data( | 40 const std::unique_ptr<uint8_t[]> black_frame_data( |
| 41 new uint8_t[frame_size.GetArea()]); | 41 new uint8_t[frame_size.GetArea()]); |
| 42 memset(black_frame_data.get(), 0, frame_size.GetArea()); | 42 memset(black_frame_data.get(), 0, frame_size.GetArea()); |
| 43 const scoped_refptr<VideoFrame> black_frame = | 43 const scoped_refptr<VideoFrame> black_frame = |
| 44 CreateFrame(black_frame_data.get(), frame_size); | 44 CreateFrame(black_frame_data.get(), frame_size); |
| 45 | 45 |
| 46 // A solid color frame should always generate a minimum quantizer value (4.0) | 46 // A solid color frame should always generate a minimum quantizer value (4.0) |
| 47 // as a key frame. If it is provided repeatedly as delta frames, the minimum | 47 // as a key frame. If it is provided repeatedly as delta frames, the minimum |
| 48 // quantizer value should be repeatedly generated since there is no difference | 48 // quantizer value should be repeatedly generated since there is no difference |
| 49 // between frames. | 49 // between frames. |
| 50 EXPECT_EQ(4.0, qe.EstimateForKeyFrame(*black_frame)); | 50 EXPECT_EQ(4.0, qe.EstimateForKeyFrame(*black_frame)); |
| 51 for (int i = 0; i < 3; ++i) | 51 for (int i = 0; i < 3; ++i) |
| 52 EXPECT_EQ(4.0, qe.EstimateForDeltaFrame(*black_frame)); | 52 EXPECT_EQ(4.0, qe.EstimateForDeltaFrame(*black_frame)); |
| 53 | 53 |
| 54 const scoped_ptr<uint8_t[]> checkerboard_frame_data( | 54 const std::unique_ptr<uint8_t[]> checkerboard_frame_data( |
| 55 new uint8_t[frame_size.GetArea()]); | 55 new uint8_t[frame_size.GetArea()]); |
| 56 for (int i = 0, end = frame_size.GetArea(); i < end; ++i) | 56 for (int i = 0, end = frame_size.GetArea(); i < end; ++i) |
| 57 checkerboard_frame_data.get()[i] = (((i % 2) == 0) ? 0 : 255); | 57 checkerboard_frame_data.get()[i] = (((i % 2) == 0) ? 0 : 255); |
| 58 const scoped_refptr<VideoFrame> checkerboard_frame = | 58 const scoped_refptr<VideoFrame> checkerboard_frame = |
| 59 CreateFrame(checkerboard_frame_data.get(), frame_size); | 59 CreateFrame(checkerboard_frame_data.get(), frame_size); |
| 60 | 60 |
| 61 // Now, introduce a frame with a checkerboard pattern. Half of the pixels | 61 // Now, introduce a frame with a checkerboard pattern. Half of the pixels |
| 62 // will have a difference of 255, and half will have zero difference. | 62 // will have a difference of 255, and half will have zero difference. |
| 63 // Therefore, the Shannon Entropy should be 1.0 and the resulting quantizer | 63 // Therefore, the Shannon Entropy should be 1.0 and the resulting quantizer |
| 64 // estimate should be ~11.9. | 64 // estimate should be ~11.9. |
| 65 EXPECT_NEAR(11.9, qe.EstimateForDeltaFrame(*checkerboard_frame), 0.1); | 65 EXPECT_NEAR(11.9, qe.EstimateForDeltaFrame(*checkerboard_frame), 0.1); |
| 66 | 66 |
| 67 // Now, introduce a series of frames with "random snow" in them. Expect this | 67 // Now, introduce a series of frames with "random snow" in them. Expect this |
| 68 // results in high quantizer estimates. | 68 // results in high quantizer estimates. |
| 69 for (int i = 0; i < 3; ++i) { | 69 for (int i = 0; i < 3; ++i) { |
| 70 int rand_seed = 0xdeadbeef + i; | 70 int rand_seed = 0xdeadbeef + i; |
| 71 const scoped_ptr<uint8_t[]> random_frame_data( | 71 const std::unique_ptr<uint8_t[]> random_frame_data( |
| 72 new uint8_t[frame_size.GetArea()]); | 72 new uint8_t[frame_size.GetArea()]); |
| 73 for (int j = 0, end = frame_size.GetArea(); j < end; ++j) { | 73 for (int j = 0, end = frame_size.GetArea(); j < end; ++j) { |
| 74 rand_seed = (1103515245 * rand_seed + 12345) % (1 << 31); | 74 rand_seed = (1103515245 * rand_seed + 12345) % (1 << 31); |
| 75 random_frame_data.get()[j] = static_cast<uint8_t>(rand_seed & 0xff); | 75 random_frame_data.get()[j] = static_cast<uint8_t>(rand_seed & 0xff); |
| 76 } | 76 } |
| 77 const scoped_refptr<VideoFrame> random_frame = | 77 const scoped_refptr<VideoFrame> random_frame = |
| 78 CreateFrame(random_frame_data.get(), frame_size); | 78 CreateFrame(random_frame_data.get(), frame_size); |
| 79 EXPECT_LE(50.0, qe.EstimateForDeltaFrame(*random_frame)); | 79 EXPECT_LE(50.0, qe.EstimateForDeltaFrame(*random_frame)); |
| 80 } | 80 } |
| 81 } | 81 } |
| 82 | 82 |
| 83 } // namespace cast | 83 } // namespace cast |
| 84 } // namespace media | 84 } // namespace media |
| OLD | NEW |