| Index: media/capture/video/file_video_capture_device.h
|
| diff --git a/media/capture/video/file_video_capture_device.h b/media/capture/video/file_video_capture_device.h
|
| index f50f04146d37094c6d3033412336858461961233..8672b50b8f672cd308439294d48b2606dd4a5f73 100644
|
| --- a/media/capture/video/file_video_capture_device.h
|
| +++ b/media/capture/video/file_video_capture_device.h
|
| @@ -8,6 +8,7 @@
|
| #include <string>
|
|
|
| #include "base/files/file.h"
|
| +#include "base/files/memory_mapped_file.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/threading/thread.h"
|
| #include "base/threading/thread_checker.h"
|
| @@ -17,21 +18,31 @@ namespace media {
|
|
|
| // Implementation of a VideoCaptureDevice class that reads from a file. Used for
|
| // testing the video capture pipeline when no real hardware is available. The
|
| -// only supported file format is YUV4MPEG2 (a.k.a. Y4M), a minimal container
|
| -// with a series of uncompressed video only frames, see the link
|
| -// http://wiki.multimedia.cx/index.php?title=YUV4MPEG2 for more information
|
| -// on the file format. Several restrictions and notes apply, see the
|
| +// supported file formats are YUV4MPEG2 (a.k.a. Y4M) and MJPEG/JPEG. YUV4MPEG2
|
| +// is a minimal container with a series of uncompressed video only frames, see
|
| +// the link http://wiki.multimedia.cx/index.php?title=YUV4MPEG2 for more
|
| +// information on the file format. Several restrictions and notes apply, see the
|
| // implementation file.
|
| -// Example videos can be found in http://media.xiph.org/video/derf.
|
| +// Example Y4M videos can be found in http://media.xiph.org/video/derf.
|
| class MEDIA_EXPORT FileVideoCaptureDevice : public VideoCaptureDevice {
|
| public:
|
| - static int64 ParseFileAndExtractVideoFormat(
|
| - base::File* file,
|
| - media::VideoCaptureFormat* video_format);
|
| - static base::File OpenFileForRead(const base::FilePath& file_path);
|
| + // Reads and parses the header of a |mapped_file|, returning the collected
|
| + // pixel format in |video_format| and storing current frame size in
|
| + // |frame_size|. Returns the index of the first byte of the first video
|
| + // frame. If parsing |mapped_file| failed, returns -1.
|
| + // Restrictions: Only trivial Y4M per-frame headers and MJPEG are supported.
|
| + static size_t ParseFileAndExtractVideoFormat(
|
| + const base::MemoryMappedFile* mapped_file,
|
| + media::VideoCaptureFormat* video_format,
|
| + int* frame_size);
|
| +
|
| + // Opens a given file for reading, and returns the memory mapped file to the
|
| + // caller, who is responsible for closing it.
|
| + static scoped_ptr<base::MemoryMappedFile>
|
| + OpenFileForRead(const base::FilePath& file_path);
|
|
|
| // Constructor of the class, with a fully qualified file path as input, which
|
| - // represents the Y4M video file to stream repeatedly.
|
| + // represents the Y4M/MJPEG file to stream repeatedly.
|
| explicit FileVideoCaptureDevice(const base::FilePath& file_path);
|
|
|
| // VideoCaptureDevice implementation, class methods.
|
| @@ -41,14 +52,11 @@ class MEDIA_EXPORT FileVideoCaptureDevice : public VideoCaptureDevice {
|
| void StopAndDeAllocate() override;
|
|
|
| private:
|
| - // Returns size in bytes of an I420 frame, not including possible paddings,
|
| - // defined by |capture_format_|.
|
| - int CalculateFrameSize() const;
|
| -
|
| // Called on the |capture_thread_|.
|
| void OnAllocateAndStart(const VideoCaptureParams& params,
|
| scoped_ptr<Client> client);
|
| void OnStopAndDeAllocate();
|
| + const uint8_t* GetNextFrame();
|
| void OnCaptureTask();
|
|
|
| // |thread_checker_| is used to check that destructor, AllocateAndStart() and
|
| @@ -61,12 +69,11 @@ class MEDIA_EXPORT FileVideoCaptureDevice : public VideoCaptureDevice {
|
| // The following members belong to |capture_thread_|.
|
| scoped_ptr<VideoCaptureDevice::Client> client_;
|
| const base::FilePath file_path_;
|
| - base::File file_;
|
| - scoped_ptr<uint8[]> video_frame_;
|
| + scoped_ptr<base::MemoryMappedFile> mapped_file_;
|
| VideoCaptureFormat capture_format_;
|
| int frame_size_;
|
| - int64 current_byte_index_;
|
| - int64 first_frame_byte_index_;
|
| + size_t current_byte_index_;
|
| + size_t first_frame_byte_index_;
|
| // Target time for the next frame.
|
| base::TimeTicks next_frame_time_;
|
|
|
|
|