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

#ifndef MOJO_SERVICES_MEDIA_COMMON_CPP_MAPPED_SHARED_BUFFER_H_
#define MOJO_SERVICES_MEDIA_COMMON_CPP_MAPPED_SHARED_BUFFER_H_

#include <memory>

#include "mojo/public/cpp/system/buffer.h"
#include "mojo/services/media/common/cpp/fifo_allocator.h"

namespace mojo {
namespace media {

// MappedSharedBuffer simplifies the use of shared buffers by taking care of
// mapping/unmapping and by providing offset/pointer translation. It can be
// used when the caller wants to allocate its own buffer (InitNew) and when
// the caller needs to use a buffer supplied by another party (InitFromHandle).
// It can be used by itself when regions of the buffer are allocated by another
// party. If the caller needs to allocate regions, SharedMediaBufferAllocator,
// which is derived from MappedSharedBuffer, provides allocation semantics
// using FifoAllocator.
class MappedSharedBuffer {
 public:
  MappedSharedBuffer();

  virtual ~MappedSharedBuffer();

  // Initializes by creating a new shared buffer of the indicated size.
  void InitNew(uint64_t size);

  // Initializes from a handle to an existing shared buffer.
  void InitFromHandle(ScopedSharedBufferHandle handle, uint64_t size);

  // Indicates whether the buffer is initialized.
  bool initialized() const;

  // Gets the size of the buffer.
  uint64_t size() const;

  // Gets a duplicate handle for the shared buffer.
  ScopedSharedBufferHandle GetDuplicateHandle() const;

  // Translates an offset into a pointer.
  void* PtrFromOffset(uint64_t offset) const;

  // Translates a pointer into an offset.
  uint64_t OffsetFromPtr(void *payload_ptr) const;

 protected:
  void InitInternal(ScopedSharedBufferHandle& handle, uint64_t size);

  // Does nothing. Called when initialization is complete. Subclasses may
  // override.
  virtual void OnInit();

 private:
  struct MappedBufferDeleter {
    inline void operator()(uint8_t* ptr) const {
      UnmapBuffer(ptr);
    }
  };

  // Size of the shared buffer.
  uint64_t size_;

  // Shared buffer when initialized with InitNew.
  std::unique_ptr<SharedBuffer> buffer_;

  // Handle to shared buffer when initialized with InitFromHandle.
  ScopedSharedBufferHandle handle_;

  // Pointer to the mapped buffer.
  std::unique_ptr<uint8_t, MappedBufferDeleter> buffer_ptr_;
};

}  // namespace media
}  // namespace mojo

#endif // MOJO_SERVICES_MEDIA_COMMON_CPP_MAPPED_SHARED_BUFFER_H_
