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

Unified Diff: content/renderer/media/video_source_handler.cc

Issue 14312015: Effects Pepper Plugin and MediaStream Glue. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 8 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/media/video_source_handler.cc
===================================================================
--- content/renderer/media/video_source_handler.cc (revision 0)
+++ content/renderer/media/video_source_handler.cc (revision 0)
@@ -0,0 +1,112 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/media/video_source_handler.h"
+
+#include <string>
+
+#include "base/logging.h"
+#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/render_thread_impl.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaStreamRegistry.h"
+
+using cricket::VideoFrame;
+using webrtc::VideoSourceInterface;
+
+namespace content {
+
+PpFrameReader::PpFrameReader() {
+}
+
+PpFrameReader::~PpFrameReader() {
+}
+
+bool PpFrameReader::SetSize(int width, int height, int reserved) {
+ return true;
+}
+
+bool PpFrameReader::RenderFrame(const VideoFrame* frame) {
+ base::AutoLock auto_lock(lock_);
+ // Make a shallow copy of the frame. Both frames will share a single
+ // reference-counted frame buffer.
+ last_frame_.reset(frame->Copy());
+ return true;
+}
+
+bool PpFrameReader::GetFrame(VideoFrame** frame) {
juberti 2013/04/30 22:54:49 Should this emit something in ImageData format, so
Ronghua Wu (Left Chromium) 2013/04/30 23:07:14 See the other comment.
+ base::AutoLock auto_lock(lock_);
+ *frame = last_frame_.release();
+ return true;
+}
+
+VideoSourceHandler::VideoSourceHandler(
+ MediaStreamDependencyFactory* factory,
+ MediaStreamRegistryInterface* registry)
+ : factory_(factory),
+ registry_(registry) {
+ ASSERT(factory_ != NULL);
+}
+
+bool VideoSourceHandler::Open(const std::string& url,
+ FrameReaderInterface** frame_reader) {
+ scoped_refptr<webrtc::VideoSourceInterface> source = GetFirstVideoSource(url);
+ if (!source.get()) {
+ return false;
+ }
+ PpFrameReader* new_frame_reader = new PpFrameReader();
+ source->AddSink(new_frame_reader);
+ *frame_reader = new_frame_reader;
+ return true;
+}
+
+bool VideoSourceHandler::Close(const std::string& url,
+ FrameReaderInterface* frame_reader) {
+ scoped_refptr<webrtc::VideoSourceInterface> source = GetFirstVideoSource(url);
+ if (!source.get()) {
+ return false;
+ }
+ PpFrameReader* pp_frame_reader = static_cast<PpFrameReader*>(frame_reader);
+ source->RemoveSink(pp_frame_reader);
+ return true;
+}
+
+scoped_refptr<VideoSourceInterface> VideoSourceHandler::GetFirstVideoSource(
+ const std::string& url) {
+ scoped_refptr<webrtc::VideoSourceInterface> source;
+ WebKit::WebMediaStream stream;
+ if (registry_) {
+ stream = registry_->GetMediaStream(url);
+ } else {
+ stream =
+ WebKit::WebMediaStreamRegistry::lookupMediaStreamDescriptor(GURL(url));
+ }
+ if (stream.isNull() || !stream.extraData()) {
+ LOG(ERROR) << "GetFirstVideoSource - invalid url: " << url;
+ return source;
+ }
+
+ // Get the first video track from the stream.
+ MediaStreamExtraData* extra_data =
+ static_cast<MediaStreamExtraData*>(stream.extraData());
+ if (!extra_data) {
+ LOG(ERROR) << "GetFirstVideoSource - MediaStreamExtraData is NULL.";
+ return source;
+ }
+ webrtc::MediaStreamInterface* native_stream = extra_data->stream();
+ if (!native_stream) {
+ LOG(ERROR) << "GetFirstVideoSource - native stream is NULL.";
+ return source;
+ }
+ webrtc::VideoTrackVector native_video_tracks =
+ native_stream->GetVideoTracks();
+ if (native_video_tracks.empty()) {
+ LOG(ERROR) << "GetFirstVideoSource - stream has no video track.";
+ return source;
+ }
+ source = native_video_tracks[0]->GetSource();
+ return source;
+}
+
+} // namespace content
+
Property changes on: content/renderer/media/video_source_handler.cc
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698