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