| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/base/video_frame.h" | 5 #include "media/base/video_frame.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "media/base/buffers.h" | 10 #include "media/base/buffers.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 // makes sure that all the pixels of the RBG frame equal |expect_rgb_color|. | 42 // makes sure that all the pixels of the RBG frame equal |expect_rgb_color|. |
| 43 void ExpectFrameColor(media::VideoFrame* yv12_frame, uint32 expect_rgb_color) { | 43 void ExpectFrameColor(media::VideoFrame* yv12_frame, uint32 expect_rgb_color) { |
| 44 ASSERT_EQ(VideoFrame::YV12, yv12_frame->format()); | 44 ASSERT_EQ(VideoFrame::YV12, yv12_frame->format()); |
| 45 ASSERT_EQ(yv12_frame->stride(VideoFrame::kUPlane), | 45 ASSERT_EQ(yv12_frame->stride(VideoFrame::kUPlane), |
| 46 yv12_frame->stride(VideoFrame::kVPlane)); | 46 yv12_frame->stride(VideoFrame::kVPlane)); |
| 47 | 47 |
| 48 scoped_refptr<media::VideoFrame> rgb_frame; | 48 scoped_refptr<media::VideoFrame> rgb_frame; |
| 49 rgb_frame = media::VideoFrame::CreateFrame(VideoFrame::RGB32, | 49 rgb_frame = media::VideoFrame::CreateFrame(VideoFrame::RGB32, |
| 50 yv12_frame->width(), | 50 yv12_frame->width(), |
| 51 yv12_frame->height(), | 51 yv12_frame->height(), |
| 52 yv12_frame->GetTimestamp(), | 52 yv12_frame->GetTimestamp()); |
| 53 yv12_frame->GetDuration()); | |
| 54 | 53 |
| 55 ASSERT_EQ(yv12_frame->width(), rgb_frame->width()); | 54 ASSERT_EQ(yv12_frame->width(), rgb_frame->width()); |
| 56 ASSERT_EQ(yv12_frame->height(), rgb_frame->height()); | 55 ASSERT_EQ(yv12_frame->height(), rgb_frame->height()); |
| 57 | 56 |
| 58 media::ConvertYUVToRGB32(yv12_frame->data(VideoFrame::kYPlane), | 57 media::ConvertYUVToRGB32(yv12_frame->data(VideoFrame::kYPlane), |
| 59 yv12_frame->data(VideoFrame::kUPlane), | 58 yv12_frame->data(VideoFrame::kUPlane), |
| 60 yv12_frame->data(VideoFrame::kVPlane), | 59 yv12_frame->data(VideoFrame::kVPlane), |
| 61 rgb_frame->data(VideoFrame::kRGBPlane), | 60 rgb_frame->data(VideoFrame::kRGBPlane), |
| 62 rgb_frame->width(), | 61 rgb_frame->width(), |
| 63 rgb_frame->height(), | 62 rgb_frame->height(), |
| (...skipping 16 matching lines...) Expand all Loading... |
| 80 | 79 |
| 81 // Fill each plane to its reported extents and verify accessors report non | 80 // Fill each plane to its reported extents and verify accessors report non |
| 82 // zero values. Additionally, for the first plane verify the rows and | 81 // zero values. Additionally, for the first plane verify the rows and |
| 83 // row_bytes values are correct. | 82 // row_bytes values are correct. |
| 84 void ExpectFrameExtents(VideoFrame::Format format, int planes, | 83 void ExpectFrameExtents(VideoFrame::Format format, int planes, |
| 85 int bytes_per_pixel, const char* expected_hash) { | 84 int bytes_per_pixel, const char* expected_hash) { |
| 86 const unsigned char kFillByte = 0x80; | 85 const unsigned char kFillByte = 0x80; |
| 87 const size_t kWidth = 61; | 86 const size_t kWidth = 61; |
| 88 const size_t kHeight = 31; | 87 const size_t kHeight = 31; |
| 89 const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337); | 88 const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337); |
| 90 const base::TimeDelta kDuration = base::TimeDelta::FromMicroseconds(1667); | |
| 91 | 89 |
| 92 scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame( | 90 scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame( |
| 93 format, kWidth, kHeight, kTimestamp, kDuration); | 91 format, kWidth, kHeight, kTimestamp); |
| 94 ASSERT_TRUE(frame); | 92 ASSERT_TRUE(frame); |
| 95 | 93 |
| 96 for(int plane = 0; plane < planes; plane++) { | 94 for(int plane = 0; plane < planes; plane++) { |
| 97 SCOPED_TRACE(base::StringPrintf("Checking plane %d", plane)); | 95 SCOPED_TRACE(base::StringPrintf("Checking plane %d", plane)); |
| 98 EXPECT_TRUE(frame->data(plane)); | 96 EXPECT_TRUE(frame->data(plane)); |
| 99 EXPECT_TRUE(frame->stride(plane)); | 97 EXPECT_TRUE(frame->stride(plane)); |
| 100 EXPECT_TRUE(frame->rows(plane)); | 98 EXPECT_TRUE(frame->rows(plane)); |
| 101 EXPECT_TRUE(frame->row_bytes(plane)); | 99 EXPECT_TRUE(frame->row_bytes(plane)); |
| 102 | 100 |
| 103 if (plane == 0) { | 101 if (plane == 0) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 114 frame->HashFrameForTesting(&context); | 112 frame->HashFrameForTesting(&context); |
| 115 base::MD5Digest digest; | 113 base::MD5Digest digest; |
| 116 base::MD5Final(&digest, &context); | 114 base::MD5Final(&digest, &context); |
| 117 EXPECT_EQ(MD5DigestToBase16(digest), expected_hash); | 115 EXPECT_EQ(MD5DigestToBase16(digest), expected_hash); |
| 118 } | 116 } |
| 119 | 117 |
| 120 TEST(VideoFrame, CreateFrame) { | 118 TEST(VideoFrame, CreateFrame) { |
| 121 const size_t kWidth = 64; | 119 const size_t kWidth = 64; |
| 122 const size_t kHeight = 48; | 120 const size_t kHeight = 48; |
| 123 const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337); | 121 const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337); |
| 124 const base::TimeDelta kDuration = base::TimeDelta::FromMicroseconds(1667); | |
| 125 | 122 |
| 126 // Create a YV12 Video Frame. | 123 // Create a YV12 Video Frame. |
| 127 scoped_refptr<media::VideoFrame> frame = | 124 scoped_refptr<media::VideoFrame> frame = |
| 128 VideoFrame::CreateFrame(media::VideoFrame::YV12, kWidth, kHeight, | 125 VideoFrame::CreateFrame(media::VideoFrame::YV12, kWidth, kHeight, |
| 129 kTimestamp, kDuration); | 126 kTimestamp); |
| 130 ASSERT_TRUE(frame); | 127 ASSERT_TRUE(frame); |
| 131 | 128 |
| 132 // Test VideoFrame implementation. | 129 // Test VideoFrame implementation. |
| 133 EXPECT_EQ(media::VideoFrame::YV12, frame->format()); | 130 EXPECT_EQ(media::VideoFrame::YV12, frame->format()); |
| 134 { | 131 { |
| 135 SCOPED_TRACE(""); | 132 SCOPED_TRACE(""); |
| 136 InitializeYV12Frame(frame, 0.0f); | 133 InitializeYV12Frame(frame, 0.0f); |
| 137 ExpectFrameColor(frame, 0xFF000000); | 134 ExpectFrameColor(frame, 0xFF000000); |
| 138 } | 135 } |
| 139 base::MD5Digest digest; | 136 base::MD5Digest digest; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 162 const size_t kHeight = 2; | 159 const size_t kHeight = 2; |
| 163 const uint8 kExpectedYRow[] = { 0, 0 }; | 160 const uint8 kExpectedYRow[] = { 0, 0 }; |
| 164 const uint8 kExpectedUVRow[] = { 128 }; | 161 const uint8 kExpectedUVRow[] = { 128 }; |
| 165 | 162 |
| 166 scoped_refptr<media::VideoFrame> frame = | 163 scoped_refptr<media::VideoFrame> frame = |
| 167 VideoFrame::CreateBlackFrame(kWidth, kHeight); | 164 VideoFrame::CreateBlackFrame(kWidth, kHeight); |
| 168 ASSERT_TRUE(frame); | 165 ASSERT_TRUE(frame); |
| 169 | 166 |
| 170 // Test basic properties. | 167 // Test basic properties. |
| 171 EXPECT_EQ(0, frame->GetTimestamp().InMicroseconds()); | 168 EXPECT_EQ(0, frame->GetTimestamp().InMicroseconds()); |
| 172 EXPECT_EQ(0, frame->GetDuration().InMicroseconds()); | |
| 173 EXPECT_FALSE(frame->IsEndOfStream()); | 169 EXPECT_FALSE(frame->IsEndOfStream()); |
| 174 | 170 |
| 175 // Test |frame| properties. | 171 // Test |frame| properties. |
| 176 EXPECT_EQ(VideoFrame::YV12, frame->format()); | 172 EXPECT_EQ(VideoFrame::YV12, frame->format()); |
| 177 EXPECT_EQ(kWidth, frame->width()); | 173 EXPECT_EQ(kWidth, frame->width()); |
| 178 EXPECT_EQ(kHeight, frame->height()); | 174 EXPECT_EQ(kHeight, frame->height()); |
| 179 | 175 |
| 180 // Test frames themselves. | 176 // Test frames themselves. |
| 181 uint8* y_plane = frame->data(VideoFrame::kYPlane); | 177 uint8* y_plane = frame->data(VideoFrame::kYPlane); |
| 182 for (size_t y = 0; y < frame->height(); ++y) { | 178 for (size_t y = 0; y < frame->height(); ++y) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 202 // ExpectFrameExtents). | 198 // ExpectFrameExtents). |
| 203 ExpectFrameExtents( | 199 ExpectFrameExtents( |
| 204 VideoFrame::RGB32, 1, 4, "de6d3d567e282f6a38d478f04fc81fb0"); | 200 VideoFrame::RGB32, 1, 4, "de6d3d567e282f6a38d478f04fc81fb0"); |
| 205 ExpectFrameExtents( | 201 ExpectFrameExtents( |
| 206 VideoFrame::YV12, 3, 1, "71113bdfd4c0de6cf62f48fb74f7a0b1"); | 202 VideoFrame::YV12, 3, 1, "71113bdfd4c0de6cf62f48fb74f7a0b1"); |
| 207 ExpectFrameExtents( | 203 ExpectFrameExtents( |
| 208 VideoFrame::YV16, 3, 1, "9bb99ac3ff350644ebff4d28dc01b461"); | 204 VideoFrame::YV16, 3, 1, "9bb99ac3ff350644ebff4d28dc01b461"); |
| 209 } | 205 } |
| 210 | 206 |
| 211 } // namespace media | 207 } // namespace media |
| OLD | NEW |