OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 #ifndef TALK_MEDIA_BASE_FAKEVIDEOCAPTURER_H_ | 28 #ifndef TALK_MEDIA_BASE_FAKEVIDEOCAPTURER_H_ |
29 #define TALK_MEDIA_BASE_FAKEVIDEOCAPTURER_H_ | 29 #define TALK_MEDIA_BASE_FAKEVIDEOCAPTURER_H_ |
30 | 30 |
31 #include <string.h> | 31 #include <string.h> |
32 | 32 |
33 #include <vector> | 33 #include <vector> |
34 | 34 |
35 #include "talk/media/base/videocapturer.h" | 35 #include "talk/media/base/videocapturer.h" |
36 #include "talk/media/base/videocommon.h" | 36 #include "talk/media/base/videocommon.h" |
37 #include "talk/media/base/videoframe.h" | 37 #include "talk/media/webrtc/webrtcvideoframe.h" |
38 #include "webrtc/base/timeutils.h" | 38 #include "webrtc/base/timeutils.h" |
39 #ifdef HAVE_WEBRTC_VIDEO | 39 #ifdef HAVE_WEBRTC_VIDEO |
40 #include "talk/media/webrtc/webrtcvideoframefactory.h" | 40 #include "talk/media/webrtc/webrtcvideoframefactory.h" |
41 #endif | 41 #endif |
42 | 42 |
43 namespace cricket { | 43 namespace cricket { |
44 | 44 |
45 // Fake video capturer that allows the test to manually pump in frames. | 45 // Fake video capturer that allows the test to manually pump in frames. |
46 class FakeVideoCapturer : public cricket::VideoCapturer { | 46 class FakeVideoCapturer : public cricket::VideoCapturer { |
47 public: | 47 public: |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 memset(reinterpret_cast<uint8_t*>(frame.data) + (size / 2), 2, | 125 memset(reinterpret_cast<uint8_t*>(frame.data) + (size / 2), 2, |
126 size - (size / 2)); | 126 size - (size / 2)); |
127 memcpy(frame.data, reinterpret_cast<const uint8_t*>(&fourcc), 4); | 127 memcpy(frame.data, reinterpret_cast<const uint8_t*>(&fourcc), 4); |
128 frame.rotation = rotation_; | 128 frame.rotation = rotation_; |
129 // TODO(zhurunz): SignalFrameCaptured carry returned value to be able to | 129 // TODO(zhurunz): SignalFrameCaptured carry returned value to be able to |
130 // capture results from downstream. | 130 // capture results from downstream. |
131 SignalFrameCaptured(this, &frame); | 131 SignalFrameCaptured(this, &frame); |
132 return true; | 132 return true; |
133 } | 133 } |
134 | 134 |
| 135 void SetTime(int64_t t) { |
| 136 next_timestamp_ = t; |
| 137 } |
| 138 // Helper function to generate a new frame and send it directly to |
| 139 // |sink|, without using cricket::CapturedFrame SignalFrameCaptured. |
| 140 void SendFrame(rtc::VideoSinkInterface<cricket::VideoFrame>* sink) { |
| 141 int width = GetCaptureFormat()->width; |
| 142 int height = GetCaptureFormat()->height; |
| 143 |
| 144 rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer = |
| 145 new rtc::RefCountedObject<webrtc::I420Buffer>(width, height); |
| 146 |
| 147 memset(buffer->MutableData(webrtc::kYPlane), 1, width * height); |
| 148 memset(buffer->MutableData(webrtc::kUPlane), 2, |
| 149 (height+1)/2 * buffer->stride(webrtc::kUPlane)); |
| 150 memset(buffer->MutableData(webrtc::kVPlane), 3, |
| 151 (height+1)/2 * buffer->stride(webrtc::kVPlane)); |
| 152 |
| 153 sink->OnFrame(WebRtcVideoFrame(buffer, |
| 154 initial_unix_timestamp_ + next_timestamp_, |
| 155 rotation_)); |
| 156 |
| 157 next_timestamp_ += GetCaptureFormat()->interval; |
| 158 } |
| 159 |
135 void SignalCapturedFrame(cricket::CapturedFrame* frame) { | 160 void SignalCapturedFrame(cricket::CapturedFrame* frame) { |
136 SignalFrameCaptured(this, frame); | 161 SignalFrameCaptured(this, frame); |
137 } | 162 } |
138 | 163 |
139 sigslot::signal1<FakeVideoCapturer*> SignalDestroyed; | 164 sigslot::signal1<FakeVideoCapturer*> SignalDestroyed; |
140 | 165 |
141 virtual cricket::CaptureState Start(const cricket::VideoFormat& format) { | 166 virtual cricket::CaptureState Start(const cricket::VideoFormat& format) { |
142 cricket::VideoFormat supported; | 167 cricket::VideoFormat supported; |
143 if (GetBestCaptureFormat(format, &supported)) { | 168 if (GetBestCaptureFormat(format, &supported)) { |
144 SetCaptureFormat(&supported); | 169 SetCaptureFormat(&supported); |
(...skipping 28 matching lines...) Expand all Loading... |
173 bool running_; | 198 bool running_; |
174 int64_t initial_unix_timestamp_; | 199 int64_t initial_unix_timestamp_; |
175 int64_t next_timestamp_; | 200 int64_t next_timestamp_; |
176 bool is_screencast_; | 201 bool is_screencast_; |
177 webrtc::VideoRotation rotation_; | 202 webrtc::VideoRotation rotation_; |
178 }; | 203 }; |
179 | 204 |
180 } // namespace cricket | 205 } // namespace cricket |
181 | 206 |
182 #endif // TALK_MEDIA_BASE_FAKEVIDEOCAPTURER_H_ | 207 #endif // TALK_MEDIA_BASE_FAKEVIDEOCAPTURER_H_ |
OLD | NEW |