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 e8ab4c577251a44e0e3c54dbede7f2eb2dbe83b3..4a219dd25b97a2330cbf2f6c6fe34fb621a0ac76 100644 |
--- a/ppapi/proxy/media_stream_video_track_resource.cc |
+++ b/ppapi/proxy/media_stream_video_track_resource.cc |
@@ -64,7 +64,7 @@ int32_t MediaStreamVideoTrackResource::GetFrame( |
if (TrackedCallback::IsPending(get_frame_callback_)) |
return PP_ERROR_INPROGRESS; |
- *frame = GetVideoFrame(); |
+ *frame = GetVideoFrame(-1); |
if (*frame) |
return PP_OK; |
@@ -106,21 +106,26 @@ void MediaStreamVideoTrackResource::Close() { |
MediaStreamTrackResourceBase::CloseInternal(); |
} |
-void MediaStreamVideoTrackResource::OnNewFrameEnqueued() { |
- if (TrackedCallback::IsPending(get_frame_callback_)) { |
- *get_frame_output_ = GetVideoFrame(); |
- get_frame_output_ = NULL; |
- scoped_refptr<TrackedCallback> callback; |
- callback.swap(get_frame_callback_); |
- callback->Run(PP_OK); |
- } |
+bool MediaStreamVideoTrackResource::OnNewFramePreEnqueued(int32_t index) { |
+ if (!TrackedCallback::IsPending(get_frame_callback_)) |
+ return false; |
+ |
+ *get_frame_output_ = GetVideoFrame(index); |
+ get_frame_output_ = NULL; |
+ scoped_refptr<TrackedCallback> callback; |
+ callback.swap(get_frame_callback_); |
+ callback->Run(PP_OK); |
+ return true; |
} |
-PP_Resource MediaStreamVideoTrackResource::GetVideoFrame() { |
- int32_t index = frame_buffer()->DequeueFrame(); |
- if (index < 0) |
- return 0; |
+PP_Resource MediaStreamVideoTrackResource::GetVideoFrame(int32_t index) { |
+ if (index < 0) { |
+ index = frame_buffer()->DequeueFrame(); |
+ if (index < 0) |
+ return 0; |
+ } |
MediaStreamFrame* frame = frame_buffer()->GetFramePointer(index); |
+ DCHECK(frame); |
scoped_refptr<VideoFrameResource> resource = |
new VideoFrameResource(pp_instance(), index, frame); |
// Add |pp_resource()| and |resource| into |frames_|. |