// Copyright (c) 2011 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 MEDIA_FILTERS_IN_MEMORY_URL_PROTOCOL_H_
#define MEDIA_FILTERS_IN_MEMORY_URL_PROTOCOL_H_

#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "media/filters/ffmpeg_glue.h"

namespace media {

// Simple FFmpegURLProtocol that reads from a buffer.
// NOTE: This object does not copy the buffer so the
//       buffer pointer passed into the constructor
//       needs to remain valid for the entire lifetime of
//       this object.
class MEDIA_EXPORT InMemoryUrlProtocol : public FFmpegURLProtocol {
 public:
  InMemoryUrlProtocol(const uint8* buf, int64 size, bool streaming);
  virtual ~InMemoryUrlProtocol();

  // FFmpegURLProtocol methods.
  virtual int Read(int size, uint8* data) OVERRIDE;
  virtual bool GetPosition(int64* position_out) OVERRIDE;
  virtual bool SetPosition(int64 position) OVERRIDE;
  virtual bool GetSize(int64* size_out) OVERRIDE;
  virtual bool IsStreaming() OVERRIDE;

 private:
  const uint8* data_;
  int64 size_;
  int64 position_;
  bool streaming_;

  DISALLOW_IMPLICIT_CONSTRUCTORS(InMemoryUrlProtocol);
};

}  // namespace media

#endif  // MEDIA_FILTERS_IN_MEMORY_URL_PROTOCOL_H_
