Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "media/mojo/clients/mojo_video_decoder.h" | 5 #include "media/mojo/clients/mojo_video_decoder.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 return; | 97 return; |
| 98 } | 98 } |
| 99 | 99 |
| 100 uint64_t decode_id = decode_counter_++; | 100 uint64_t decode_id = decode_counter_++; |
| 101 pending_decodes_[decode_id] = decode_cb; | 101 pending_decodes_[decode_id] = decode_cb; |
| 102 remote_decoder_->Decode(std::move(mojo_buffer), | 102 remote_decoder_->Decode(std::move(mojo_buffer), |
| 103 base::Bind(&MojoVideoDecoder::OnDecodeDone, | 103 base::Bind(&MojoVideoDecoder::OnDecodeDone, |
| 104 base::Unretained(this), decode_id)); | 104 base::Unretained(this), decode_id)); |
| 105 } | 105 } |
| 106 | 106 |
| 107 void MojoVideoDecoder::OnVideoFrameDecoded(mojom::VideoFramePtr frame) { | 107 void MojoVideoDecoder::OnVideoFrameDecoded( |
| 108 mojom::VideoFramePtr frame, | |
| 109 const OnVideoFrameDecodedCallback& callback) { | |
| 108 DVLOG(2) << __func__; | 110 DVLOG(2) << __func__; |
| 109 DCHECK(task_runner_->BelongsToCurrentThread()); | 111 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 110 output_cb_.Run(frame.To<scoped_refptr<VideoFrame>>()); | 112 |
| 113 scoped_refptr<VideoFrame> video_frame = frame.To<scoped_refptr<VideoFrame>>(); | |
| 114 // TODO(sandersd): Fix threading and lifetime of |this|. | |
| 115 video_frame->SetReleaseMailboxCB(base::Bind( | |
| 116 &MojoVideoDecoder::OnReleaseMailbox, base::Unretained(this), callback)); | |
|
sandersd (OOO until July 31)
2017/01/19 19:40:48
This isn't useful for non-mailbox VideoFrames, but
| |
| 117 output_cb_.Run(std::move(video_frame)); | |
| 118 } | |
| 119 | |
| 120 void MojoVideoDecoder::OnReleaseMailbox( | |
| 121 const OnVideoFrameDecodedCallback& callback, | |
| 122 const gpu::SyncToken& release_sync_token) { | |
| 123 DCHECK(task_runner_->BelongsToCurrentThread()); | |
| 124 | |
| 125 base::Optional<gpu::SyncToken> token; | |
| 126 if (release_sync_token.HasData()) | |
| 127 token = release_sync_token; | |
| 128 callback.Run(std::move(token)); | |
| 111 } | 129 } |
| 112 | 130 |
| 113 void MojoVideoDecoder::OnDecodeDone(uint64_t decode_id, DecodeStatus status) { | 131 void MojoVideoDecoder::OnDecodeDone(uint64_t decode_id, DecodeStatus status) { |
| 114 DVLOG(2) << __func__; | 132 DVLOG(2) << __func__; |
| 115 DCHECK(task_runner_->BelongsToCurrentThread()); | 133 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 116 | 134 |
| 117 auto it = pending_decodes_.find(decode_id); | 135 auto it = pending_decodes_.find(decode_id); |
| 118 if (it == pending_decodes_.end()) { | 136 if (it == pending_decodes_.end()) { |
| 119 DLOG(ERROR) << "Decode request " << decode_id << " not found"; | 137 DLOG(ERROR) << "Decode request " << decode_id << " not found"; |
| 120 Stop(); | 138 Stop(); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 208 | 226 |
| 209 for (const auto& pending_decode : pending_decodes_) | 227 for (const auto& pending_decode : pending_decodes_) |
| 210 pending_decode.second.Run(DecodeStatus::DECODE_ERROR); | 228 pending_decode.second.Run(DecodeStatus::DECODE_ERROR); |
| 211 pending_decodes_.clear(); | 229 pending_decodes_.clear(); |
| 212 | 230 |
| 213 if (!reset_cb_.is_null()) | 231 if (!reset_cb_.is_null()) |
| 214 base::ResetAndReturn(&reset_cb_).Run(); | 232 base::ResetAndReturn(&reset_cb_).Run(); |
| 215 } | 233 } |
| 216 | 234 |
| 217 } // namespace media | 235 } // namespace media |
| OLD | NEW |