Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / libjingle / source / talk / media / devices / yuvframescapturer.h
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
13 namespace rtc {
14 class FileStream;
15 }
16
17 namespace cricket {
18
19
20 // Simulated video capturer that periodically reads frames from a file.
21 class 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_