1#ifndef TALK_MEDIA_DEVICES_YUVFRAMESCAPTURER_H_ 2#define TALK_MEDIA_DEVICES_YUVFRAMESCAPTURER_H_ 3 4#include <string> 5#include <vector> 6 7#include "talk/media/base/videocapturer.h" 8#include "talk/media/base/yuvframegenerator.h" 9#include "webrtc/base/stream.h" 10#include "webrtc/base/stringutils.h" 11 12 13namespace rtc { 14class FileStream; 15} 16 17namespace cricket { 18 19 20// Simulated video capturer that periodically reads frames from a file. 21class YuvFramesCapturer : public VideoCapturer { 22 public: 23 YuvFramesCapturer(); 24 YuvFramesCapturer(int width, int height); 25 virtual ~YuvFramesCapturer(); 26 27 static const char* kYuvFrameDeviceName; 28 static Device CreateYuvFramesCapturerDevice() { 29 std::stringstream id; 30 id << kYuvFrameDeviceName; 31 return Device(id.str(), id.str()); 32 } 33 static bool IsYuvFramesCapturerDevice(const Device& device) { 34 return rtc::starts_with(device.id.c_str(), kYuvFrameDeviceName); 35 } 36 37 void Init(); 38 // Override virtual methods of parent class VideoCapturer. 39 virtual CaptureState Start(const VideoFormat& capture_format); 40 virtual void Stop(); 41 virtual bool IsRunning(); 42 virtual bool IsScreencast() const { return false; } 43 44 protected: 45 // Override virtual methods of parent class VideoCapturer. 46 virtual bool GetPreferredFourccs(std::vector<uint32>* fourccs); 47 48 // Read a frame and determine how long to wait for the next frame. 49 void ReadFrame(bool first_frame); 50 51 private: 52 class YuvFramesThread; // Forward declaration, defined in .cc. 53 54 YuvFrameGenerator* frame_generator_; 55 CapturedFrame captured_frame_; 56 YuvFramesThread* frames_generator_thread; 57 int width_; 58 int height_; 59 uint32 frame_data_size_; 60 uint32 frame_index_; 61 62 int64 barcode_reference_timestamp_millis_; 63 int32 barcode_interval_; 64 int32 GetBarcodeValue(); 65 66 DISALLOW_COPY_AND_ASSIGN(YuvFramesCapturer); 67}; 68 69} // namespace cricket 70 71#endif // TALK_MEDIA_DEVICES_YUVFRAMESCAPTURER_H_ 72