| Index: media/filters/gpu_video_decoder.cc
 | 
| diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc
 | 
| index 339d5910cd6f36115b88e12344c88f6fe55d57ab..35fd15993f05382aafe9244a99c998ae15313bf8 100644
 | 
| --- a/media/filters/gpu_video_decoder.cc
 | 
| +++ b/media/filters/gpu_video_decoder.cc
 | 
| @@ -321,9 +321,8 @@ void GpuVideoDecoder::NotifyInitializationComplete(bool success) {
 | 
|  
 | 
|  void GpuVideoDecoder::DestroyPictureBuffers(PictureBufferMap* buffers) {
 | 
|    DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent();
 | 
| -  for (PictureBufferMap::iterator it = buffers->begin(); it != buffers->end();
 | 
| -       ++it) {
 | 
| -    for (uint32_t id : it->second.texture_ids())
 | 
| +  for (const auto& kv : *buffers) {
 | 
| +    for (uint32_t id : kv.second.client_texture_ids())
 | 
|        factories_->DeleteTexture(id);
 | 
|    }
 | 
|  
 | 
| @@ -337,12 +336,8 @@ void GpuVideoDecoder::DestroyVDA() {
 | 
|  
 | 
|    // Not destroying PictureBuffers in |picture_buffers_at_display_| yet, since
 | 
|    // their textures may still be in use by the user of this GpuVideoDecoder.
 | 
| -  for (PictureBufferTextureMap::iterator it =
 | 
| -           picture_buffers_at_display_.begin();
 | 
| -       it != picture_buffers_at_display_.end();
 | 
| -       ++it) {
 | 
| -    assigned_picture_buffers_.erase(it->first);
 | 
| -  }
 | 
| +  for (const auto& kv : picture_buffers_at_display_)
 | 
| +    assigned_picture_buffers_.erase(kv.first);
 | 
|    DestroyPictureBuffers(&assigned_picture_buffers_);
 | 
|  }
 | 
|  
 | 
| @@ -538,15 +533,16 @@ void GpuVideoDecoder::DismissPictureBuffer(int32_t id) {
 | 
|    PictureBuffer buffer_to_dismiss = it->second;
 | 
|    assigned_picture_buffers_.erase(it);
 | 
|  
 | 
| -  if (!picture_buffers_at_display_.count(id)) {
 | 
| -    // We can delete the texture immediately as it's not being displayed.
 | 
| -    for (uint32_t id : buffer_to_dismiss.texture_ids())
 | 
| -      factories_->DeleteTexture(id);
 | 
| -    CHECK_GT(available_pictures_, 0);
 | 
| -    --available_pictures_;
 | 
| -  }
 | 
| -  // Not destroying a texture in display in |picture_buffers_at_display_|.
 | 
| -  // Postpone deletion until after it's returned to us.
 | 
| +  // If it's in |picture_buffers_at_display_|, postpone deletion of it until
 | 
| +  // it's returned to us.
 | 
| +  if (picture_buffers_at_display_.count(id))
 | 
| +    return;
 | 
| +
 | 
| +  // Otherwise, we can delete the texture immediately.
 | 
| +  for (uint32_t id : buffer_to_dismiss.client_texture_ids())
 | 
| +    factories_->DeleteTexture(id);
 | 
| +  CHECK_GT(available_pictures_, 0);
 | 
| +  --available_pictures_;
 | 
|  }
 | 
|  
 | 
|  void GpuVideoDecoder::PictureReady(const media::Picture& picture) {
 | 
| @@ -595,17 +591,18 @@ void GpuVideoDecoder::PictureReady(const media::Picture& picture) {
 | 
|    DCHECK(decoder_texture_target_);
 | 
|  
 | 
|    gpu::MailboxHolder mailbox_holders[VideoFrame::kMaxPlanes];
 | 
| -  for (size_t i = 0; i < pb.texture_ids().size(); ++i) {
 | 
| +  for (size_t i = 0; i < pb.client_texture_ids().size(); ++i) {
 | 
|      mailbox_holders[i] = gpu::MailboxHolder(pb.texture_mailbox(i), sync_token_,
 | 
|                                              decoder_texture_target_);
 | 
|    }
 | 
|  
 | 
|    scoped_refptr<VideoFrame> frame(VideoFrame::WrapNativeTextures(
 | 
|        pixel_format_, mailbox_holders,
 | 
| -      base::Bind(&ReleaseMailboxTrampoline, factories_->GetTaskRunner(),
 | 
| -                 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.client_texture_ids())),
 | 
|        pb.size(), visible_rect, natural_size, timestamp));
 | 
|    if (!frame) {
 | 
|      DLOG(ERROR) << "Create frame failed for: " << picture.picture_buffer_id();
 | 
| @@ -624,10 +621,10 @@ void GpuVideoDecoder::PictureReady(const media::Picture& picture) {
 | 
|    CHECK_GT(available_pictures_, 0);
 | 
|    --available_pictures_;
 | 
|  
 | 
| -  bool inserted =
 | 
| -      picture_buffers_at_display_
 | 
| -          .insert(std::make_pair(picture.picture_buffer_id(), pb.texture_ids()))
 | 
| -          .second;
 | 
| +  bool inserted = picture_buffers_at_display_
 | 
| +                      .insert(std::make_pair(picture.picture_buffer_id(),
 | 
| +                                             pb.client_texture_ids()))
 | 
| +                      .second;
 | 
|    DCHECK(inserted);
 | 
|  
 | 
|    DeliverFrame(frame);
 | 
| 
 |