1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef SRC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_HELPERS_VIE_FILE_CAPTURE_DEVICE_H_ 12 #define SRC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_HELPERS_VIE_FILE_CAPTURE_DEVICE_H_ 13 14 #include <stdio.h> 15 16 #include <string> 17 18 #include "webrtc/typedefs.h" 19 20 namespace webrtc { 21 class CriticalSectionWrapper; 22 class EventWrapper; 23 class ViEExternalCapture; 24 } 25 26 // This class opens a i420 file and feeds it into a ExternalCapture instance, 27 // thereby acting as a faked capture device with deterministic input. 28 class ViEFileCaptureDevice { 29 public: 30 // The input sink is where to send the I420 video frames. 31 explicit ViEFileCaptureDevice(webrtc::ViEExternalCapture* input_sink); 32 virtual ~ViEFileCaptureDevice(); 33 34 // Opens the provided I420 file and interprets it according to the provided 35 // width and height. Returns false if the file doesn't exist. 36 bool OpenI420File(const std::string& path, int width, int height); 37 38 // Reads the previously opened file for at most time_slice_ms milliseconds, 39 // after which it will return. It will make sure to sleep accordingly so we 40 // do not send more than max_fps cap (we may send less, though). 41 void ReadFileFor(uint64_t time_slice_ms, uint32_t max_fps); 42 43 // Closes the opened input file. 44 void CloseFile(); 45 46 private: 47 webrtc::ViEExternalCapture* input_sink_; 48 49 FILE* input_file_; 50 webrtc::CriticalSectionWrapper* mutex_; 51 52 uint32_t frame_length_; 53 uint32_t width_; 54 uint32_t height_; 55 }; 56 57 #endif // SRC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_HELPERS_VIE_FILE_CAPTURE_DEVICE_H_ 58