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

Unified Diff: ppapi/proxy/media_stream_video_track_resource.cc

Issue 150403006: [PPAPI][MediaStream] Support configure for video input. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix review issues Created 6 years, 10 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: ppapi/proxy/media_stream_video_track_resource.cc
diff --git a/ppapi/proxy/media_stream_video_track_resource.cc b/ppapi/proxy/media_stream_video_track_resource.cc
index 451f259caad37f16c5a99d036a5867c4e5c3c573..e665d5bcc3b444eac2b54cd0c44ebc662069bef7 100644
--- a/ppapi/proxy/media_stream_video_track_resource.cc
+++ b/ppapi/proxy/media_stream_video_track_resource.cc
@@ -5,8 +5,10 @@
#include "ppapi/proxy/media_stream_video_track_resource.h"
#include "base/logging.h"
+#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/video_frame_resource.h"
#include "ppapi/shared_impl/media_stream_buffer.h"
+#include "ppapi/shared_impl/media_stream_video_track_shared.h"
#include "ppapi/shared_impl/var.h"
namespace ppapi {
@@ -39,13 +41,62 @@ PP_Bool MediaStreamVideoTrackResource::HasEnded() {
return PP_FromBool(has_ended());
}
-
int32_t MediaStreamVideoTrackResource::Configure(
const int32_t attrib_list[],
jschuh 2014/02/14 22:21:25 So, are you saying attrib_list is always static da
Peng 2014/02/16 15:48:13 1. The arguments are from plugin. I think it is no
scoped_refptr<TrackedCallback> callback) {
- // TODO(penghuang): redesign and implement Configure() to support format,
- // size, etc.
- return PP_ERROR_NOTSUPPORTED;
+ if (has_ended())
+ return PP_ERROR_FAILED;
+
+ if (TrackedCallback::IsPending(configure_callback_) ||
+ TrackedCallback::IsPending(get_frame_callback_)) {
+ return PP_ERROR_INPROGRESS;
+ }
+
+ // Do not support configure, if frames are hold by plugin.
+ if (!frames_.empty())
+ return PP_ERROR_INPROGRESS;
+
+ MediaStreamVideoTrackShared::Attributes attributes;
+ int i = 0;
+ for (;attrib_list[i] != PP_MEDIASTREAMVIDEOTRACK_ATTRIB_NONE; i += 2) {
+ switch (attrib_list[i]) {
+ case PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES:
+ attributes.mask |= MediaStreamVideoTrackShared::Attributes::MASK_BUFFERS;
+ attributes.buffers = attrib_list[i + 1];
+ break;
+ case PP_MEDIASTREAMVIDEOTRACK_ATTRIB_WIDTH:
+ attributes.mask |= MediaStreamVideoTrackShared::Attributes::MASK_WIDTH;
+ attributes.width = attrib_list[i + 1];
+ break;
+ case PP_MEDIASTREAMVIDEOTRACK_ATTRIB_HEIGHT:
+ attributes.mask |= MediaStreamVideoTrackShared::Attributes::MASK_HEIGHT;
+ attributes.height = attrib_list[i + 1];
+ break;
+ case PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT:
+ attributes.mask |= MediaStreamVideoTrackShared::Attributes::MASK_FORMAT;
+ attributes.format = static_cast<PP_VideoFrame_Format>(attrib_list[i + 1]);
+ break;
+ default:
+ return PP_ERROR_BADARGUMENT;
+ }
+ }
+
+ if (!MediaStreamVideoTrackShared::VerifyAttributes(attributes)) {
+ return PP_ERROR_BADARGUMENT;
+ }
+
+ if (!attributes.mask) {
+ return PP_OK;
+ }
+
+ configure_callback_ = callback;
+ Call<PpapiPluginMsg_MediaStreamVideoTrack_ConfigureReply>(
+ RENDERER,
+ PpapiHostMsg_MediaStreamVideoTrack_Configure(attributes),
+ base::Bind(&MediaStreamVideoTrackResource::OnPluginMsgConfigureReply,
+ base::Unretained(this)),
+ callback);
+ return PP_OK_COMPLETIONPENDING;
}
int32_t MediaStreamVideoTrackResource::GetAttrib(
@@ -61,8 +112,10 @@ int32_t MediaStreamVideoTrackResource::GetFrame(
if (has_ended())
return PP_ERROR_FAILED;
- if (TrackedCallback::IsPending(get_frame_callback_))
+ if (TrackedCallback::IsPending(configure_callback_) ||
+ TrackedCallback::IsPending(get_frame_callback_)) {
return PP_ERROR_INPROGRESS;
+ }
*frame = GetVideoFrame();
if (*frame)
@@ -144,5 +197,14 @@ void MediaStreamVideoTrackResource::ReleaseFrames() {
}
}
+void MediaStreamVideoTrackResource::OnPluginMsgConfigureReply(
+ const ResourceMessageReplyParams& params) {
+ if (TrackedCallback::IsPending(configure_callback_)) {
+ scoped_refptr<TrackedCallback> callback;
+ callback.swap(configure_callback_);
+ callback->Run(params.result());
+ }
+}
+
} // namespace proxy
} // namespace ppapi

Powered by Google App Engine
This is Rietveld 408576698