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

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

Issue 1207043002: Introduce a client minimum picture pool size (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/android_video_decode_accelerator.h" 5 #include "content/common/gpu/media/android_video_decode_accelerator.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 } 63 }
64 64
65 static inline const base::TimeDelta NoWaitTimeOut() { 65 static inline const base::TimeDelta NoWaitTimeOut() {
66 return base::TimeDelta::FromMicroseconds(0); 66 return base::TimeDelta::FromMicroseconds(0);
67 } 67 }
68 68
69 AndroidVideoDecodeAccelerator::AndroidVideoDecodeAccelerator( 69 AndroidVideoDecodeAccelerator::AndroidVideoDecodeAccelerator(
70 const base::WeakPtr<gpu::gles2::GLES2Decoder> decoder, 70 const base::WeakPtr<gpu::gles2::GLES2Decoder> decoder,
71 const base::Callback<bool(void)>& make_context_current) 71 const base::Callback<bool(void)>& make_context_current)
72 : client_(NULL), 72 : client_(NULL),
73 num_picture_buffers_(kNumPictureBuffers),
73 make_context_current_(make_context_current), 74 make_context_current_(make_context_current),
74 codec_(media::kCodecH264), 75 codec_(media::kCodecH264),
75 state_(NO_ERROR), 76 state_(NO_ERROR),
76 surface_texture_id_(0), 77 surface_texture_id_(0),
77 picturebuffers_requested_(false), 78 picturebuffers_requested_(false),
78 gl_decoder_(decoder), 79 gl_decoder_(decoder),
79 weak_this_factory_(this) {} 80 weak_this_factory_(this) {}
80 81
81 AndroidVideoDecodeAccelerator::~AndroidVideoDecodeAccelerator() { 82 AndroidVideoDecodeAccelerator::~AndroidVideoDecodeAccelerator() {
82 DCHECK(thread_checker_.CalledOnValidThread()); 83 DCHECK(thread_checker_.CalledOnValidThread());
83 } 84 }
84 85
85 bool AndroidVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile, 86 bool AndroidVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile,
87 uint32 min_picture_count,
86 Client* client) { 88 Client* client) {
87 DCHECK(!media_codec_); 89 DCHECK(!media_codec_);
88 DCHECK(thread_checker_.CalledOnValidThread()); 90 DCHECK(thread_checker_.CalledOnValidThread());
89 91
90 client_ = client; 92 client_ = client;
93 num_picture_buffers_ = std::max(min_picture_count,
94 static_cast<uint32>(kNumPictureBuffers));
91 95
92 if (profile == media::VP8PROFILE_ANY) { 96 if (profile == media::VP8PROFILE_ANY) {
93 codec_ = media::kCodecVP8; 97 codec_ = media::kCodecVP8;
94 } else { 98 } else {
95 // TODO(dwkang): enable H264 once b/8125974 is fixed. 99 // TODO(dwkang): enable H264 once b/8125974 is fixed.
96 LOG(ERROR) << "Unsupported profile: " << profile; 100 LOG(ERROR) << "Unsupported profile: " << profile;
97 return false; 101 return false;
98 } 102 }
99 103
100 // Only consider using MediaCodec if it's likely backed by hardware. 104 // Only consider using MediaCodec if it's likely backed by hardware.
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 INVALID_ARGUMENT); 412 INVALID_ARGUMENT);
409 int32 id = buffers[i].id(); 413 int32 id = buffers[i].id();
410 output_picture_buffers_.insert(std::make_pair(id, buffers[i])); 414 output_picture_buffers_.insert(std::make_pair(id, buffers[i]));
411 free_picture_ids_.push(id); 415 free_picture_ids_.push(id);
412 // Since the client might be re-using |picture_buffer_id| values, forget 416 // Since the client might be re-using |picture_buffer_id| values, forget
413 // about previously-dismissed IDs now. See ReusePictureBuffer() comment 417 // about previously-dismissed IDs now. See ReusePictureBuffer() comment
414 // about "zombies" for why we maintain this set in the first place. 418 // about "zombies" for why we maintain this set in the first place.
415 dismissed_picture_ids_.erase(id); 419 dismissed_picture_ids_.erase(id);
416 } 420 }
417 421
418 RETURN_ON_FAILURE(output_picture_buffers_.size() == kNumPictureBuffers, 422 RETURN_ON_FAILURE(output_picture_buffers_.size() == num_picture_buffers_,
419 "Invalid picture buffers were passed.", 423 "Invalid picture buffers were passed.",
420 INVALID_ARGUMENT); 424 INVALID_ARGUMENT);
421 425
422 DoIOTask(); 426 DoIOTask();
423 } 427 }
424 428
425 void AndroidVideoDecodeAccelerator::ReusePictureBuffer( 429 void AndroidVideoDecodeAccelerator::ReusePictureBuffer(
426 int32 picture_buffer_id) { 430 int32 picture_buffer_id) {
427 DCHECK(thread_checker_.CalledOnValidThread()); 431 DCHECK(thread_checker_.CalledOnValidThread());
428 432
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 if (copier_) 525 if (copier_)
522 copier_->Destroy(); 526 copier_->Destroy();
523 delete this; 527 delete this;
524 } 528 }
525 529
526 bool AndroidVideoDecodeAccelerator::CanDecodeOnIOThread() { 530 bool AndroidVideoDecodeAccelerator::CanDecodeOnIOThread() {
527 return false; 531 return false;
528 } 532 }
529 533
530 void AndroidVideoDecodeAccelerator::RequestPictureBuffers() { 534 void AndroidVideoDecodeAccelerator::RequestPictureBuffers() {
531 client_->ProvidePictureBuffers(kNumPictureBuffers, size_, GL_TEXTURE_2D); 535 client_->ProvidePictureBuffers(num_picture_buffers_, size_, GL_TEXTURE_2D);
532 } 536 }
533 537
534 void AndroidVideoDecodeAccelerator::NotifyPictureReady( 538 void AndroidVideoDecodeAccelerator::NotifyPictureReady(
535 const media::Picture& picture) { 539 const media::Picture& picture) {
536 client_->PictureReady(picture); 540 client_->PictureReady(picture);
537 } 541 }
538 542
539 void AndroidVideoDecodeAccelerator::NotifyEndOfBitstreamBuffer( 543 void AndroidVideoDecodeAccelerator::NotifyEndOfBitstreamBuffer(
540 int input_buffer_id) { 544 int input_buffer_id) {
541 client_->NotifyEndOfBitstreamBuffer(input_buffer_id); 545 client_->NotifyEndOfBitstreamBuffer(input_buffer_id);
(...skipping 22 matching lines...) Expand all
564 } 568 }
565 SupportedProfile profile; 569 SupportedProfile profile;
566 profile.profile = media::VP8PROFILE_ANY; 570 profile.profile = media::VP8PROFILE_ANY;
567 profile.min_resolution.SetSize(16, 16); 571 profile.min_resolution.SetSize(16, 16);
568 profile.max_resolution.SetSize(1920, 1088); 572 profile.max_resolution.SetSize(1920, 1088);
569 profiles.push_back(profile); 573 profiles.push_back(profile);
570 return profiles; 574 return profiles;
571 } 575 }
572 576
573 } // namespace content 577 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698