1c55a96383497a772a307b346368133960b02ad03Eric Laurent/* 2c55a96383497a772a307b346368133960b02ad03Eric Laurent * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3c55a96383497a772a307b346368133960b02ad03Eric Laurent * 4c55a96383497a772a307b346368133960b02ad03Eric Laurent * Use of this source code is governed by a BSD-style license 5c55a96383497a772a307b346368133960b02ad03Eric Laurent * that can be found in the LICENSE file in the root of the source 6c55a96383497a772a307b346368133960b02ad03Eric Laurent * tree. An additional intellectual property rights grant can be found 7c55a96383497a772a307b346368133960b02ad03Eric Laurent * in the file PATENTS. All contributing project authors may 8c55a96383497a772a307b346368133960b02ad03Eric Laurent * be found in the AUTHORS file in the root of the source tree. 9c55a96383497a772a307b346368133960b02ad03Eric Laurent */ 10c55a96383497a772a307b346368133960b02ad03Eric Laurent 11c55a96383497a772a307b346368133960b02ad03Eric Laurent#ifndef WEBRTC_TEST_TESTSUPPORT_FRAME_READER_H_ 12c55a96383497a772a307b346368133960b02ad03Eric Laurent#define WEBRTC_TEST_TESTSUPPORT_FRAME_READER_H_ 13c55a96383497a772a307b346368133960b02ad03Eric Laurent 14c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <cstdio> 15c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <string> 16c55a96383497a772a307b346368133960b02ad03Eric Laurent 17c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "typedefs.h" 18c55a96383497a772a307b346368133960b02ad03Eric Laurent 19c55a96383497a772a307b346368133960b02ad03Eric Laurentnamespace webrtc { 20c55a96383497a772a307b346368133960b02ad03Eric Laurentnamespace test { 21c55a96383497a772a307b346368133960b02ad03Eric Laurent 22c55a96383497a772a307b346368133960b02ad03Eric Laurent// Handles reading of frames from video files. 23c55a96383497a772a307b346368133960b02ad03Eric Laurentclass FrameReader { 24c55a96383497a772a307b346368133960b02ad03Eric Laurent public: 25c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual ~FrameReader() {} 26c55a96383497a772a307b346368133960b02ad03Eric Laurent 27c55a96383497a772a307b346368133960b02ad03Eric Laurent // Initializes the frame reader, i.e. opens the input file. 28c55a96383497a772a307b346368133960b02ad03Eric Laurent // This must be called before reading of frames has started. 29c55a96383497a772a307b346368133960b02ad03Eric Laurent // Returns false if an error has occurred, in addition to printing to stderr. 30c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual bool Init() = 0; 31c55a96383497a772a307b346368133960b02ad03Eric Laurent 32c55a96383497a772a307b346368133960b02ad03Eric Laurent // Reads a frame into the supplied buffer, which must contain enough space 33c55a96383497a772a307b346368133960b02ad03Eric Laurent // for the frame size. 34c55a96383497a772a307b346368133960b02ad03Eric Laurent // Returns true if there are more frames to read, false if we've already 35c55a96383497a772a307b346368133960b02ad03Eric Laurent // read the last frame (in the previous call). 36c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual bool ReadFrame(WebRtc_UWord8* source_buffer) = 0; 37c55a96383497a772a307b346368133960b02ad03Eric Laurent 38c55a96383497a772a307b346368133960b02ad03Eric Laurent // Closes the input file if open. Essentially makes this class impossible 39c55a96383497a772a307b346368133960b02ad03Eric Laurent // to use anymore. Will also be invoked by the destructor. 40c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual void Close() = 0; 41c55a96383497a772a307b346368133960b02ad03Eric Laurent 42c55a96383497a772a307b346368133960b02ad03Eric Laurent // Frame length in bytes of a single frame image. 43c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual int FrameLength() = 0; 44c55a96383497a772a307b346368133960b02ad03Eric Laurent // Total number of frames in the input video source. 45c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual int NumberOfFrames() = 0; 46c55a96383497a772a307b346368133960b02ad03Eric Laurent}; 47c55a96383497a772a307b346368133960b02ad03Eric Laurent 48c55a96383497a772a307b346368133960b02ad03Eric Laurentclass FrameReaderImpl : public FrameReader { 49c55a96383497a772a307b346368133960b02ad03Eric Laurent public: 50c55a96383497a772a307b346368133960b02ad03Eric Laurent // Creates a file handler. The input file is assumed to exist and be readable. 51c55a96383497a772a307b346368133960b02ad03Eric Laurent // Parameters: 52c55a96383497a772a307b346368133960b02ad03Eric Laurent // input_filename The file to read from. 53c55a96383497a772a307b346368133960b02ad03Eric Laurent // frame_length_in_bytes The size of each frame. 54c55a96383497a772a307b346368133960b02ad03Eric Laurent // For YUV this is 3 * width * height / 2 55c55a96383497a772a307b346368133960b02ad03Eric Laurent FrameReaderImpl(std::string input_filename, int frame_length_in_bytes); 56c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual ~FrameReaderImpl(); 57c55a96383497a772a307b346368133960b02ad03Eric Laurent bool Init(); 58c55a96383497a772a307b346368133960b02ad03Eric Laurent bool ReadFrame(WebRtc_UWord8* source_buffer); 59c55a96383497a772a307b346368133960b02ad03Eric Laurent void Close(); 60c55a96383497a772a307b346368133960b02ad03Eric Laurent int FrameLength() { return frame_length_in_bytes_; } 61c55a96383497a772a307b346368133960b02ad03Eric Laurent int NumberOfFrames() { return number_of_frames_; } 62c55a96383497a772a307b346368133960b02ad03Eric Laurent 63c55a96383497a772a307b346368133960b02ad03Eric Laurent private: 64c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string input_filename_; 65c55a96383497a772a307b346368133960b02ad03Eric Laurent int frame_length_in_bytes_; 66c55a96383497a772a307b346368133960b02ad03Eric Laurent int number_of_frames_; 67c55a96383497a772a307b346368133960b02ad03Eric Laurent FILE* input_file_; 68c55a96383497a772a307b346368133960b02ad03Eric Laurent}; 69c55a96383497a772a307b346368133960b02ad03Eric Laurent 70c55a96383497a772a307b346368133960b02ad03Eric Laurent} // namespace test 71c55a96383497a772a307b346368133960b02ad03Eric Laurent} // namespace webrtc 72c55a96383497a772a307b346368133960b02ad03Eric Laurent 73c55a96383497a772a307b346368133960b02ad03Eric Laurent#endif // WEBRTC_TEST_TESTSUPPORT_FRAME_READER_H_ 74