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

Unified Diff: content/common/gpu/media/android_video_decode_accelerator.cc

Issue 1892013002: ReleaseOutputBuffer to surface back and front buffers where possible. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanerer. Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/media/android_video_decode_accelerator.cc
diff --git a/content/common/gpu/media/android_video_decode_accelerator.cc b/content/common/gpu/media/android_video_decode_accelerator.cc
index 0f23cefc87289e7e34c7f238a9af54433d37ca9f..ff35431dd4d3fc993ce7d38e891ac36e343f39d8 100644
--- a/content/common/gpu/media/android_video_decode_accelerator.cc
+++ b/content/common/gpu/media/android_video_decode_accelerator.cc
@@ -502,13 +502,14 @@ void AndroidVideoDecodeAccelerator::SetCdm(int cdm_id) {
void AndroidVideoDecodeAccelerator::DoIOTask(bool start_timer) {
DCHECK(thread_checker_.CalledOnValidThread());
TRACE_EVENT0("media", "AVDA::DoIOTask");
- if (state_ == ERROR || state_ == WAITING_FOR_CODEC) {
+ if (state_ == ERROR || state_ == WAITING_FOR_CODEC)
return;
- }
+ strategy_->MaybeRenderEarly(pictures_out_for_display_);
bool did_work = QueueInput();
while (DequeueOutput())
did_work = true;
+ strategy_->MaybeRenderEarly(pictures_out_for_display_);
liberato (no reviews please) 2016/04/22 00:51:05 i see why you'd want to call this periodically, bu
DaleCurtis 2016/04/22 01:33:58 I was thinking that there may be work after Dequeu
ManageTimer(did_work || start_timer);
}
@@ -819,6 +820,8 @@ void AndroidVideoDecodeAccelerator::SendDecodedFrameToClient(
return;
}
+ pictures_out_for_display_.push_back(picture_buffer_id);
+
bool size_changed = false;
if (i->second.size() != size_) {
// Size may have changed due to resolution change since the last time this
@@ -829,7 +832,8 @@ void AndroidVideoDecodeAccelerator::SendDecodedFrameToClient(
// Connect the PictureBuffer to the decoded frame, via whatever
// mechanism the strategy likes.
- strategy_->UseCodecBufferForPictureBuffer(codec_buffer_index, i->second);
+ strategy_->UseCodecBufferForPictureBuffer(codec_buffer_index, i->second,
+ pictures_out_for_display_);
const bool allow_overlay = strategy_->ArePicturesOverlayable();
@@ -918,6 +922,10 @@ void AndroidVideoDecodeAccelerator::ReusePictureBuffer(
DCHECK(thread_checker_.CalledOnValidThread());
free_picture_ids_.push(picture_buffer_id);
+ pictures_out_for_display_.erase(
+ std::remove(pictures_out_for_display_.begin(),
+ pictures_out_for_display_.end(), picture_buffer_id),
+ pictures_out_for_display_.end());
TRACE_COUNTER1("media", "AVDA::FreePictureIds", free_picture_ids_.size());
OutputBufferMap::const_iterator i =
@@ -928,7 +936,7 @@ void AndroidVideoDecodeAccelerator::ReusePictureBuffer(
return;
}
- strategy_->ReuseOnePictureBuffer(i->second);
+ strategy_->ReuseOnePictureBuffer(i->second, pictures_out_for_display_);
DoIOTask(true);
}

Powered by Google App Engine
This is Rietveld 408576698