#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) {
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 {
}
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++) {
}
void VideoCaptureMessageFilter::OnFilterRemoved() {
- channel_ = NULL;
+ sender_ = NULL;
}
void VideoCaptureMessageFilter::OnChannelClosing() {
- channel_ = NULL;
+ sender_ = NULL;
}
VideoCaptureMessageFilter::~VideoCaptureMessageFilter() {}
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;
}
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(
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