// Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
// Use of this source code is governed by a BSD-style license that can be
|
// found in the LICENSE file.
|
// Note: ported from Chromium commit head: 60f9667
|
|
#include "base/sys_info.h"
|
#include "shared_memory_region.h"
|
|
namespace media {
|
|
SharedMemoryRegion::SharedMemoryRegion(const base::SharedMemoryHandle& handle,
|
off_t offset,
|
size_t size,
|
bool read_only)
|
: shm_(handle, read_only),
|
offset_(offset),
|
size_(size),
|
alignment_size_(offset % base::SysInfo::VMAllocationGranularity()) {
|
DCHECK_GE(offset_, 0) << "Invalid offset: " << offset_;
|
}
|
|
SharedMemoryRegion::SharedMemoryRegion(const BitstreamBuffer& bitstream_buffer,
|
bool read_only)
|
: SharedMemoryRegion(bitstream_buffer.handle(),
|
bitstream_buffer.offset(),
|
bitstream_buffer.size(),
|
read_only) {}
|
|
bool SharedMemoryRegion::Map() {
|
if (offset_ < 0) {
|
DVLOG(1) << "Invalid offset: " << offset_;
|
return false;
|
}
|
return shm_.MapAt(offset_ - alignment_size_, size_ + alignment_size_);
|
}
|
|
void* SharedMemoryRegion::memory() {
|
int8_t* addr = reinterpret_cast<int8_t*>(shm_.memory());
|
return addr ? addr + alignment_size_ : nullptr;
|
}
|
|
} // namespace media
|