1a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
2a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian//
3a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// Use of this source code is governed by a BSD-style license
4a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// that can be found in the LICENSE file in the root of the source
5a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// tree. An additional intellectual property rights grant can be found
6a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// in the file PATENTS.  All contributing project authors may
7a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// be found in the AUTHORS file in the root of the source tree.
8a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
9a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#ifndef MKVREADER_HPP
10a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#define MKVREADER_HPP
11a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
12a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#include "mkvparser.hpp"
13a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#include <cstdio>
14a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
15a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramaniannamespace mkvparser
16a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{
17a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
18a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass MkvReader : public IMkvReader
19a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{
20a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    MkvReader(const MkvReader&);
21a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    MkvReader& operator=(const MkvReader&);
22a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic:
23a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    MkvReader();
246ac915abcdb404a00d927fe6308a47fcf09d9519hkuang    MkvReader(FILE* fp);
25a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    virtual ~MkvReader();
26a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
27a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    int Open(const char*);
28a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    void Close();
29a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
30a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    virtual int Read(long long position, long length, unsigned char* buffer);
31a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    virtual int Length(long long* total, long long* available);
32a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate:
336ac915abcdb404a00d927fe6308a47fcf09d9519hkuang
346ac915abcdb404a00d927fe6308a47fcf09d9519hkuang    // Determines the size of the file. This is called either by the constructor
356ac915abcdb404a00d927fe6308a47fcf09d9519hkuang    // or by the Open function depending on file ownership. Returns true on
366ac915abcdb404a00d927fe6308a47fcf09d9519hkuang    // success.
376ac915abcdb404a00d927fe6308a47fcf09d9519hkuang    bool GetFileSize();
386ac915abcdb404a00d927fe6308a47fcf09d9519hkuang
39a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    long long m_length;
40a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian    FILE* m_file;
416ac915abcdb404a00d927fe6308a47fcf09d9519hkuang    bool reader_owns_file_;
42a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian};
43a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
44a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}  //end namespace mkvparser
45a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian
46a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#endif //MKVREADER_HPP
47