Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(781)

Unified Diff: content/renderer/pepper/resource_converter.cc

Issue 128683003: [PPAPI] Implement media stream video track API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@video_track_impl_cl
Patch Set: Fix review issues Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/pepper/resource_converter.cc
diff --git a/content/renderer/pepper/resource_converter.cc b/content/renderer/pepper/resource_converter.cc
index 5054c2dc3a4ff1a3679048067b0dd40eec942a1e..01c2117d98c959edbcae5018d8ce657ce6594c74 100644
--- a/content/renderer/pepper/resource_converter.cc
+++ b/content/renderer/pepper/resource_converter.cc
@@ -8,6 +8,7 @@
#include "base/message_loop/message_loop.h"
#include "content/public/renderer/renderer_ppapi_host.h"
#include "content/renderer/pepper/pepper_file_system_host.h"
+#include "content/renderer/pepper/pepper_media_stream_video_track_host.h"
#include "ipc/ipc_message.h"
#include "ppapi/host/ppapi_host.h"
#include "ppapi/host/resource_host.h"
@@ -15,8 +16,11 @@
#include "ppapi/shared_impl/resource_var.h"
#include "ppapi/shared_impl/scoped_pp_var.h"
#include "third_party/WebKit/public/platform/WebFileSystem.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
#include "third_party/WebKit/public/web/WebDOMFileSystem.h"
+#include "third_party/WebKit/public/web/WebDOMMediaStreamTrack.h"
+namespace content {
namespace {
void FlushComplete(
@@ -52,7 +56,7 @@ PP_FileSystemType WebFileSystemTypeToPPAPI(blink::WebFileSystem::Type type) {
// On error, false.
bool DOMFileSystemToResource(
PP_Instance instance,
- content::RendererPpapiHost* host,
+ RendererPpapiHost* host,
const blink::WebDOMFileSystem& dom_file_system,
int* pending_renderer_id,
scoped_ptr<IPC::Message>* create_message,
@@ -71,8 +75,8 @@ bool DOMFileSystemToResource(
*pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost(
scoped_ptr<ppapi::host::ResourceHost>(
- new content::PepperFileSystemHost(host, instance, 0, root_url,
- file_system_type)));
+ new PepperFileSystemHost(host, instance, 0, root_url,
+ file_system_type)));
if (*pending_renderer_id == 0)
return false;
@@ -85,9 +89,37 @@ bool DOMFileSystemToResource(
return true;
}
-} // namespace
+bool DOMMediaStreamTrackToResource(
+ PP_Instance instance,
+ RendererPpapiHost* host,
+ const blink::WebDOMMediaStreamTrack& dom_media_stream_track,
+ int* pending_renderer_id,
+ scoped_ptr<IPC::Message>* create_message) {
+ DCHECK(!dom_media_stream_track.isNull());
+ *pending_renderer_id = 0;
+
+ const blink::WebMediaStreamTrack track = dom_media_stream_track.component();
+ const std::string id = track.source().id().utf8();
+
+ if (track.source().type() == blink::WebMediaStreamSource::TypeVideo) {
+ *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost(
+ scoped_ptr<ppapi::host::ResourceHost>(
+ new PepperMediaStreamVideoTrackHost(host, instance, 0, track)));
+ if (*pending_renderer_id == 0)
+ return false;
-namespace content {
+ create_message->reset(
+ new PpapiPluginMsg_MediaStreamVideoTrack_CreateFromPendingHost(id));
+ return true;
+ } else if (track.source().type() == blink::WebMediaStreamSource::TypeAudio) {
+ // TODO(penghuang): support audio track.
+ return false;
+ }
+
+ return false;
+}
+
+} // namespace
ResourceConverter::~ResourceConverter() {}
@@ -133,6 +165,23 @@ bool ResourceConverterImpl::FromV8Value(v8::Handle<v8::Object> val,
return true;
}
+ blink::WebDOMMediaStreamTrack dom_media_stream_track =
+ blink::WebDOMMediaStreamTrack::fromV8Value(val);
+ if (!dom_media_stream_track.isNull()) {
+ int pending_renderer_id;
+ scoped_ptr<IPC::Message> create_message;
+ if (!DOMMediaStreamTrackToResource(instance_, host_, dom_media_stream_track,
+ &pending_renderer_id, &create_message)) {
+ return false;
+ }
+ DCHECK(create_message);
+ scoped_refptr<HostResourceVar> result_var = CreateResourceVar(
+ pending_renderer_id, *create_message);
+ *result = result_var->GetPPVar();
+ *was_resource = true;
+ return true;
+ }
+
// The value was not convertible to a resource. Return true with
// |was_resource| set to false. As per the interface of FromV8Value, |result|
// may be left unmodified in this case.

Powered by Google App Engine
This is Rietveld 408576698