| 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 "cc/layers/video_layer_impl.h" | 5 #include "cc/layers/video_layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/layers/video_frame_provider_client_impl.h" | 7 #include "cc/layers/video_frame_provider_client_impl.h" |
| 8 #include "cc/output/context_provider.h" | 8 #include "cc/output/context_provider.h" |
| 9 #include "cc/output/output_surface.h" | 9 #include "cc/output/output_surface.h" |
| 10 #include "cc/quads/draw_quad.h" | 10 #include "cc/quads/draw_quad.h" |
| 11 #include "cc/quads/yuv_video_draw_quad.h" | 11 #include "cc/quads/yuv_video_draw_quad.h" |
| 12 #include "cc/test/fake_video_frame_provider.h" | 12 #include "cc/test/fake_video_frame_provider.h" |
| 13 #include "cc/test/layer_test_common.h" | 13 #include "cc/test/layer_test_common.h" |
| 14 #include "cc/trees/single_thread_proxy.h" | 14 #include "cc/trees/single_thread_proxy.h" |
| 15 #include "media/base/video_frame.h" | 15 #include "media/base/video_frame.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 namespace cc { | 18 namespace cc { |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 // NOTE: We cannot use DebugScopedSetImplThreadAndMainThreadBlocked in these | 21 // NOTE: We cannot use DebugScopedSetImplThreadAndMainThreadBlocked in these |
| 22 // tests because it gets destroyed before the VideoLayerImpl is destroyed. This | 22 // tests because it gets destroyed before the VideoLayerImpl is destroyed. This |
| 23 // causes a DCHECK in VideoLayerImpl's destructor to fail. | 23 // causes a DCHECK in VideoLayerImpl's destructor to fail. |
| 24 static void DebugSetImplThreadAndMainThreadBlocked(Proxy* proxy) { | 24 static void DebugSetImplThreadAndMainThreadBlocked( |
| 25 ThreadVerifier* thread_verifier) { |
| 25 #if DCHECK_IS_ON() | 26 #if DCHECK_IS_ON() |
| 26 proxy->SetCurrentThreadIsImplThread(true); | 27 thread_verifier->SetCurrentThreadIsImplThread(true); |
| 27 proxy->SetMainThreadBlocked(true); | 28 thread_verifier->SetMainThreadBlocked(true); |
| 28 #endif | 29 #endif |
| 29 } | 30 } |
| 30 | 31 |
| 31 TEST(VideoLayerImplTest, Occlusion) { | 32 TEST(VideoLayerImplTest, Occlusion) { |
| 32 gfx::Size layer_size(1000, 1000); | 33 gfx::Size layer_size(1000, 1000); |
| 33 gfx::Size viewport_size(1000, 1000); | 34 gfx::Size viewport_size(1000, 1000); |
| 34 | 35 |
| 35 LayerTestCommon::LayerImplTest impl; | 36 LayerTestCommon::LayerImplTest impl; |
| 36 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 37 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 37 | 38 |
| 38 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | 39 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( |
| 39 media::PIXEL_FORMAT_YV12, gfx::Size(10, 10), gfx::Rect(10, 10), | 40 media::PIXEL_FORMAT_YV12, gfx::Size(10, 10), gfx::Rect(10, 10), |
| 40 gfx::Size(10, 10), base::TimeDelta()); | 41 gfx::Size(10, 10), base::TimeDelta()); |
| 41 FakeVideoFrameProvider provider; | 42 FakeVideoFrameProvider provider; |
| 42 provider.set_frame(video_frame); | 43 provider.set_frame(video_frame); |
| 43 | 44 |
| 44 VideoLayerImpl* video_layer_impl = | 45 VideoLayerImpl* video_layer_impl = |
| 45 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_0); | 46 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_0); |
| 46 video_layer_impl->SetBounds(layer_size); | 47 video_layer_impl->SetBounds(layer_size); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 EXPECT_EQ(1u, partially_occluded_count); | 81 EXPECT_EQ(1u, partially_occluded_count); |
| 81 } | 82 } |
| 82 } | 83 } |
| 83 | 84 |
| 84 TEST(VideoLayerImplTest, OccludesOtherLayers) { | 85 TEST(VideoLayerImplTest, OccludesOtherLayers) { |
| 85 gfx::Size layer_size(1000, 1000); | 86 gfx::Size layer_size(1000, 1000); |
| 86 gfx::Rect visible(layer_size); | 87 gfx::Rect visible(layer_size); |
| 87 | 88 |
| 88 LayerTestCommon::LayerImplTest impl; | 89 LayerTestCommon::LayerImplTest impl; |
| 89 impl.host_impl()->SetViewportSize(layer_size); | 90 impl.host_impl()->SetViewportSize(layer_size); |
| 90 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 91 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 91 auto active_tree = impl.host_impl()->active_tree(); | 92 auto active_tree = impl.host_impl()->active_tree(); |
| 92 | 93 |
| 93 // Create a video layer with no frame on top of another layer. | 94 // Create a video layer with no frame on top of another layer. |
| 94 scoped_ptr<LayerImpl> layer_impl = LayerImpl::Create(active_tree, 3); | 95 scoped_ptr<LayerImpl> layer_impl = LayerImpl::Create(active_tree, 3); |
| 95 layer_impl->SetHasRenderSurface(true); | 96 layer_impl->SetHasRenderSurface(true); |
| 96 layer_impl->SetBounds(layer_size); | 97 layer_impl->SetBounds(layer_size); |
| 97 layer_impl->SetDrawsContent(true); | 98 layer_impl->SetDrawsContent(true); |
| 98 const auto& draw_properties = layer_impl->draw_properties(); | 99 const auto& draw_properties = layer_impl->draw_properties(); |
| 99 | 100 |
| 100 FakeVideoFrameProvider provider; | 101 FakeVideoFrameProvider provider; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 120 provider.set_frame(video_frame); | 121 provider.set_frame(video_frame); |
| 121 active_tree->set_needs_update_draw_properties(); | 122 active_tree->set_needs_update_draw_properties(); |
| 122 active_tree->UpdateDrawProperties(false); | 123 active_tree->UpdateDrawProperties(false); |
| 123 | 124 |
| 124 // We have a frame now, so the video occludes the layer below it. | 125 // We have a frame now, so the video occludes the layer below it. |
| 125 EXPECT_TRUE(draw_properties.occlusion_in_content_space.IsOccluded(visible)); | 126 EXPECT_TRUE(draw_properties.occlusion_in_content_space.IsOccluded(visible)); |
| 126 } | 127 } |
| 127 | 128 |
| 128 TEST(VideoLayerImplTest, DidBecomeActiveShouldSetActiveVideoLayer) { | 129 TEST(VideoLayerImplTest, DidBecomeActiveShouldSetActiveVideoLayer) { |
| 129 LayerTestCommon::LayerImplTest impl; | 130 LayerTestCommon::LayerImplTest impl; |
| 130 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 131 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 131 | 132 |
| 132 FakeVideoFrameProvider provider; | 133 FakeVideoFrameProvider provider; |
| 133 VideoLayerImpl* video_layer_impl = | 134 VideoLayerImpl* video_layer_impl = |
| 134 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_0); | 135 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_0); |
| 135 | 136 |
| 136 VideoFrameProviderClientImpl* client = | 137 VideoFrameProviderClientImpl* client = |
| 137 static_cast<VideoFrameProviderClientImpl*>(provider.client()); | 138 static_cast<VideoFrameProviderClientImpl*>(provider.client()); |
| 138 ASSERT_TRUE(client); | 139 ASSERT_TRUE(client); |
| 139 | 140 |
| 140 EXPECT_FALSE(client->ActiveVideoLayer()); | 141 EXPECT_FALSE(client->ActiveVideoLayer()); |
| 141 video_layer_impl->DidBecomeActive(); | 142 video_layer_impl->DidBecomeActive(); |
| 142 EXPECT_EQ(video_layer_impl, client->ActiveVideoLayer()); | 143 EXPECT_EQ(video_layer_impl, client->ActiveVideoLayer()); |
| 143 } | 144 } |
| 144 | 145 |
| 145 TEST(VideoLayerImplTest, Rotated0) { | 146 TEST(VideoLayerImplTest, Rotated0) { |
| 146 gfx::Size layer_size(100, 50); | 147 gfx::Size layer_size(100, 50); |
| 147 gfx::Size viewport_size(1000, 500); | 148 gfx::Size viewport_size(1000, 500); |
| 148 | 149 |
| 149 LayerTestCommon::LayerImplTest impl; | 150 LayerTestCommon::LayerImplTest impl; |
| 150 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 151 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 151 | 152 |
| 152 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | 153 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( |
| 153 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), | 154 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), |
| 154 gfx::Size(20, 10), base::TimeDelta()); | 155 gfx::Size(20, 10), base::TimeDelta()); |
| 155 FakeVideoFrameProvider provider; | 156 FakeVideoFrameProvider provider; |
| 156 provider.set_frame(video_frame); | 157 provider.set_frame(video_frame); |
| 157 | 158 |
| 158 VideoLayerImpl* video_layer_impl = | 159 VideoLayerImpl* video_layer_impl = |
| 159 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_0); | 160 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_0); |
| 160 video_layer_impl->SetBounds(layer_size); | 161 video_layer_impl->SetBounds(layer_size); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 176 ->shared_quad_state->quad_to_target_transform.TransformPoint(&p2); | 177 ->shared_quad_state->quad_to_target_transform.TransformPoint(&p2); |
| 177 EXPECT_EQ(gfx::Point3F(0, 50, 0), p1); | 178 EXPECT_EQ(gfx::Point3F(0, 50, 0), p1); |
| 178 EXPECT_EQ(gfx::Point3F(100, 0, 0), p2); | 179 EXPECT_EQ(gfx::Point3F(100, 0, 0), p2); |
| 179 } | 180 } |
| 180 | 181 |
| 181 TEST(VideoLayerImplTest, Rotated90) { | 182 TEST(VideoLayerImplTest, Rotated90) { |
| 182 gfx::Size layer_size(100, 50); | 183 gfx::Size layer_size(100, 50); |
| 183 gfx::Size viewport_size(1000, 500); | 184 gfx::Size viewport_size(1000, 500); |
| 184 | 185 |
| 185 LayerTestCommon::LayerImplTest impl; | 186 LayerTestCommon::LayerImplTest impl; |
| 186 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 187 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 187 | 188 |
| 188 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | 189 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( |
| 189 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), | 190 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), |
| 190 gfx::Size(20, 10), base::TimeDelta()); | 191 gfx::Size(20, 10), base::TimeDelta()); |
| 191 FakeVideoFrameProvider provider; | 192 FakeVideoFrameProvider provider; |
| 192 provider.set_frame(video_frame); | 193 provider.set_frame(video_frame); |
| 193 | 194 |
| 194 VideoLayerImpl* video_layer_impl = | 195 VideoLayerImpl* video_layer_impl = |
| 195 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_90); | 196 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_90); |
| 196 video_layer_impl->SetBounds(layer_size); | 197 video_layer_impl->SetBounds(layer_size); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 212 ->shared_quad_state->quad_to_target_transform.TransformPoint(&p2); | 213 ->shared_quad_state->quad_to_target_transform.TransformPoint(&p2); |
| 213 EXPECT_EQ(gfx::Point3F(0, 0, 0), p1); | 214 EXPECT_EQ(gfx::Point3F(0, 0, 0), p1); |
| 214 EXPECT_EQ(gfx::Point3F(100, 50, 0), p2); | 215 EXPECT_EQ(gfx::Point3F(100, 50, 0), p2); |
| 215 } | 216 } |
| 216 | 217 |
| 217 TEST(VideoLayerImplTest, Rotated180) { | 218 TEST(VideoLayerImplTest, Rotated180) { |
| 218 gfx::Size layer_size(100, 50); | 219 gfx::Size layer_size(100, 50); |
| 219 gfx::Size viewport_size(1000, 500); | 220 gfx::Size viewport_size(1000, 500); |
| 220 | 221 |
| 221 LayerTestCommon::LayerImplTest impl; | 222 LayerTestCommon::LayerImplTest impl; |
| 222 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 223 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 223 | 224 |
| 224 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | 225 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( |
| 225 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), | 226 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), |
| 226 gfx::Size(20, 10), base::TimeDelta()); | 227 gfx::Size(20, 10), base::TimeDelta()); |
| 227 FakeVideoFrameProvider provider; | 228 FakeVideoFrameProvider provider; |
| 228 provider.set_frame(video_frame); | 229 provider.set_frame(video_frame); |
| 229 | 230 |
| 230 VideoLayerImpl* video_layer_impl = | 231 VideoLayerImpl* video_layer_impl = |
| 231 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_180); | 232 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_180); |
| 232 video_layer_impl->SetBounds(layer_size); | 233 video_layer_impl->SetBounds(layer_size); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 248 ->shared_quad_state->quad_to_target_transform.TransformPoint(&p2); | 249 ->shared_quad_state->quad_to_target_transform.TransformPoint(&p2); |
| 249 EXPECT_EQ(gfx::Point3F(100, 0, 0), p1); | 250 EXPECT_EQ(gfx::Point3F(100, 0, 0), p1); |
| 250 EXPECT_EQ(gfx::Point3F(0, 50, 0), p2); | 251 EXPECT_EQ(gfx::Point3F(0, 50, 0), p2); |
| 251 } | 252 } |
| 252 | 253 |
| 253 TEST(VideoLayerImplTest, Rotated270) { | 254 TEST(VideoLayerImplTest, Rotated270) { |
| 254 gfx::Size layer_size(100, 50); | 255 gfx::Size layer_size(100, 50); |
| 255 gfx::Size viewport_size(1000, 500); | 256 gfx::Size viewport_size(1000, 500); |
| 256 | 257 |
| 257 LayerTestCommon::LayerImplTest impl; | 258 LayerTestCommon::LayerImplTest impl; |
| 258 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 259 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 259 | 260 |
| 260 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | 261 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( |
| 261 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), | 262 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), |
| 262 gfx::Size(20, 10), base::TimeDelta()); | 263 gfx::Size(20, 10), base::TimeDelta()); |
| 263 FakeVideoFrameProvider provider; | 264 FakeVideoFrameProvider provider; |
| 264 provider.set_frame(video_frame); | 265 provider.set_frame(video_frame); |
| 265 | 266 |
| 266 VideoLayerImpl* video_layer_impl = | 267 VideoLayerImpl* video_layer_impl = |
| 267 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_270); | 268 impl.AddChildToRoot<VideoLayerImpl>(&provider, media::VIDEO_ROTATION_270); |
| 268 video_layer_impl->SetBounds(layer_size); | 269 video_layer_impl->SetBounds(layer_size); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 287 } | 288 } |
| 288 | 289 |
| 289 void EmptyCallback(unsigned sync_point) { | 290 void EmptyCallback(unsigned sync_point) { |
| 290 } | 291 } |
| 291 | 292 |
| 292 TEST(VideoLayerImplTest, SoftwareVideoFrameGeneratesYUVQuad) { | 293 TEST(VideoLayerImplTest, SoftwareVideoFrameGeneratesYUVQuad) { |
| 293 gfx::Size layer_size(1000, 1000); | 294 gfx::Size layer_size(1000, 1000); |
| 294 gfx::Size viewport_size(1000, 1000); | 295 gfx::Size viewport_size(1000, 1000); |
| 295 | 296 |
| 296 LayerTestCommon::LayerImplTest impl; | 297 LayerTestCommon::LayerImplTest impl; |
| 297 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 298 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 298 | 299 |
| 299 gpu::MailboxHolder mailbox_holder; | 300 gpu::MailboxHolder mailbox_holder; |
| 300 mailbox_holder.mailbox.name[0] = 1; | 301 mailbox_holder.mailbox.name[0] = 1; |
| 301 | 302 |
| 302 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | 303 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( |
| 303 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), | 304 media::PIXEL_FORMAT_YV12, gfx::Size(20, 10), gfx::Rect(20, 10), |
| 304 gfx::Size(20, 10), base::TimeDelta()); | 305 gfx::Size(20, 10), base::TimeDelta()); |
| 305 | 306 |
| 306 FakeVideoFrameProvider provider; | 307 FakeVideoFrameProvider provider; |
| 307 provider.set_frame(video_frame); | 308 provider.set_frame(video_frame); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 324 (yuv_draw_quad->ya_tex_size.height() + 1) / 2); | 325 (yuv_draw_quad->ya_tex_size.height() + 1) / 2); |
| 325 EXPECT_EQ(yuv_draw_quad->uv_tex_size.width(), | 326 EXPECT_EQ(yuv_draw_quad->uv_tex_size.width(), |
| 326 (yuv_draw_quad->ya_tex_size.width() + 1) / 2); | 327 (yuv_draw_quad->ya_tex_size.width() + 1) / 2); |
| 327 } | 328 } |
| 328 | 329 |
| 329 TEST(VideoLayerImplTest, NativeYUVFrameGeneratesYUVQuad) { | 330 TEST(VideoLayerImplTest, NativeYUVFrameGeneratesYUVQuad) { |
| 330 gfx::Size layer_size(1000, 1000); | 331 gfx::Size layer_size(1000, 1000); |
| 331 gfx::Size viewport_size(1000, 1000); | 332 gfx::Size viewport_size(1000, 1000); |
| 332 | 333 |
| 333 LayerTestCommon::LayerImplTest impl; | 334 LayerTestCommon::LayerImplTest impl; |
| 334 DebugSetImplThreadAndMainThreadBlocked(impl.proxy()); | 335 DebugSetImplThreadAndMainThreadBlocked(impl.thread_verifier()); |
| 335 | 336 |
| 336 gpu::MailboxHolder mailbox_holder; | 337 gpu::MailboxHolder mailbox_holder; |
| 337 mailbox_holder.mailbox.name[0] = 1; | 338 mailbox_holder.mailbox.name[0] = 1; |
| 338 | 339 |
| 339 scoped_refptr<media::VideoFrame> video_frame = | 340 scoped_refptr<media::VideoFrame> video_frame = |
| 340 media::VideoFrame::WrapYUV420NativeTextures( | 341 media::VideoFrame::WrapYUV420NativeTextures( |
| 341 mailbox_holder, mailbox_holder, mailbox_holder, | 342 mailbox_holder, mailbox_holder, mailbox_holder, |
| 342 base::Bind(EmptyCallback), gfx::Size(10, 10), gfx::Rect(10, 10), | 343 base::Bind(EmptyCallback), gfx::Size(10, 10), gfx::Rect(10, 10), |
| 343 gfx::Size(10, 10), base::TimeDelta()); | 344 gfx::Size(10, 10), base::TimeDelta()); |
| 344 video_frame->metadata()->SetBoolean(media::VideoFrameMetadata::ALLOW_OVERLAY, | 345 video_frame->metadata()->SetBoolean(media::VideoFrameMetadata::ALLOW_OVERLAY, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 361 const YUVVideoDrawQuad* yuv_draw_quad = | 362 const YUVVideoDrawQuad* yuv_draw_quad = |
| 362 static_cast<const YUVVideoDrawQuad*>(draw_quad); | 363 static_cast<const YUVVideoDrawQuad*>(draw_quad); |
| 363 EXPECT_EQ(yuv_draw_quad->uv_tex_size.height(), | 364 EXPECT_EQ(yuv_draw_quad->uv_tex_size.height(), |
| 364 (yuv_draw_quad->ya_tex_size.height() + 1) / 2); | 365 (yuv_draw_quad->ya_tex_size.height() + 1) / 2); |
| 365 EXPECT_EQ(yuv_draw_quad->uv_tex_size.width(), | 366 EXPECT_EQ(yuv_draw_quad->uv_tex_size.width(), |
| 366 (yuv_draw_quad->ya_tex_size.width() + 1) / 2); | 367 (yuv_draw_quad->ya_tex_size.width() + 1) / 2); |
| 367 } | 368 } |
| 368 | 369 |
| 369 } // namespace | 370 } // namespace |
| 370 } // namespace cc | 371 } // namespace cc |
| OLD | NEW |