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

Unified Diff: media/filters/gpu_video_decoder.cc

Issue 1963773003: Merge to M51: Various fixes to prevent playback hang on MotoX. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 7 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
« no previous file with comments | « media/filters/ffmpeg_video_decoder.cc ('k') | media/filters/vpx_video_decoder.cc » ('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 2e11d8786863c034b87f05dd097905f068276d53..84f70b4ca5d148ee54e09d49a32ced952b9593a8 100644
--- a/media/filters/gpu_video_decoder.cc
+++ b/media/filters/gpu_video_decoder.cc
@@ -130,6 +130,20 @@ static void ReportGpuVideoDecoderInitializeStatusToUMAAndRunCB(
cb.Run(success);
}
+// static
+void ReleaseMailboxTrampoline(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ const VideoFrame::ReleaseMailboxCB& release_mailbox_cb,
+ const gpu::SyncToken& release_sync_token) {
+ if (task_runner->BelongsToCurrentThread()) {
+ release_mailbox_cb.Run(release_sync_token);
+ return;
+ }
+
+ task_runner->PostTask(FROM_HERE,
+ base::Bind(release_mailbox_cb, release_sync_token));
+}
+
std::string GpuVideoDecoder::GetDisplayName() const {
return kDecoderName;
}
@@ -187,7 +201,7 @@ void GpuVideoDecoder::Initialize(const VideoDecoderConfig& config,
supports_deferred_initialization_ = !!(
capabilities.flags &
VideoDecodeAccelerator::Capabilities::SUPPORTS_DEFERRED_INITIALIZATION);
- output_cb_ = BindToCurrentLoop(output_cb);
+ output_cb_ = output_cb;
if (config.is_encrypted() && !supports_deferred_initialization_) {
DVLOG(1) << __FUNCTION__
@@ -547,9 +561,10 @@ void GpuVideoDecoder::PictureReady(const media::Picture& picture) {
opaque ? PIXEL_FORMAT_XRGB : PIXEL_FORMAT_ARGB,
gpu::MailboxHolder(pb.texture_mailbox(0), gpu::SyncToken(),
decoder_texture_target_),
- BindToCurrentLoop(base::Bind(
- &GpuVideoDecoder::ReleaseMailbox, weak_factory_.GetWeakPtr(),
- factories_, picture.picture_buffer_id(), pb.texture_ids())),
+ base::Bind(&ReleaseMailboxTrampoline, factories_->GetTaskRunner(),
+ base::Bind(&GpuVideoDecoder::ReleaseMailbox,
+ weak_factory_.GetWeakPtr(), factories_,
+ picture.picture_buffer_id(), pb.texture_ids())),
pb.size(), visible_rect, natural_size, timestamp));
if (!frame) {
DLOG(ERROR) << "Create frame failed for: " << picture.picture_buffer_id();
« no previous file with comments | « media/filters/ffmpeg_video_decoder.cc ('k') | media/filters/vpx_video_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698