1// Copyright (c) 2012 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 "media/base/data_buffer.h"
6
7#include "base/logging.h"
8
9namespace media {
10
11DataBuffer::DataBuffer(int buffer_size)
12    : buffer_size_(buffer_size),
13      data_size_(0) {
14  CHECK_GE(buffer_size, 0);
15  data_.reset(new uint8[buffer_size_]);
16}
17
18DataBuffer::DataBuffer(scoped_ptr<uint8[]> buffer, int buffer_size)
19    : data_(buffer.Pass()),
20      buffer_size_(buffer_size),
21      data_size_(buffer_size) {
22  CHECK(data_.get());
23  CHECK_GE(buffer_size, 0);
24}
25
26DataBuffer::DataBuffer(const uint8* data, int data_size)
27    : buffer_size_(data_size),
28      data_size_(data_size) {
29  if (!data) {
30    CHECK_EQ(data_size, 0);
31    return;
32  }
33
34  CHECK_GE(data_size, 0);
35  data_.reset(new uint8[buffer_size_]);
36  memcpy(data_.get(), data, data_size_);
37}
38
39DataBuffer::~DataBuffer() {}
40
41// static
42scoped_refptr<DataBuffer> DataBuffer::CopyFrom(const uint8* data, int size) {
43  // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
44  CHECK(data);
45  return make_scoped_refptr(new DataBuffer(data, size));
46}
47
48// static
49scoped_refptr<DataBuffer> DataBuffer::CreateEOSBuffer() {
50  return make_scoped_refptr(new DataBuffer(NULL, 0));
51}
52}  // namespace media
53