Title: [126211] trunk/Source
Revision
126211
Author
[email protected]
Date
2012-08-21 16:22:09 -0700 (Tue, 21 Aug 2012)

Log Message

[BlackBerry] Add support for getUserMedia
https://bugs.webkit.org/show_bug.cgi?id=94591

Patch by Robin Cao <[email protected]> on 2012-08-21
Reviewed by George Staikos.

Implement getUserMedia feature using the platform API.

Source/WebCore:

Tests in fast/mediastream cover this.

PR #153571

Reviewed internally by George Staikos.

* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
(WebCore::toWebMediaStreamSource):
(WebCore):
(WebCore::toWebMediaStreamDescriptor):
(WebCore::MediaPlayerPrivate::lookupMediaStream):
* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
(MediaPlayerPrivate):

Source/WebKit/blackberry:

PR #153571

Reviewed internally by George Staikos.

* WebCoreSupport/UserMediaClientImpl.cpp:
(WebCore):
(WebCore::userMediaRequestsMap):
(WebCore::toMediaStreamSource):
(WebCore::toMediaStreamDescriptor):
(WebUserMediaRequestClientImpl):
(WebCore::WebUserMediaRequestClientImpl::WebUserMediaRequestClientImpl):
(WebCore::WebUserMediaRequestClientImpl::requestSucceeded):
(WebCore::WebUserMediaRequestClientImpl::requestFailed):
(WebCore::UserMediaClientImpl::UserMediaClientImpl):
(WebCore::UserMediaClientImpl::~UserMediaClientImpl):
(WebCore::UserMediaClientImpl::requestUserMedia):
(WebCore::UserMediaClientImpl::cancelUserMediaRequest):
(WebCore::UserMediaClientImpl::webUserMedia):
* WebCoreSupport/UserMediaClientImpl.h:
(BlackBerry):
(Platform):
(UserMediaClientImpl):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (126210 => 126211)


--- trunk/Source/WebCore/ChangeLog	2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebCore/ChangeLog	2012-08-21 23:22:09 UTC (rev 126211)
@@ -1,3 +1,26 @@
+2012-08-21  Robin Cao  <[email protected]>
+
+        [BlackBerry] Add support for getUserMedia
+        https://bugs.webkit.org/show_bug.cgi?id=94591
+
+        Reviewed by George Staikos.
+
+        Implement getUserMedia feature using the platform API.
+
+        Tests in fast/mediastream cover this.
+
+        PR #153571
+
+        Reviewed internally by George Staikos.
+
+        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
+        (WebCore::toWebMediaStreamSource):
+        (WebCore):
+        (WebCore::toWebMediaStreamDescriptor):
+        (WebCore::MediaPlayerPrivate::lookupMediaStream):
+        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
+        (MediaPlayerPrivate):
+
 2012-08-21  Pavel Feldman  <[email protected]>
 
         Web Inspector: remove DOMNodeRemoved listener from the DefaultTextEditor

Modified: trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp (126210 => 126211)


--- trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp	2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp	2012-08-21 23:22:09 UTC (rev 126211)
@@ -30,6 +30,8 @@
 #include "HTMLMediaElement.h"
 #include "HTMLNames.h"
 #include "HostWindow.h"
+#include "MediaStreamDescriptor.h"
+#include "MediaStreamRegistry.h"
 #include "NotImplemented.h"
 #include "PlatformContextSkia.h"
 #include "ProtectionSpace.h"
@@ -783,6 +785,33 @@
     return rc;
 }
 
+static WebMediaStreamSource toWebMediaStreamSource(MediaStreamSource* src)
+{
+    return WebMediaStreamSource(src->id().utf8().data(), static_cast<WebMediaStreamSource::Type>(src->type()), src->name().utf8().data());
+}
+
+static WebMediaStreamDescriptor toWebMediaStreamDescriptor(MediaStreamDescriptor* d)
+{
+    vector<WebMediaStreamSource> audioSources;
+    for (size_t i = 0; i < d->numberOfAudioComponents(); i++)
+        audioSources.push_back(toWebMediaStreamSource(d->audioComponent(i)->source()));
+
+    vector<WebMediaStreamSource> videoSources;
+    for (size_t i = 0; i < d->numberOfVideoComponents(); i++)
+        videoSources.push_back(toWebMediaStreamSource(d->videoComponent(i)->source()));
+
+    return WebMediaStreamDescriptor(d->label().utf8().data(), audioSources, videoSources);
+}
+
+WebMediaStreamDescriptor MediaPlayerPrivate::lookupMediaStream(const string& url)
+{
+    MediaStreamDescriptor* descriptor = MediaStreamRegistry::registry().lookupMediaStreamDescriptor(String::fromUTF8(url.c_str()));
+    if (!descriptor)
+        return WebMediaStreamDescriptor();
+
+    return toWebMediaStreamDescriptor(descriptor);
+}
+
 FrameView* MediaPlayerPrivate::frameView() const
 {
     // We previously used m_webCorePlayer->frameView(), but this method returns

Modified: trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h (126210 => 126211)


--- trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h	2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h	2012-08-21 23:22:09 UTC (rev 126211)
@@ -138,6 +138,7 @@
     virtual bool isTabVisible() const;
     virtual int showErrorDialog(BlackBerry::Platform::PlatformPlayer::Error);
     virtual BlackBerry::Platform::Graphics::Window* platformWindow();
+    virtual BlackBerry::Platform::WebMediaStreamDescriptor lookupMediaStream(const std::string& url);
 
 private:
     MediaPlayerPrivate(MediaPlayer*);

Modified: trunk/Source/WebKit/blackberry/ChangeLog (126210 => 126211)


--- trunk/Source/WebKit/blackberry/ChangeLog	2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebKit/blackberry/ChangeLog	2012-08-21 23:22:09 UTC (rev 126211)
@@ -1,3 +1,35 @@
+2012-08-21  Robin Cao  <[email protected]>
+
+        [BlackBerry] Add support for getUserMedia
+        https://bugs.webkit.org/show_bug.cgi?id=94591
+
+        Reviewed by George Staikos.
+
+        Implement getUserMedia feature using the platform API.
+
+        PR #153571
+
+        Reviewed internally by George Staikos.
+
+        * WebCoreSupport/UserMediaClientImpl.cpp:
+        (WebCore):
+        (WebCore::userMediaRequestsMap):
+        (WebCore::toMediaStreamSource):
+        (WebCore::toMediaStreamDescriptor):
+        (WebUserMediaRequestClientImpl):
+        (WebCore::WebUserMediaRequestClientImpl::WebUserMediaRequestClientImpl):
+        (WebCore::WebUserMediaRequestClientImpl::requestSucceeded):
+        (WebCore::WebUserMediaRequestClientImpl::requestFailed):
+        (WebCore::UserMediaClientImpl::UserMediaClientImpl):
+        (WebCore::UserMediaClientImpl::~UserMediaClientImpl):
+        (WebCore::UserMediaClientImpl::requestUserMedia):
+        (WebCore::UserMediaClientImpl::cancelUserMediaRequest):
+        (WebCore::UserMediaClientImpl::webUserMedia):
+        * WebCoreSupport/UserMediaClientImpl.h:
+        (BlackBerry):
+        (Platform):
+        (UserMediaClientImpl):
+
 2012-08-21  Kihong Kwon  <[email protected]>
 
         [EFL][GTK][BlackBerry] Fix build error in the DeviceOrientationClient

Modified: trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.cpp (126210 => 126211)


--- trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.cpp	2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.cpp	2012-08-21 23:22:09 UTC (rev 126211)
@@ -20,18 +20,89 @@
 #include "UserMediaClientImpl.h"
 
 #if ENABLE(MEDIA_STREAM)
+#include "MediaStreamDescriptor.h"
 #include "WebPage.h"
 
+#include <BlackBerryPlatformWebMediaStreamDescriptor.h>
+#include <BlackBerryPlatformWebUserMedia.h>
+#include <wtf/HashMap.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
 #include <wtf/RefPtr.h>
 
+using namespace BlackBerry::Platform;
+
 namespace WebCore {
 
+class WebUserMediaRequestClientImpl;
+
+typedef HashMap<UserMediaRequest*, OwnPtr<WebUserMediaRequestClientImpl> > UserMediaRequestsMap;
+
+static UserMediaRequestsMap& userMediaRequestsMap()
+{
+    DEFINE_STATIC_LOCAL(UserMediaRequestsMap, requests, ());
+    return requests;
+}
+
+static PassRefPtr<MediaStreamSource> toMediaStreamSource(const WebMediaStreamSource& src)
+{
+    return MediaStreamSource::create(String::fromUTF8(src.id().c_str()), static_cast<MediaStreamSource::Type>(src.type()), String::fromUTF8(src.name().c_str()));
+}
+
+static PassRefPtr<MediaStreamDescriptor> toMediaStreamDescriptor(const WebMediaStreamDescriptor& d)
+{
+    MediaStreamSourceVector audioSources;
+    for (size_t i = 0; i < d.audios().size(); i++) {
+        RefPtr<MediaStreamSource> src = ""
+        audioSources.append(src.release());
+    }
+
+    MediaStreamSourceVector videoSources;
+    for (size_t i = 0; i < d.videos().size(); i++) {
+        RefPtr<MediaStreamSource> src = ""
+        videoSources.append(src.release());
+    }
+
+    return MediaStreamDescriptor::create(String::fromUTF8(d.label().c_str()), audioSources, videoSources);
+}
+
+class WebUserMediaRequestClientImpl : public WebUserMediaRequestClient {
+public:
+    WebUserMediaRequestClientImpl(PassRefPtr<UserMediaRequest> prpRequest)
+        : m_request(prpRequest)
+    {
+    }
+
+    void requestSucceeded(const WebMediaStreamDescriptor& d)
+    {
+        if (m_request) {
+            RefPtr<MediaStreamDescriptor> descriptor = toMediaStreamDescriptor(d);
+            m_request->succeed(descriptor);
+
+            userMediaRequestsMap().remove(m_request.get());
+        }
+    }
+
+    void requestFailed()
+    {
+        if (m_request) {
+            m_request->fail();
+            userMediaRequestsMap().remove(m_request.get());
+        }
+    }
+
+private:
+    RefPtr<UserMediaRequest> m_request;
+};
+
 UserMediaClientImpl::UserMediaClientImpl(BlackBerry::WebKit::WebPage*)
+    : m_webUserMedia(0)
 {
 }
 
 UserMediaClientImpl::~UserMediaClientImpl()
 {
+    BlackBerry::Platform::deleteGuardedObject(m_webUserMedia);
 }
 
 void UserMediaClientImpl::pageDestroyed()
@@ -40,12 +111,29 @@
 
 void UserMediaClientImpl::requestUserMedia(PassRefPtr<UserMediaRequest> prpRequest, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
 {
+    UserMediaRequest* request = prpRequest.get();
+    OwnPtr<WebUserMediaRequestClientImpl> requestClient = adoptPtr(new WebUserMediaRequestClientImpl(prpRequest));
+
+    webUserMedia()->requestUserMedia(WebUserMediaRequest(request->audio(), request->video(), requestClient.get()));
+    userMediaRequestsMap().add(request, requestClient.release());
 }
 
-void UserMediaClientImpl::cancelUserMediaRequest(UserMediaRequest*)
+void UserMediaClientImpl::cancelUserMediaRequest(UserMediaRequest* request)
 {
+    UserMediaRequestsMap::iterator it = userMediaRequestsMap().find(request);
+    if (it == userMediaRequestsMap().end())
+        return;
+
+    webUserMedia()->cancelUserMediaRequest(WebUserMediaRequest(request->audio(), request->video(), it->second.get()));
+    userMediaRequestsMap().remove(it);
 }
 
+BlackBerry::Platform::WebUserMedia* UserMediaClientImpl::webUserMedia()
+{
+    if (!m_webUserMedia)
+        m_webUserMedia = new WebUserMedia;
+    return m_webUserMedia;
 }
 
+}
 #endif

Modified: trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.h (126210 => 126211)


--- trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.h	2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.h	2012-08-21 23:22:09 UTC (rev 126211)
@@ -30,7 +30,11 @@
 namespace WebKit {
 class WebPage;
 }
+
+namespace Platform {
+class WebUserMedia;
 }
+}
 
 namespace WebCore {
 
@@ -47,6 +51,9 @@
 
 private:
     UserMediaClientImpl();
+    BlackBerry::Platform::WebUserMedia* webUserMedia();
+
+    BlackBerry::Platform::WebUserMedia* m_webUserMedia;
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to