Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / ppapi / shared_impl / media_stream_buffer_manager.cc
1 // Copyright 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_buffer_manager.h"
6
7 #include "base/logging.h"
8 #include "ppapi/c/pp_errors.h"
9 #include "ppapi/shared_impl/media_stream_buffer.h"
10
11 namespace ppapi {
12
13 MediaStreamBufferManager::Delegate::~Delegate() {}
14
15 void MediaStreamBufferManager::Delegate::OnNewBufferEnqueued() {
16 }
17
18 MediaStreamBufferManager::MediaStreamBufferManager(Delegate* delegate)
19    : delegate_(delegate),
20      buffer_size_(0),
21      number_of_buffers_(0) {
22   DCHECK(delegate_);
23 }
24
25 MediaStreamBufferManager::~MediaStreamBufferManager() {
26 }
27
28 bool MediaStreamBufferManager::SetBuffers(
29     int32_t number_of_buffers,
30     int32_t buffer_size,
31     scoped_ptr<base::SharedMemory> shm,
32     bool enqueue_all_buffers) {
33   DCHECK(shm);
34   DCHECK(!shm_);
35   DCHECK_GT(number_of_buffers, 0);
36   DCHECK_GT(buffer_size,
37             static_cast<int32_t>(sizeof(MediaStreamBuffer::Header)));
38   DCHECK_EQ(buffer_size & 0x3, 0);
39
40   number_of_buffers_ = number_of_buffers;
41   buffer_size_ = buffer_size;
42
43   int32_t size = number_of_buffers_ * buffer_size;
44   shm_ = shm.Pass();
45   if (!shm_->Map(size))
46     return false;
47
48   uint8_t* p = reinterpret_cast<uint8_t*>(shm_->memory());
49   for (int32_t i = 0; i < number_of_buffers; ++i) {
50     if (enqueue_all_buffers)
51       buffer_queue_.push_back(i);
52     buffers_.push_back(reinterpret_cast<MediaStreamBuffer*>(p));
53     p += buffer_size_;
54   }
55   return true;
56 }
57
58 int32_t MediaStreamBufferManager::DequeueBuffer() {
59   if (buffer_queue_.empty())
60     return PP_ERROR_FAILED;
61   int32_t buffer = buffer_queue_.front();
62   buffer_queue_.pop_front();
63   return buffer;
64 }
65
66 void MediaStreamBufferManager::EnqueueBuffer(int32_t index) {
67   DCHECK_GE(index, 0);
68   DCHECK_LT(index, number_of_buffers_);
69   buffer_queue_.push_back(index);
70   delegate_->OnNewBufferEnqueued();
71 }
72
73 MediaStreamBuffer* MediaStreamBufferManager::GetBufferPointer(
74     int32_t index) {
75   DCHECK_GE(index, 0);
76   DCHECK_LT(index, number_of_buffers_);
77   return buffers_[index];
78 }
79
80 }  // namespace ppapi