[M120 Migration][MM][CAPI] Fix the logic for media using capi player.
[platform/framework/web/chromium-efl.git] / media / mojo / services / media_resource_shim.h
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.
4
5 #ifndef MEDIA_MOJO_SERVICES_MEDIA_RESOURCE_SHIM_H_
6 #define MEDIA_MOJO_SERVICES_MEDIA_RESOURCE_SHIM_H_
7
8 #include <stddef.h>
9
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"
15
16 namespace media {
17
18 // MediaResource shim for mojom::DemuxerStreams.
19 class MediaResourceShim : public MediaResource {
20  public:
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.
24   MediaResourceShim(
25       std::vector<mojo::PendingRemote<mojom::DemuxerStream>> streams,
26       base::OnceClosure demuxer_ready_cb);
27
28   MediaResourceShim(const MediaResourceShim&) = delete;
29   MediaResourceShim& operator=(const MediaResourceShim&) = delete;
30
31   ~MediaResourceShim() override;
32
33   // MediaResource interface.
34   std::vector<DemuxerStream*> GetAllStreams() override;
35
36  private:
37   // Called as each mojom::DemuxerStream becomes ready.  Once all streams
38   // are ready it will fire the |demuxer_ready_cb_| provided during
39   // construction.
40   void OnStreamReady();
41
42   // Stored copy the ready callback provided during construction; cleared once
43   // all streams are ready.
44   base::OnceClosure demuxer_ready_cb_;
45
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_;
51
52   // WeakPtrFactorys must always be the last member variable.
53   base::WeakPtrFactory<MediaResourceShim> weak_factory_{this};
54 };
55
56 }  // namespace media
57
58 #endif  // MEDIA_MOJO_SERVICES_MEDIA_RESOURCE_SHIM_H_