// 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