Home | History | Annotate | Download | only in vda
      1 // Copyright (c) 2015 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 // Note: ported from Chromium commit head: 60f9667
      5 
      6 #include "base/sys_info.h"
      7 #include "shared_memory_region.h"
      8 
      9 namespace media {
     10 
     11 SharedMemoryRegion::SharedMemoryRegion(const base::SharedMemoryHandle& handle,
     12                                        off_t offset,
     13                                        size_t size,
     14                                        bool read_only)
     15     : shm_(handle, read_only),
     16       offset_(offset),
     17       size_(size),
     18       alignment_size_(offset % base::SysInfo::VMAllocationGranularity()) {
     19   DCHECK_GE(offset_, 0) << "Invalid offset: " << offset_;
     20 }
     21 
     22 SharedMemoryRegion::SharedMemoryRegion(const BitstreamBuffer& bitstream_buffer,
     23                                        bool read_only)
     24     : SharedMemoryRegion(bitstream_buffer.handle(),
     25                          bitstream_buffer.offset(),
     26                          bitstream_buffer.size(),
     27                          read_only) {}
     28 
     29 bool SharedMemoryRegion::Map() {
     30   if (offset_ < 0) {
     31     DVLOG(1) << "Invalid offset: " << offset_;
     32     return false;
     33   }
     34   return shm_.MapAt(offset_ - alignment_size_, size_ + alignment_size_);
     35 }
     36 
     37 void* SharedMemoryRegion::memory() {
     38   int8_t* addr = reinterpret_cast<int8_t*>(shm_.memory());
     39   return addr ? addr + alignment_size_ : nullptr;
     40 }
     41 
     42 }  // namespace media
     43