1 // Copyright 2014 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_MOJO_SERVICES_MEDIA_RESOURCE_SHIM_H_
6 #define MEDIA_MOJO_SERVICES_MEDIA_RESOURCE_SHIM_H_
10 #include "base/functional/callback.h"
11 #include "base/memory/weak_ptr.h"
12 #include "media/base/media_resource.h"
13 #include "media/mojo/services/mojo_demuxer_stream_adapter.h"
14 #include "mojo/public/cpp/bindings/pending_remote.h"
18 // MediaResource shim for mojom::DemuxerStreams.
19 class MediaResourceShim : public MediaResource {
21 // Constructs the shim; at least a single audio or video stream must be
22 // provided. |demuxer_ready_cb| will be called once the streams have been
23 // initialized. Calling any method before then is an error.
25 std::vector<mojo::PendingRemote<mojom::DemuxerStream>> streams,
26 base::OnceClosure demuxer_ready_cb);
28 MediaResourceShim(const MediaResourceShim&) = delete;
29 MediaResourceShim& operator=(const MediaResourceShim&) = delete;
31 ~MediaResourceShim() override;
33 // MediaResource interface.
34 std::vector<DemuxerStream*> GetAllStreams() override;
37 // Called as each mojom::DemuxerStream becomes ready. Once all streams
38 // are ready it will fire the |demuxer_ready_cb_| provided during
42 // Stored copy the ready callback provided during construction; cleared once
43 // all streams are ready.
44 base::OnceClosure demuxer_ready_cb_;
46 // Container for demuxer stream adapters which interface with the mojo level
47 // demuxer streams. |streams_ready_| tracks how many streams are ready and is
48 // used by OnStreamReady() to know when |demuxer_ready_cb_| should be fired.
49 std::vector<std::unique_ptr<MojoDemuxerStreamAdapter>> streams_;
50 size_t streams_ready_;
52 // WeakPtrFactorys must always be the last member variable.
53 base::WeakPtrFactory<MediaResourceShim> weak_factory_{this};
58 #endif // MEDIA_MOJO_SERVICES_MEDIA_RESOURCE_SHIM_H_