| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "media/mojo/services/media_resource_shim.h" |
| |
| #include <utility> |
| |
| #include "base/bind.h" |
| #include "base/callback_helpers.h" |
| |
| namespace media { |
| |
| MediaResourceShim::MediaResourceShim( |
| std::vector<mojo::PendingRemote<mojom::DemuxerStream>> streams, |
| base::OnceClosure demuxer_ready_cb) |
| : demuxer_ready_cb_(std::move(demuxer_ready_cb)), streams_ready_(0) { |
| DCHECK(!streams.empty()); |
| DCHECK(demuxer_ready_cb_); |
| |
| for (auto& s : streams) { |
| streams_.emplace_back(new MojoDemuxerStreamAdapter( |
| std::move(s), base::BindOnce(&MediaResourceShim::OnStreamReady, |
| weak_factory_.GetWeakPtr()))); |
| } |
| } |
| |
| MediaResourceShim::~MediaResourceShim() = default; |
| |
| std::vector<DemuxerStream*> MediaResourceShim::GetAllStreams() { |
| DCHECK(!demuxer_ready_cb_); |
| std::vector<DemuxerStream*> result; |
| for (auto& stream : streams_) |
| result.push_back(stream.get()); |
| return result; |
| } |
| |
| void MediaResourceShim::OnStreamReady() { |
| if (++streams_ready_ == streams_.size()) |
| std::move(demuxer_ready_cb_).Run(); |
| } |
| |
| } // namespace media |