Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: cc/output/renderer_pixeltest.cc

Issue 2969223002: [media]: Replace LUMINANCE_F16 by R16 for 9/10-bit h264 videos.
Patch Set: Fix in resource_format_utils Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/raster/raster_buffer_provider.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/memory/aligned_memory.h" 9 #include "base/memory/aligned_memory.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "cc/base/math_util.h" 11 #include "cc/base/math_util.h"
12 #include "cc/paint/paint_flags.h" 12 #include "cc/paint/paint_flags.h"
13 #include "cc/paint/skia_paint_canvas.h" 13 #include "cc/paint/skia_paint_canvas.h"
14 #include "cc/quads/draw_quad.h" 14 #include "cc/quads/draw_quad.h"
15 #include "cc/quads/picture_draw_quad.h" 15 #include "cc/quads/picture_draw_quad.h"
16 #include "cc/quads/texture_draw_quad.h" 16 #include "cc/quads/texture_draw_quad.h"
17 #include "cc/resources/video_resource_updater.h" 17 #include "cc/resources/video_resource_updater.h"
18 #include "cc/test/fake_raster_source.h" 18 #include "cc/test/fake_raster_source.h"
19 #include "cc/test/fake_recording_source.h" 19 #include "cc/test/fake_recording_source.h"
20 #include "cc/test/pixel_test.h" 20 #include "cc/test/pixel_test.h"
21 #include "cc/test/test_in_process_context_provider.h"
21 #include "components/viz/service/display/gl_renderer.h" 22 #include "components/viz/service/display/gl_renderer.h"
22 #include "gpu/command_buffer/client/gles2_interface.h" 23 #include "gpu/command_buffer/client/gles2_interface.h"
23 #include "media/base/video_frame.h" 24 #include "media/base/video_frame.h"
24 #include "third_party/skia/include/core/SkColorPriv.h" 25 #include "third_party/skia/include/core/SkColorPriv.h"
25 #include "third_party/skia/include/core/SkImageFilter.h" 26 #include "third_party/skia/include/core/SkImageFilter.h"
26 #include "third_party/skia/include/core/SkMatrix.h" 27 #include "third_party/skia/include/core/SkMatrix.h"
27 #include "third_party/skia/include/core/SkRefCnt.h" 28 #include "third_party/skia/include/core/SkRefCnt.h"
28 #include "third_party/skia/include/core/SkSurface.h" 29 #include "third_party/skia/include/core/SkSurface.h"
29 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" 30 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h"
30 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" 31 #include "third_party/skia/include/effects/SkColorMatrixFilter.h"
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 294
294 YUVVideoDrawQuad* yuv_quad = 295 YUVVideoDrawQuad* yuv_quad =
295 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); 296 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
296 uint32_t bits_per_channel = 8; 297 uint32_t bits_per_channel = 8;
297 if (video_frame->format() == media::PIXEL_FORMAT_YUV420P10 || 298 if (video_frame->format() == media::PIXEL_FORMAT_YUV420P10 ||
298 video_frame->format() == media::PIXEL_FORMAT_YUV422P10 || 299 video_frame->format() == media::PIXEL_FORMAT_YUV422P10 ||
299 video_frame->format() == media::PIXEL_FORMAT_YUV444P10) { 300 video_frame->format() == media::PIXEL_FORMAT_YUV444P10) {
300 bits_per_channel = 10; 301 bits_per_channel = 10;
301 } 302 }
302 303
304 viz::ResourceFormat yuv_highbit_resource_format =
305 resource_provider->YuvResourceFormat(bits_per_channel);
306
307 float multitplier = 1.0;
308 int shift = 16 - bits_per_channel;
309
310 if (yuv_highbit_resource_format != viz::R16_EXT)
311 bits_per_channel = 8;
312 else
313 multitplier = (1 << shift) + 1.0 / (1 << (bits_per_channel - shift));
314
303 yuv_quad->SetNew(shared_state, rect, opaque_rect, visible_rect, 315 yuv_quad->SetNew(shared_state, rect, opaque_rect, visible_rect,
304 needs_blending, ya_tex_coord_rect, uv_tex_coord_rect, 316 needs_blending, ya_tex_coord_rect, uv_tex_coord_rect,
305 ya_tex_size, uv_tex_size, y_resource, u_resource, v_resource, 317 ya_tex_size, uv_tex_size, y_resource, u_resource, v_resource,
306 a_resource, color_space, video_color_space, 0.0f, 1.0f, 318 a_resource, color_space, video_color_space, 0.0f,
307 bits_per_channel); 319 multitplier, bits_per_channel);
308 } 320 }
309 321
310 void CreateTestY16TextureDrawQuad_FromVideoFrame( 322 void CreateTestY16TextureDrawQuad_FromVideoFrame(
311 const SharedQuadState* shared_state, 323 const SharedQuadState* shared_state,
312 scoped_refptr<media::VideoFrame> video_frame, 324 scoped_refptr<media::VideoFrame> video_frame,
313 const gfx::RectF& tex_coord_rect, 325 const gfx::RectF& tex_coord_rect,
314 RenderPass* render_pass, 326 RenderPass* render_pass,
315 VideoResourceUpdater* video_resource_updater, 327 VideoResourceUpdater* video_resource_updater,
316 const gfx::Rect& rect, 328 const gfx::Rect& rect,
317 const gfx::Rect& visible_rect, 329 const gfx::Rect& visible_rect,
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
1290 GLRendererPixelTest::SetUp(); 1302 GLRendererPixelTest::SetUp();
1291 bool use_stream_video_draw_quad = false; 1303 bool use_stream_video_draw_quad = false;
1292 video_resource_updater_.reset(new VideoResourceUpdater( 1304 video_resource_updater_.reset(new VideoResourceUpdater(
1293 output_surface_->context_provider(), resource_provider_.get(), 1305 output_surface_->context_provider(), resource_provider_.get(),
1294 use_stream_video_draw_quad)); 1306 use_stream_video_draw_quad));
1295 } 1307 }
1296 1308
1297 std::unique_ptr<VideoResourceUpdater> video_resource_updater_; 1309 std::unique_ptr<VideoResourceUpdater> video_resource_updater_;
1298 }; 1310 };
1299 1311
1312 enum class HighbitTexture {
1313 Y8,
1314 R16_EXT,
1315 };
1316
1300 class VideoGLRendererPixelHiLoTest 1317 class VideoGLRendererPixelHiLoTest
1301 : public VideoGLRendererPixelTest, 1318 : public VideoGLRendererPixelTest,
1302 public ::testing::WithParamInterface<bool> {}; 1319 public ::testing::WithParamInterface<
1320 ::testing::tuple<bool, HighbitTexture>> {
1321 public:
1322 void SetSupportHighbitTexture(HighbitTexture texture) {
1323 TestInProcessContextProvider* context_provider =
1324 GetTestInProcessContextProvider();
1325 switch (texture) {
1326 case HighbitTexture::Y8:
1327 break;
1328 case HighbitTexture::R16_EXT:
1329 context_provider->SetSupportTextureNorm16(true);
1330 video_resource_updater_->UseR16ForTesting(true);
1331 break;
1332 }
1333 }
1334
1335 private:
1336 TestInProcessContextProvider* GetTestInProcessContextProvider() {
1337 return static_cast<TestInProcessContextProvider*>(
1338 output_surface_->context_provider());
1339 }
1340 };
1303 1341
1304 TEST_P(VideoGLRendererPixelHiLoTest, SimpleYUVRect) { 1342 TEST_P(VideoGLRendererPixelHiLoTest, SimpleYUVRect) {
1305 gfx::Rect rect(this->device_viewport_size_); 1343 gfx::Rect rect(this->device_viewport_size_);
1306 1344
1307 int id = 1; 1345 int id = 1;
1308 std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1346 std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1309 1347
1310 SharedQuadState* shared_state = 1348 SharedQuadState* shared_state =
1311 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1349 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1312 1350
1313 bool highbit = GetParam(); 1351 const bool highbit = testing::get<0>(GetParam());
1352 const HighbitTexture format = testing::get<1>(GetParam());
1353 SetSupportHighbitTexture(format);
1354
1314 CreateTestYUVVideoDrawQuad_Striped( 1355 CreateTestYUVVideoDrawQuad_Striped(
1315 shared_state, media::PIXEL_FORMAT_YV12, false, highbit, 1356 shared_state, media::PIXEL_FORMAT_YV12, false, highbit,
1316 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(), 1357 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(),
1317 video_resource_updater_.get(), rect, rect, resource_provider_.get()); 1358 video_resource_updater_.get(), rect, rect, resource_provider_.get());
1318 1359
1319 RenderPassList pass_list; 1360 RenderPassList pass_list;
1320 pass_list.push_back(std::move(pass)); 1361 pass_list.push_back(std::move(pass));
1321 1362
1322 EXPECT_TRUE( 1363 EXPECT_TRUE(
1323 this->RunPixelTest(&pass_list, 1364 this->RunPixelTest(&pass_list,
1324 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")), 1365 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")),
1325 FuzzyPixelOffByOneComparator(true))); 1366 FuzzyPixelOffByOneComparator(true)));
1326 } 1367 }
1327 1368
1328 TEST_P(VideoGLRendererPixelHiLoTest, ClippedYUVRect) { 1369 TEST_P(VideoGLRendererPixelHiLoTest, ClippedYUVRect) {
1329 gfx::Rect viewport(this->device_viewport_size_); 1370 gfx::Rect viewport(this->device_viewport_size_);
1330 gfx::Rect draw_rect(this->device_viewport_size_.width() * 1.5, 1371 gfx::Rect draw_rect(this->device_viewport_size_.width() * 1.5,
1331 this->device_viewport_size_.height() * 1.5); 1372 this->device_viewport_size_.height() * 1.5);
1332 1373
1333 int id = 1; 1374 int id = 1;
1334 std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(id, viewport); 1375 std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(id, viewport);
1335 1376
1336 SharedQuadState* shared_state = 1377 SharedQuadState* shared_state =
1337 CreateTestSharedQuadState(gfx::Transform(), viewport, pass.get()); 1378 CreateTestSharedQuadState(gfx::Transform(), viewport, pass.get());
1338 1379
1339 bool highbit = GetParam(); 1380 const bool highbit = testing::get<0>(GetParam());
1381 const HighbitTexture format = testing::get<1>(GetParam());
1382 SetSupportHighbitTexture(format);
1383
1340 CreateTestYUVVideoDrawQuad_Striped( 1384 CreateTestYUVVideoDrawQuad_Striped(
1341 shared_state, media::PIXEL_FORMAT_YV12, false, highbit, 1385 shared_state, media::PIXEL_FORMAT_YV12, false, highbit,
1342 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(), 1386 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(),
1343 video_resource_updater_.get(), draw_rect, viewport, 1387 video_resource_updater_.get(), draw_rect, viewport,
1344 resource_provider_.get()); 1388 resource_provider_.get());
1345 RenderPassList pass_list; 1389 RenderPassList pass_list;
1346 pass_list.push_back(std::move(pass)); 1390 pass_list.push_back(std::move(pass));
1347 1391
1348 EXPECT_TRUE(this->RunPixelTest( 1392 EXPECT_TRUE(this->RunPixelTest(
1349 &pass_list, base::FilePath(FILE_PATH_LITERAL("yuv_stripes_clipped.png")), 1393 &pass_list, base::FilePath(FILE_PATH_LITERAL("yuv_stripes_clipped.png")),
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 pass_list.push_back(std::move(pass)); 1436 pass_list.push_back(std::move(pass));
1393 1437
1394 // If we didn't get black out of the YUV values above, then we probably have a 1438 // If we didn't get black out of the YUV values above, then we probably have a
1395 // color range issue. 1439 // color range issue.
1396 EXPECT_TRUE(this->RunPixelTest(&pass_list, 1440 EXPECT_TRUE(this->RunPixelTest(&pass_list,
1397 base::FilePath(FILE_PATH_LITERAL("black.png")), 1441 base::FilePath(FILE_PATH_LITERAL("black.png")),
1398 FuzzyPixelOffByOneComparator(true))); 1442 FuzzyPixelOffByOneComparator(true)));
1399 } 1443 }
1400 1444
1401 // First argument (test case prefix) is intentionally left empty. 1445 // First argument (test case prefix) is intentionally left empty.
1402 INSTANTIATE_TEST_CASE_P(, VideoGLRendererPixelHiLoTest, ::testing::Bool()); 1446 INSTANTIATE_TEST_CASE_P(
1447 ,
1448 VideoGLRendererPixelHiLoTest,
1449 testing::Combine(testing::Bool(),
1450 testing::Values(HighbitTexture::Y8,
1451 HighbitTexture::R16_EXT)));
1403 1452
1404 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) { 1453 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) {
1405 gfx::Rect rect(this->device_viewport_size_); 1454 gfx::Rect rect(this->device_viewport_size_);
1406 1455
1407 int id = 1; 1456 int id = 1;
1408 std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1457 std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1409 1458
1410 SharedQuadState* shared_state = 1459 SharedQuadState* shared_state =
1411 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1460 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1412 1461
(...skipping 2194 matching lines...) Expand 10 before | Expand all | Expand 10 after
3607 INSTANTIATE_TEST_CASE_P( 3656 INSTANTIATE_TEST_CASE_P(
3608 ToColorSpace, 3657 ToColorSpace,
3609 ColorTransformPixelTest, 3658 ColorTransformPixelTest,
3610 testing::Combine(testing::ValuesIn(intermediate_color_spaces), 3659 testing::Combine(testing::ValuesIn(intermediate_color_spaces),
3611 testing::ValuesIn(dst_color_spaces))); 3660 testing::ValuesIn(dst_color_spaces)));
3612 3661
3613 #endif // !defined(OS_ANDROID) 3662 #endif // !defined(OS_ANDROID)
3614 3663
3615 } // namespace 3664 } // namespace
3616 } // namespace cc 3665 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/raster/raster_buffer_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698