memory_data_source.cc 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright 2016 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. #include "media/filters/memory_data_source.h"
  5. #include <algorithm>
  6. #include "base/callback.h"
  7. #include "base/check.h"
  8. namespace media {
  9. MemoryDataSource::MemoryDataSource(std::string data)
  10. : data_string_(std::move(data)),
  11. data_(reinterpret_cast<const uint8_t*>(data_string_.data())),
  12. size_(data_string_.size()) {}
  13. MemoryDataSource::MemoryDataSource(const uint8_t* data, size_t size)
  14. : data_(data), size_(size) {}
  15. MemoryDataSource::~MemoryDataSource() = default;
  16. void MemoryDataSource::Read(int64_t position,
  17. int size,
  18. uint8_t* data,
  19. DataSource::ReadCB read_cb) {
  20. DCHECK(read_cb);
  21. if (is_stopped_ || size < 0 || position < 0 ||
  22. static_cast<size_t>(position) > size_) {
  23. std::move(read_cb).Run(kReadError);
  24. return;
  25. }
  26. // Cap size within bounds.
  27. size_t clamped_size = std::min(static_cast<size_t>(size),
  28. size_ - static_cast<size_t>(position));
  29. if (clamped_size > 0) {
  30. DCHECK(data);
  31. memcpy(data, data_ + position, clamped_size);
  32. }
  33. std::move(read_cb).Run(clamped_size);
  34. }
  35. void MemoryDataSource::Stop() {
  36. is_stopped_ = true;
  37. }
  38. void MemoryDataSource::Abort() {}
  39. bool MemoryDataSource::GetSize(int64_t* size_out) {
  40. *size_out = size_;
  41. return true;
  42. }
  43. bool MemoryDataSource::IsStreaming() {
  44. return false;
  45. }
  46. void MemoryDataSource::SetBitrate(int bitrate) {}
  47. } // namespace media