Diff
Modified: trunk/Source/WebCore/ChangeLog (105137 => 105138)
--- trunk/Source/WebCore/ChangeLog 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/ChangeLog 2012-01-17 11:13:00 UTC (rev 105138)
@@ -1,3 +1,25 @@
+2012-01-17 Tommy Widenflycht <[email protected]>
+
+ MediaStream API: Add the mediaStream constructor
+ https://bugs.webkit.org/show_bug.cgi?id=76436
+
+ Adding support for creating a MediaStream using a collection of MediaStreamTracks.
+
+ Reviewed by Adam Barth.
+
+ Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.
+
+ * mediastream/MediaStream.cpp:
+ (WebCore::MediaStream::create):
+ * mediastream/MediaStream.h:
+ * mediastream/MediaStream.idl:
+ * mediastream/MediaStreamTrack.cpp:
+ (WebCore::MediaStreamTrack::component):
+ * mediastream/MediaStreamTrack.h:
+ * platform/mediastream/MediaStreamCenter.cpp:
+ (WebCore::MediaStreamCenter::didConstructMediaStream):
+ * platform/mediastream/MediaStreamCenter.h:
+
2012-01-17 Joshua Bell <[email protected]>
IndexedDB: IDBIndex.get/getKey should yield undefined, not an error
Modified: trunk/Source/WebCore/mediastream/MediaStream.cpp (105137 => 105138)
--- trunk/Source/WebCore/mediastream/MediaStream.cpp 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/mediastream/MediaStream.cpp 2012-01-17 11:13:00 UTC (rev 105138)
@@ -29,10 +29,24 @@
#if ENABLE(MEDIA_STREAM)
#include "Event.h"
+#include "MediaStreamCenter.h"
#include "ScriptExecutionContext.h"
+#include "UUID.h"
namespace WebCore {
+PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context, PassRefPtr<MediaStreamTrackList> prpTracks)
+{
+ RefPtr<MediaStreamTrackList> tracks = prpTracks;
+ MediaStreamSourceVector sources;
+ for (unsigned i = 0; i < tracks->length(); ++i)
+ sources.append(tracks->item(i)->component()->source());
+
+ RefPtr<MediaStreamDescriptor> descriptor = MediaStreamDescriptor::create(createCanonicalUUIDString(), sources);
+ MediaStreamCenter::instance().didConstructMediaStream(descriptor.get());
+ return adoptRef(new MediaStream(context, descriptor.release()));
+}
+
PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor)
{
return adoptRef(new MediaStream(context, streamDescriptor));
Modified: trunk/Source/WebCore/mediastream/MediaStream.h (105137 => 105138)
--- trunk/Source/WebCore/mediastream/MediaStream.h 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/mediastream/MediaStream.h 2012-01-17 11:13:00 UTC (rev 105138)
@@ -47,6 +47,7 @@
};
static PassRefPtr<MediaStream> create(ScriptExecutionContext*, PassRefPtr<MediaStreamDescriptor>);
+ static PassRefPtr<MediaStream> create(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackList>);
virtual ~MediaStream();
DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
Modified: trunk/Source/WebCore/mediastream/MediaStream.idl (105137 => 105138)
--- trunk/Source/WebCore/mediastream/MediaStream.idl 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/mediastream/MediaStream.idl 2012-01-17 11:13:00 UTC (rev 105138)
@@ -26,8 +26,10 @@
interface [
Conditional=MEDIA_STREAM,
- EventTarget
- ] MediaStream {
+ EventTarget,
+ Constructor(in MediaStreamTrackList trackList),
+ CallWith=ScriptExecutionContext
+ ] MediaStream {
readonly attribute DOMString label;
readonly attribute MediaStreamTrackList tracks;
Modified: trunk/Source/WebCore/mediastream/MediaStreamTrack.cpp (105137 => 105138)
--- trunk/Source/WebCore/mediastream/MediaStreamTrack.cpp 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/mediastream/MediaStreamTrack.cpp 2012-01-17 11:13:00 UTC (rev 105138)
@@ -29,6 +29,7 @@
#if ENABLE(MEDIA_STREAM)
#include "MediaStreamCenter.h"
+#include "MediaStreamComponent.h"
namespace WebCore {
@@ -83,6 +84,11 @@
MediaStreamCenter::instance().didSetMediaStreamTrackEnabled(m_streamDescriptor.get(), m_trackIndex);
}
+MediaStreamComponent* MediaStreamTrack::component()
+{
+ return m_streamDescriptor->component(m_trackIndex);
+}
+
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/mediastream/MediaStreamTrack.h (105137 => 105138)
--- trunk/Source/WebCore/mediastream/MediaStreamTrack.h 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/mediastream/MediaStreamTrack.h 2012-01-17 11:13:00 UTC (rev 105138)
@@ -36,6 +36,8 @@
namespace WebCore {
+class MediaStreamComponent;
+
class MediaStreamTrack : public RefCounted<MediaStreamTrack> {
public:
static PassRefPtr<MediaStreamTrack> create(PassRefPtr<MediaStreamDescriptor>, size_t trackIndex);
@@ -47,6 +49,8 @@
bool enabled() const;
void setEnabled(bool);
+ MediaStreamComponent* component();
+
private:
MediaStreamTrack(PassRefPtr<MediaStreamDescriptor>, size_t trackIndex);
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.cpp (105137 => 105138)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.cpp 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.cpp 2012-01-17 11:13:00 UTC (rev 105138)
@@ -57,6 +57,7 @@
// FIXME: remove when real implementations are available
// Empty implementations for ports that build with MEDIA_STREAM enabled by default.
+
MediaStreamCenter::MediaStreamCenter()
{
}
@@ -79,6 +80,10 @@
{
}
+void MediaStreamCenter::didConstructMediaStream(MediaStreamDescriptor*)
+{
+}
+
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.h (105137 => 105138)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.h 2012-01-17 10:51:55 UTC (rev 105137)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.h 2012-01-17 11:13:00 UTC (rev 105138)
@@ -65,6 +65,7 @@
// Calls from the DOM objects to notify the platform
void didSetMediaStreamTrackEnabled(MediaStreamDescriptor*, unsigned componentIndex);
void didStopLocalMediaStream(MediaStreamDescriptor*);
+ void didConstructMediaStream(MediaStreamDescriptor*);
// Calls from the platform to update the DOM objects
void endLocalMediaStream(MediaStreamDescriptor*);