| Index: media/mf/file_reader_util.h
|
| ===================================================================
|
| --- media/mf/file_reader_util.h (revision 0)
|
| +++ media/mf/file_reader_util.h (revision 0)
|
| @@ -0,0 +1,69 @@
|
| +// Copyright (c) 2010 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.
|
| +//
|
| +// Borrowed from media/tools/omx_test/file_reader_util.h.
|
| +// Added some functionalities related to timestamps on packets and Media
|
| +// Foundation.
|
| +
|
| +#ifndef MEDIA_MF_FILE_READER_UTIL_H_
|
| +#define MEDIA_MF_FILE_READER_UTIL_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/scoped_handle.h"
|
| +#include "base/scoped_ptr.h"
|
| +
|
| +struct AVCodecContext;
|
| +struct AVFormatContext;
|
| +
|
| +namespace media {
|
| +
|
| +class BitstreamConverter;
|
| +
|
| +// A class to help reading and parsing input file for use in omx_test.
|
| +class FileReader {
|
| + public:
|
| + virtual ~FileReader() {}
|
| +
|
| + // Initialize FileReader object, returns true if successful.
|
| + virtual bool Initialize() = 0;
|
| +
|
| + // Read the file into |output|, and output the number of bytes read to
|
| + // |size|.
|
| + virtual void Read(uint8** output, int* size) = 0;
|
| +};
|
| +
|
| +class FFmpegFileReader : public FileReader {
|
| + public:
|
| + explicit FFmpegFileReader(const std::string& filename);
|
| + virtual ~FFmpegFileReader();
|
| + virtual bool Initialize();
|
| + virtual void Read(uint8** output, int* size);
|
| +
|
| + // Reads a video packet, converts it into Annex B stream, and allocates a
|
| + // buffer to |*output| and copies the contents into it. Timstamp and
|
| + // duration are given in 100-ns units.
|
| + void Read(uint8** output, int* size, int64* timestamp, int64* duration);
|
| + bool GetFrameRate(int* num, int* denom) const;
|
| + bool GetWidth(int* width) const;
|
| + bool GetHeight(int* height) const;
|
| + bool GetAspectRatio(int* num, int* denom) const;
|
| + int64 ConvertFFmpegTimeBaseTo100Ns(int64 time_base_unit) const;
|
| + bool end_of_stream() const { return end_of_stream_; }
|
| +
|
| + private:
|
| + std::string filename_;
|
| + AVFormatContext* format_context_;
|
| + AVCodecContext* codec_context_;
|
| + int target_stream_;
|
| + scoped_ptr<media::BitstreamConverter> converter_;
|
| + bool end_of_stream_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FFmpegFileReader);
|
| +};
|
| +
|
| +} // namespace media
|
| +
|
| +#endif // MEDIA_MF_FILE_READER_UTIL_H_
|
|
|