Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / renderer / pepper / pepper_media_stream_track_host_base.cc
index 207de39..4a22c49 100644 (file)
@@ -25,14 +25,13 @@ PepperMediaStreamTrackHostBase::PepperMediaStreamTrackHostBase(
     PP_Resource resource)
     : ResourceHost(host->GetPpapiHost(), instance, resource),
       host_(host),
-      buffer_manager_(this) {
-}
+      buffer_manager_(this) {}
 
-PepperMediaStreamTrackHostBase::~PepperMediaStreamTrackHostBase() {
-}
+PepperMediaStreamTrackHostBase::~PepperMediaStreamTrackHostBase() {}
 
 bool PepperMediaStreamTrackHostBase::InitBuffers(int32_t number_of_buffers,
-                                                 int32_t buffer_size) {
+                                                 int32_t buffer_size,
+                                                 TrackType track_type) {
   DCHECK_GT(number_of_buffers, 0);
   DCHECK_GT(buffer_size,
             static_cast<int32_t>(sizeof(ppapi::MediaStreamBuffer::Header)));
@@ -50,23 +49,26 @@ bool PepperMediaStreamTrackHostBase::InitBuffers(int32_t number_of_buffers,
 
   base::SharedMemoryHandle shm_handle = shm->handle();
   if (!buffer_manager_.SetBuffers(
-        number_of_buffers, buffer_size, shm.Pass(), true)) {
+          number_of_buffers, buffer_size, shm.Pass(), true)) {
     return false;
   }
 
   base::PlatformFile platform_file =
 #if defined(OS_WIN)
-    shm_handle;
+      shm_handle;
 #elif defined(OS_POSIX)
-    shm_handle.fd;
+      shm_handle.fd;
 #else
 #error Not implemented.
 #endif
-  SerializedHandle handle(
-      host_->ShareHandleWithRemote(platform_file, false), size);
-  host()->SendUnsolicitedReplyWithHandles(pp_resource(),
+  SerializedHandle handle(host_->ShareHandleWithRemote(platform_file, false),
+                          size);
+  bool readonly = (track_type == kRead);
+  host()->SendUnsolicitedReplyWithHandles(
+      pp_resource(),
       PpapiPluginMsg_MediaStreamTrack_InitBuffers(number_of_buffers,
-                                                  buffer_size),
+                                                  buffer_size,
+                                                  readonly),
       std::vector<SerializedHandle>(1, handle));
   return true;
 }
@@ -75,18 +77,25 @@ void PepperMediaStreamTrackHostBase::SendEnqueueBufferMessageToPlugin(
     int32_t index) {
   DCHECK_GE(index, 0);
   DCHECK_LT(index, buffer_manager_.number_of_buffers());
+  host()->SendUnsolicitedReply(
+      pp_resource(), PpapiPluginMsg_MediaStreamTrack_EnqueueBuffer(index));
+}
+
+void PepperMediaStreamTrackHostBase::SendEnqueueBuffersMessageToPlugin(
+    const std::vector<int32_t>& indices) {
+  DCHECK_GE(indices.size(), 0U);
   host()->SendUnsolicitedReply(pp_resource(),
-      PpapiPluginMsg_MediaStreamTrack_EnqueueBuffer(index));
+      PpapiPluginMsg_MediaStreamTrack_EnqueueBuffers(indices));
 }
 
 int32_t PepperMediaStreamTrackHostBase::OnResourceMessageReceived(
     const IPC::Message& msg,
     HostMessageContext* context) {
   IPC_BEGIN_MESSAGE_MAP(PepperMediaStreamTrackHostBase, msg)
-    PPAPI_DISPATCH_HOST_RESOURCE_CALL(
-        PpapiHostMsg_MediaStreamTrack_EnqueueBuffer, OnHostMsgEnqueueBuffer)
-    PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
-        PpapiHostMsg_MediaStreamTrack_Close, OnHostMsgClose)
+  PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_MediaStreamTrack_EnqueueBuffer,
+                                    OnHostMsgEnqueueBuffer)
+  PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_MediaStreamTrack_Close,
+                                      OnHostMsgClose)
   IPC_END_MESSAGE_MAP()
   return ppapi::host::ResourceHost::OnResourceMessageReceived(msg, context);
 }