3a526e5b0670578470d409a5a1f6b4fbd01c9ddd
[platform/framework/web/crosswalk-tizen.git] /
1 // Copyright 2016 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_MEDIA_CAPTURE_HANDLER_H_
6 #define CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_MEDIA_CAPTURE_HANDLER_H_
7
8 #include "base/containers/scoped_ptr_hash_map.h"
9 #include "base/memory/singleton.h"
10 #include "base/memory/weak_ptr.h"
11 #include "base/threading/thread.h"
12 #include "content/common/content_export.h"
13 #include "content/public/browser/browser_message_filter.h"
14 #include "content/public/browser/render_frame_host.h"
15 #include "content/public/browser/web_contents_observer.h"
16 #include "media/capture/mediarecorder/media_recorder_tizen.h"
17 #include "ui/gfx/geometry/size.h"
18
19 namespace content {
20
21 class CONTENT_EXPORT BrowserMediaCaptureHandler {
22  public:
23   static BrowserMediaCaptureHandler* Create(RenderFrameHost* rfh);
24   BrowserMediaCaptureHandler(RenderFrameHost* render_frame_host);
25   ~BrowserMediaCaptureHandler();
26
27   bool StartCaptureThread(const tracked_objects::Location& location);
28
29   void StartRecording(int handler_id, std::string recording_format);
30   void PauseRecording(int handler_id);
31   void ResumeRecording(int handler_id);
32   void StopRecording(int handler_id);
33
34   void MuxedStreamCb(int handler_id,
35                      base::SharedMemoryHandle foreign_memory_handle,
36                      int size);
37
38   media::MediaRecorderTizen* GetCameraHandler(int handler_id);
39   void AddCameraHandler(int handler_id, media::MediaRecorderTizen* handler);
40
41   // Helper function to send messages to RenderFrameObserver.
42   bool Send(IPC::Message* msg);
43   int GetRoutingID();
44
45  private:
46   friend struct base::DefaultSingletonTraits<BrowserMediaCaptureHandler>;
47
48   void OnTakePicture(int handler_id,
49                      gfx::Size image_size,
50                      std::string image_format,
51                      std::string image_name);
52
53   void OnStartRecording(int handler_id, std::string recording_format);
54
55   void OnPauseRecording(int handler_id);
56   void OnResumeRecording(int handler_id);
57   void OnStopRecording(int handler_id);
58
59   base::Thread capture_thread_;
60
61   RenderFrameHost* render_frame_host_;
62
63   std::map<int, std::unique_ptr<media::MediaRecorderTizen>> camera_handle_;
64
65   base::WeakPtrFactory<BrowserMediaCaptureHandler> weak_factory_;
66
67   DISALLOW_COPY_AND_ASSIGN(BrowserMediaCaptureHandler);
68 };
69
70 }  // namespace content
71
72 #endif  // CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_MEDIA_CAPTURE_HANDLER_H_