|  | // Copyright 2016 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 SERVICES_MEDIA_FRAMEWORK_PARTS_READER_H_ | 
|  | #define SERVICES_MEDIA_FRAMEWORK_PARTS_READER_H_ | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | #include "services/media/framework/result.h" | 
|  | #include "url/gurl.h" | 
|  |  | 
|  | namespace mojo { | 
|  | namespace media { | 
|  |  | 
|  | // Abstract base class for objects that read raw data on behalf of demuxes. | 
|  | // This model is synchronous, because that's how ffmpeg works. | 
|  | class Reader { | 
|  | public: | 
|  | // Creates a Reader object for a given url. | 
|  | static Result Create(const GURL& gurl, std::shared_ptr<Reader>* reader_out); | 
|  |  | 
|  | virtual ~Reader() {} | 
|  |  | 
|  | // Initializes the reader. | 
|  | virtual Result Init(const GURL& gurl) = 0; | 
|  |  | 
|  | // Reads the given number of bytes into the buffer and returns the number of | 
|  | // bytes read. Returns -1 if the operation fails. | 
|  | virtual size_t Read(uint8_t* buffer, size_t bytes_to_read) = 0; | 
|  |  | 
|  | // Gets the current position or -1 if the operation fails. | 
|  | virtual int64_t GetPosition() const = 0; | 
|  |  | 
|  | // Seeks to the given position and returns it. Returns -1 if the operation | 
|  | // fails. | 
|  | virtual int64_t SetPosition(int64_t position) = 0; | 
|  |  | 
|  | // Returns the file size. Returns -1 if the operation fails or the size isn't | 
|  | // known. | 
|  | virtual size_t GetSize() const = 0; | 
|  |  | 
|  | // Returns true if this object supports seeking, false otherwise. | 
|  | virtual bool CanSeek() const = 0; | 
|  | }; | 
|  |  | 
|  | }  // namespace media | 
|  | }  // namespace mojo | 
|  |  | 
|  | #endif // MOJO_SERVICES_MEDIA_READER_H_ |