Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / video_capture_message_filter.cc
index 52847d9..7157407 100644 (file)
@@ -6,12 +6,13 @@
 
 #include "content/common/media/video_capture_messages.h"
 #include "content/common/view_messages.h"
+#include "ipc/ipc_sender.h"
 
 namespace content {
 
 VideoCaptureMessageFilter::VideoCaptureMessageFilter()
     : last_device_id_(0),
-      channel_(NULL) {
+      sender_(NULL) {
 }
 
 void VideoCaptureMessageFilter::AddDelegate(Delegate* delegate) {
@@ -20,7 +21,7 @@ void VideoCaptureMessageFilter::AddDelegate(Delegate* delegate) {
   while (delegates_.find(last_device_id_) != delegates_.end())
     last_device_id_++;
 
-  if (channel_) {
+  if (sender_) {
     delegates_[last_device_id_] = delegate;
     delegate->OnDelegateAdded(last_device_id_);
   } else {
@@ -46,29 +47,35 @@ void VideoCaptureMessageFilter::RemoveDelegate(Delegate* delegate) {
 }
 
 bool VideoCaptureMessageFilter::Send(IPC::Message* message) {
-  if (!channel_) {
+  if (!sender_) {
     delete message;
     return false;
   }
 
-  return channel_->Send(message);
+  return sender_->Send(message);
 }
 
 bool VideoCaptureMessageFilter::OnMessageReceived(const IPC::Message& message) {
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(VideoCaptureMessageFilter, message)
     IPC_MESSAGE_HANDLER(VideoCaptureMsg_BufferReady, OnBufferReceived)
+    IPC_MESSAGE_HANDLER(VideoCaptureMsg_MailboxBufferReady,
+                        OnMailboxBufferReceived)
     IPC_MESSAGE_HANDLER(VideoCaptureMsg_StateChanged, OnDeviceStateChanged)
     IPC_MESSAGE_HANDLER(VideoCaptureMsg_NewBuffer, OnBufferCreated)
     IPC_MESSAGE_HANDLER(VideoCaptureMsg_FreeBuffer, OnBufferDestroyed)
+    IPC_MESSAGE_HANDLER(VideoCaptureMsg_DeviceSupportedFormatsEnumerated,
+                        OnDeviceSupportedFormatsEnumerated)
+    IPC_MESSAGE_HANDLER(VideoCaptureMsg_DeviceFormatsInUseReceived,
+                        OnDeviceFormatsInUseReceived)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
   return handled;
 }
 
-void VideoCaptureMessageFilter::OnFilterAdded(IPC::Channel* channel) {
+void VideoCaptureMessageFilter::OnFilterAdded(IPC::Sender* sender) {
   DVLOG(1) << "VideoCaptureMessageFilter::OnFilterAdded()";
-  channel_ = channel;
+  sender_ = sender;
 
   for (Delegates::iterator it = pending_delegates_.begin();
        it != pending_delegates_.end(); it++) {
@@ -79,11 +86,11 @@ void VideoCaptureMessageFilter::OnFilterAdded(IPC::Channel* channel) {
 }
 
 void VideoCaptureMessageFilter::OnFilterRemoved() {
-  channel_ = NULL;
+  sender_ = NULL;
 }
 
 void VideoCaptureMessageFilter::OnChannelClosing() {
-  channel_ = NULL;
+  sender_ = NULL;
 }
 
 VideoCaptureMessageFilter::~VideoCaptureMessageFilter() {}
@@ -101,13 +108,13 @@ void VideoCaptureMessageFilter::OnBufferCreated(
     int buffer_id) {
   Delegate* delegate = find_delegate(device_id);
   if (!delegate) {
-    DLOG(WARNING) << "OnBufferCreated: Got video frame buffer for a "
-        "non-existent or removed video capture.";
+    DLOG(WARNING) << "OnBufferCreated: Got video SHM buffer for a "
+                     "non-existent or removed video capture.";
 
     // Send the buffer back to Host in case it's waiting for all buffers
     // to be returned.
     base::SharedMemory::CloseHandle(handle);
-    Send(new VideoCaptureHostMsg_BufferReady(device_id, buffer_id));
+    Send(new VideoCaptureHostMsg_BufferReady(device_id, buffer_id, 0));
     return;
   }
 
@@ -117,20 +124,43 @@ void VideoCaptureMessageFilter::OnBufferCreated(
 void VideoCaptureMessageFilter::OnBufferReceived(
     int device_id,
     int buffer_id,
-    base::Time timestamp,
-    const media::VideoCaptureFormat& format) {
+    const media::VideoCaptureFormat& format,
+    const gfx::Rect& visible_rect,
+    base::TimeTicks timestamp) {
   Delegate* delegate = find_delegate(device_id);
   if (!delegate) {
-    DLOG(WARNING) << "OnBufferReceived: Got video frame buffer for a "
-        "non-existent or removed video capture.";
+    DLOG(WARNING) << "OnBufferReceived: Got video SHM buffer for a "
+                     "non-existent or removed video capture.";
+
+    // Send the buffer back to Host in case it's waiting for all buffers
+    // to be returned.
+    Send(new VideoCaptureHostMsg_BufferReady(device_id, buffer_id, 0));
+    return;
+  }
+
+  delegate->OnBufferReceived(buffer_id, format, visible_rect, timestamp);
+}
+
+void VideoCaptureMessageFilter::OnMailboxBufferReceived(
+    int device_id,
+    int buffer_id,
+    const gpu::MailboxHolder& mailbox_holder,
+    const media::VideoCaptureFormat& format,
+    base::TimeTicks timestamp) {
+  Delegate* delegate = find_delegate(device_id);
+
+  if (!delegate) {
+    DLOG(WARNING) << "OnMailboxBufferReceived: Got video mailbox buffer for a "
+                     "non-existent or removed video capture.";
 
     // Send the buffer back to Host in case it's waiting for all buffers
     // to be returned.
-    Send(new VideoCaptureHostMsg_BufferReady(device_id, buffer_id));
+    Send(new VideoCaptureHostMsg_BufferReady(device_id, buffer_id, 0));
     return;
   }
 
-  delegate->OnBufferReceived(buffer_id, timestamp, format);
+  delegate->OnMailboxBufferReceived(
+      buffer_id, mailbox_holder, format, timestamp);
 }
 
 void VideoCaptureMessageFilter::OnBufferDestroyed(
@@ -158,4 +188,26 @@ void VideoCaptureMessageFilter::OnDeviceStateChanged(
   delegate->OnStateChanged(state);
 }
 
+void VideoCaptureMessageFilter::OnDeviceSupportedFormatsEnumerated(
+    int device_id,
+    const media::VideoCaptureFormats& supported_formats) {
+  Delegate* delegate = find_delegate(device_id);
+  if (!delegate) {
+    DLOG(WARNING) << "OnDeviceFormatsEnumerated: unknown device";
+    return;
+  }
+  delegate->OnDeviceSupportedFormatsEnumerated(supported_formats);
+}
+
+void VideoCaptureMessageFilter::OnDeviceFormatsInUseReceived(
+    int device_id,
+    const media::VideoCaptureFormats& formats_in_use) {
+  Delegate* delegate = find_delegate(device_id);
+  if (!delegate) {
+    DLOG(WARNING) << "OnDeviceFormatInUse: unknown device";
+    return;
+  }
+  delegate->OnDeviceFormatsInUseReceived(formats_in_use);
+}
+
 }  // namespace content