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

Side by Side Diff: content/common/gpu/media/gpu_video_decode_accelerator.cc

Issue 1154053002: gpu: Use a rectangle to keep track of the cleared area of each texture level. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: restore scissor state in GLES2DecoderImpl::ClearLevel and update GLES2DecoderManualInitTest.DrawCle… Created 5 years, 6 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
OLDNEW
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 "content/common/gpu/media/gpu_video_decode_accelerator.h" 5 #include "content/common/gpu/media/gpu_video_decode_accelerator.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 if (info->target() != texture_target_) { 472 if (info->target() != texture_target_) {
473 DLOG(ERROR) << "Texture target mismatch for texture id " 473 DLOG(ERROR) << "Texture target mismatch for texture id "
474 << texture_ids[i]; 474 << texture_ids[i];
475 NotifyError(media::VideoDecodeAccelerator::INVALID_ARGUMENT); 475 NotifyError(media::VideoDecodeAccelerator::INVALID_ARGUMENT);
476 return; 476 return;
477 } 477 }
478 if (texture_target_ == GL_TEXTURE_EXTERNAL_OES || 478 if (texture_target_ == GL_TEXTURE_EXTERNAL_OES ||
479 texture_target_ == GL_TEXTURE_RECTANGLE_ARB) { 479 texture_target_ == GL_TEXTURE_RECTANGLE_ARB) {
480 // These textures have their dimensions defined by the underlying storage. 480 // These textures have their dimensions defined by the underlying storage.
481 // Use |texture_dimensions_| for this size. 481 // Use |texture_dimensions_| for this size.
482 texture_manager->SetLevelInfo(texture_ref, 482 texture_manager->SetLevelInfo(
483 texture_target_, 483 texture_ref, texture_target_, 0, GL_RGBA, texture_dimensions_.width(),
484 0, 484 texture_dimensions_.height(), 1, 0, GL_RGBA, 0, gfx::Rect());
485 GL_RGBA,
486 texture_dimensions_.width(),
487 texture_dimensions_.height(),
488 1,
489 0,
490 GL_RGBA,
491 0,
492 false);
493 } else { 485 } else {
494 // For other targets, texture dimensions should already be defined. 486 // For other targets, texture dimensions should already be defined.
495 GLsizei width = 0, height = 0; 487 GLsizei width = 0, height = 0;
496 info->GetLevelSize(texture_target_, 0, &width, &height, nullptr); 488 info->GetLevelSize(texture_target_, 0, &width, &height, nullptr);
497 if (width != texture_dimensions_.width() || 489 if (width != texture_dimensions_.width() ||
498 height != texture_dimensions_.height()) { 490 height != texture_dimensions_.height()) {
499 DLOG(ERROR) << "Size mismatch for texture id " << texture_ids[i]; 491 DLOG(ERROR) << "Size mismatch for texture id " << texture_ids[i];
500 NotifyError(media::VideoDecodeAccelerator::INVALID_ARGUMENT); 492 NotifyError(media::VideoDecodeAccelerator::INVALID_ARGUMENT);
501 return; 493 return;
502 } 494 }
503 495
504 // TODO(dshwang): after moving to D3D11, remove this. crbug.com/438691 496 // TODO(dshwang): after moving to D3D11, remove this. crbug.com/438691
505 GLenum format = 497 GLenum format =
506 video_decode_accelerator_.get()->GetSurfaceInternalFormat(); 498 video_decode_accelerator_.get()->GetSurfaceInternalFormat();
507 if (format != GL_RGBA) { 499 if (format != GL_RGBA) {
508 texture_manager->SetLevelInfo(texture_ref, texture_target_, 0, format, 500 texture_manager->SetLevelInfo(texture_ref, texture_target_, 0, format,
509 width, height, 1, 0, format, 0, false); 501 width, height, 1, 0, format, 0,
502 gfx::Rect());
510 } 503 }
511 } 504 }
512 buffers.push_back(media::PictureBuffer(buffer_ids[i], texture_dimensions_, 505 buffers.push_back(media::PictureBuffer(buffer_ids[i], texture_dimensions_,
513 texture_ref->service_id(), 506 texture_ref->service_id(),
514 texture_ids[i])); 507 texture_ids[i]));
515 textures.push_back(texture_ref); 508 textures.push_back(texture_ref);
516 } 509 }
517 video_decode_accelerator_->AssignPictureBuffers(buffers); 510 video_decode_accelerator_->AssignPictureBuffers(buffers);
518 DebugAutoLock auto_lock(debug_uncleared_textures_lock_); 511 DebugAutoLock auto_lock(debug_uncleared_textures_lock_);
519 for (uint32 i = 0; i < buffer_ids.size(); ++i) 512 for (uint32 i = 0; i < buffer_ids.size(); ++i)
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 return stub_->channel()->Send(message); 606 return stub_->channel()->Send(message);
614 } 607 }
615 608
616 void GpuVideoDecodeAccelerator::SendCreateDecoderReply(IPC::Message* message, 609 void GpuVideoDecodeAccelerator::SendCreateDecoderReply(IPC::Message* message,
617 bool succeeded) { 610 bool succeeded) {
618 GpuCommandBufferMsg_CreateVideoDecoder::WriteReplyParams(message, succeeded); 611 GpuCommandBufferMsg_CreateVideoDecoder::WriteReplyParams(message, succeeded);
619 Send(message); 612 Send(message);
620 } 613 }
621 614
622 } // namespace content 615 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/common/gpu/stream_texture_android.cc » ('j') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698