Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / android / renderer_demuxer_android.h
1 // Copyright 2013 The Chromium Authors. 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_RENDERER_MEDIA_ANDROID_RENDERER_DEMUXER_ANDROID_H_
6 #define CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_DEMUXER_ANDROID_H_
7
8 #include "base/atomic_sequence_num.h"
9 #include "base/id_map.h"
10 #include "ipc/message_filter.h"
11 #include "media/base/android/demuxer_stream_player_params.h"
12
13 namespace base {
14 class MessageLoopProxy;
15 }
16
17 namespace content {
18
19 class MediaSourceDelegate;
20 class ThreadSafeSender;
21
22 // Represents the renderer process half of an IPC-based implementation of
23 // media::DemuxerAndroid.
24 //
25 // Refer to BrowserDemuxerAndroid for the browser process half.
26 class RendererDemuxerAndroid : public IPC::MessageFilter {
27  public:
28   RendererDemuxerAndroid();
29
30   // Returns the next available demuxer client ID for use in IPC messages.
31   //
32   // Safe to call on any thread.
33   int GetNextDemuxerClientID();
34
35   // Associates |delegate| with |demuxer_client_id| for handling incoming IPC
36   // messages.
37   //
38   // Must be called on media thread.
39   void AddDelegate(int demuxer_client_id, MediaSourceDelegate* delegate);
40
41   // Removes the association created by AddDelegate().
42   //
43   // Must be called on media thread.
44   void RemoveDelegate(int demuxer_client_id);
45
46   // IPC::MessageFilter overrides.
47   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
48
49   // media::DemuxerAndroidClient "implementation".
50   //
51   // TODO(scherkus): Consider having RendererDemuxerAndroid actually implement
52   // media::DemuxerAndroidClient and MediaSourceDelegate actually implement
53   // media::DemuxerAndroid.
54   void DemuxerReady(int demuxer_client_id,
55                     const media::DemuxerConfigs& configs);
56   void ReadFromDemuxerAck(int demuxer_client_id,
57                           const media::DemuxerData& data);
58   void DemuxerSeekDone(int demuxer_client_id,
59                        const base::TimeDelta& actual_browser_seek_time);
60   void DurationChanged(int demuxer_client_id, const base::TimeDelta& duration);
61
62  protected:
63   friend class base::RefCountedThreadSafe<RendererDemuxerAndroid>;
64   virtual ~RendererDemuxerAndroid();
65
66  private:
67   void DispatchMessage(const IPC::Message& message);
68   void OnReadFromDemuxer(int demuxer_client_id,
69                          media::DemuxerStream::Type type);
70   void OnDemuxerSeekRequest(int demuxer_client_id,
71                             const base::TimeDelta& time_to_seek,
72                             bool is_browser_seek);
73   void OnMediaConfigRequest(int demuxer_client_id);
74
75   base::AtomicSequenceNumber next_demuxer_client_id_;
76
77   IDMap<MediaSourceDelegate> delegates_;
78   scoped_refptr<ThreadSafeSender> thread_safe_sender_;
79   scoped_refptr<base::MessageLoopProxy> media_message_loop_;
80
81   DISALLOW_COPY_AND_ASSIGN(RendererDemuxerAndroid);
82 };
83
84 }  // namespace content
85
86 #endif  // CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_DEMUXER_ANDROID_H_