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

Side by Side Diff: ppapi/shared_impl/media_stream_frame_buffer.cc

Issue 128683003: [PPAPI] Implement media stream video track API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@video_track_impl_cl
Patch Set: Fix review issues Created 6 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ppapi/shared_impl/media_stream_frame_buffer.h"
6
7 #include "ppapi/c/pp_errors.h"
8
9 namespace ppapi {
10
11 MediaStreamFrameBuffer::Delegate::~Delegate() {}
12
13 void MediaStreamFrameBuffer::Delegate::OnNewFrameEnqueued() {
14 }
15
16 MediaStreamFrameBuffer::MediaStreamFrameBuffer(Delegate* delegate)
17 : delegate_(delegate),
18 frame_size_(0),
19 number_of_frames_(0) {
20 DCHECK(delegate_);
21 }
22
23 MediaStreamFrameBuffer::~MediaStreamFrameBuffer() {
24 }
25
26 bool MediaStreamFrameBuffer::SetFrames(
27 int32_t number_of_frames,
28 int32_t frame_size,
29 scoped_ptr<base::SharedMemory> shm,
30 bool enqueue_all_frames) {
31 DCHECK(shm);
32 DCHECK(!shm_);
33 DCHECK_GT(number_of_frames, 0);
34 DCHECK_GT(frame_size, static_cast<int32_t>(sizeof(MediaStreamFrame::Header)));
35 DCHECK_EQ(frame_size & 0x3, 0);
36
37 number_of_frames_ = number_of_frames;
38 frame_size_ = frame_size;
39
40 int32_t size = number_of_frames_ * frame_size;
41 shm_ = shm.Pass();
42 if (!shm_->Map(size))
43 return false;
44
45 uint8_t* p = reinterpret_cast<uint8_t*>(shm_->memory());
46 for (int32_t i = 0; i < number_of_frames; ++i) {
47 if (enqueue_all_frames)
48 frame_queue_.push_back(i);
49 frames_.push_back(reinterpret_cast<MediaStreamFrame*>(p));
50 p += frame_size_;
51 }
52 return true;
53 }
54
55 int32_t MediaStreamFrameBuffer::DequeueFrame() {
56 if (frame_queue_.empty())
57 return PP_ERROR_FAILED;
58 int32_t frame = frame_queue_.front();
59 frame_queue_.pop_front();
60 return frame;
61 }
62
63 void MediaStreamFrameBuffer::EnqueueFrame(int32_t index) {
64 DCHECK_GE(index, 0);
65 DCHECK_LT(index, number_of_frames_);
66 frame_queue_.push_back(index);
67 delegate_->OnNewFrameEnqueued();
68 }
69
70 MediaStreamFrame* MediaStreamFrameBuffer::GetFramePointer(
71 int32_t index) {
72 DCHECK_GE(index, 0);
73 DCHECK_LT(index, number_of_frames_);
74 return frames_[index];
75 }
76
77 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698