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

Unified Diff: media/filters/gpu_video_decoder.cc

Issue 1490333005: Don't require VDAs to return all PictureBuffers at once. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cl feedback. Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/gpu_video_decoder.h ('k') | media/renderers/gpu_video_accelerator_factories.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/gpu_video_decoder.cc
diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc
index 1185b967316e7ea95a7900fa5160e58caee7c835..c413a86fea4b959bdeecdbdbcbe5c25c6a89cb3d 100644
--- a/media/filters/gpu_video_decoder.cc
+++ b/media/filters/gpu_video_decoder.cc
@@ -68,6 +68,7 @@ GpuVideoDecoder::GpuVideoDecoder(GpuVideoAcceleratorFactories* factories)
next_picture_buffer_id_(0),
next_bitstream_buffer_id_(0),
available_pictures_(0),
+ needs_all_picture_buffers_to_decode_(false),
weak_factory_(this) {
DCHECK(factories_);
}
@@ -154,7 +155,10 @@ void GpuVideoDecoder::Initialize(const VideoDecoderConfig& config,
return;
}
- if (!IsProfileSupported(config.profile(), config.coded_size())) {
+ VideoDecodeAccelerator::Capabilities capabilities =
+ factories_->GetVideoDecodeAcceleratorCapabilities();
+ if (!IsProfileSupported(capabilities, config.profile(),
+ config.coded_size())) {
DVLOG(1) << "Profile " << config.profile() << " or coded size "
<< config.coded_size().ToString() << " not supported.";
bound_init_cb.Run(false);
@@ -162,6 +166,9 @@ void GpuVideoDecoder::Initialize(const VideoDecoderConfig& config,
}
config_ = config;
+ needs_all_picture_buffers_to_decode_ =
+ capabilities.flags &
+ VideoDecodeAccelerator::Capabilities::NEEDS_ALL_PICTURE_BUFFERS_TO_DECODE;
needs_bitstream_conversion_ = (config.codec() == kCodecH264);
output_cb_ = BindToCurrentLoop(output_cb);
@@ -354,9 +361,11 @@ bool GpuVideoDecoder::NeedsBitstreamConversion() const {
bool GpuVideoDecoder::CanReadWithoutStalling() const {
DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent();
- return
- next_picture_buffer_id_ == 0 || // Decode() will ProvidePictureBuffers().
- available_pictures_ > 0;
+ return next_picture_buffer_id_ ==
+ 0 || // Decode() will ProvidePictureBuffers().
+ (!needs_all_picture_buffers_to_decode_ && available_pictures_ > 0) ||
+ available_pictures_ ==
+ static_cast<int>(assigned_picture_buffers_.size());
}
int GpuVideoDecoder::GetMaxDecodeRequests() const {
@@ -645,12 +654,12 @@ void GpuVideoDecoder::NotifyError(media::VideoDecodeAccelerator::Error error) {
DestroyVDA();
}
-bool GpuVideoDecoder::IsProfileSupported(VideoCodecProfile profile,
- const gfx::Size& coded_size) {
+bool GpuVideoDecoder::IsProfileSupported(
+ const VideoDecodeAccelerator::Capabilities& capabilities,
+ VideoCodecProfile profile,
+ const gfx::Size& coded_size) {
DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent();
- VideoDecodeAccelerator::SupportedProfiles supported_profiles =
- factories_->GetVideoDecodeAcceleratorSupportedProfiles();
- for (const auto& supported_profile : supported_profiles) {
+ for (const auto& supported_profile : capabilities.supported_profiles) {
if (profile == supported_profile.profile) {
return IsCodedSizeSupported(coded_size,
supported_profile.min_resolution,
« no previous file with comments | « media/filters/gpu_video_decoder.h ('k') | media/renderers/gpu_video_accelerator_factories.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698