80fb745933e9df1bd7172b1afc55aa65f75e2470
[platform/framework/web/crosswalk-tizen.git] /
1 // Copyright 2014 Samsung Electronics Inc. All rights reserved.
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 CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_DEMUXER_EFL_H_
6 #define CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_DEMUXER_EFL_H_
7
8 #include "base/id_map.h"
9 #include "base/memory/shared_memory.h"
10 #include "content/public/browser/browser_message_filter.h"
11 #include "media/base/tizen/demuxer_efl.h"
12
13 namespace content {
14
15 // Represents the browser process half of an IPC-based demuxer proxy.
16 // It vends out media::DemuxerEfl instances that are registered with an
17 // end point in the renderer process.
18 //
19 // Refer to RendererDemuxerEfl for the renderer process half.
20 class CONTENT_EXPORT BrowserDemuxerEfl : public BrowserMessageFilter {
21  public:
22   BrowserDemuxerEfl();
23
24   // BrowserMessageFilter overrides.
25   void OverrideThreadForMessage(const IPC::Message& message,
26                                 BrowserThread::ID* thread) override;
27   bool OnMessageReceived(const IPC::Message& message) override;
28
29   // Returns an uninitialized demuxer implementation associated with
30   // |demuxer_client_id|, which can be used to communicate with the real demuxer
31   // in the renderer process.
32   std::unique_ptr<media::DemuxerEfl> CreateDemuxer(int demuxer_client_id);
33
34  protected:
35   friend class base::RefCountedThreadSafe<BrowserDemuxerEfl>;
36   ~BrowserDemuxerEfl() override;
37
38  private:
39   class Internal;
40
41   // Called by internal demuxer implementations to add/remove a client
42   // association.
43   void AddDemuxerClient(int demuxer_client_id, media::DemuxerEflClient* client);
44   void RemoveDemuxerClient(int demuxer_client_id);
45
46   // IPC message handlers.
47   void OnDemuxerReady(int demuxer_client_id,
48                       const media::DemuxerConfigs& configs);
49 #if defined(OS_TIZEN_TV_PRODUCT)
50   void OnDemuxerStateChanged(int demuxer_client_id,
51                              const media::DemuxerConfigs& configs);
52 #endif
53   void OnReadFromDemuxerAck(int demuxer_client_id,
54                             base::SharedMemoryHandle foreign_memory_handle,
55                             const media::DemuxedBufferMetaData& meta_data);
56   void OnDemuxerSeekDone(int demuxer_client_id,
57                          const base::TimeDelta& actual_browser_seek_time);
58   void OnDurationChanged(int demuxer_client_id,
59                          const base::TimeDelta& duration);
60
61   IDMap<media::DemuxerEflClient> demuxer_clients_;
62
63   DISALLOW_COPY_AND_ASSIGN(BrowserDemuxerEfl);
64 };
65
66 }  // namespace content
67
68 #endif  // CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_DEMUXER_EFL_H_