Move ChromaGenerator to common_video/.

BUG=
R=stefan@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2394004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4964 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
pbos@webrtc.org 2013-10-15 09:15:47 +00:00
parent c2e471d8b3
commit 266c7b330a
3 changed files with 36 additions and 34 deletions

View File

@ -9,7 +9,9 @@
*/ */
#include "webrtc/common_video/test/frame_generator.h" #include "webrtc/common_video/test/frame_generator.h"
#include <math.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
@ -17,6 +19,34 @@ namespace webrtc {
namespace test { namespace test {
namespace { namespace {
class ChromaGenerator : public FrameGenerator {
public:
ChromaGenerator(size_t width, size_t height) : angle_(0.0) {
assert(width > 0);
assert(height > 0);
frame_.CreateEmptyFrame(static_cast<int>(width),
static_cast<int>(height),
static_cast<int>(width),
static_cast<int>((width + 1) / 2),
static_cast<int>((width + 1) / 2));
memset(frame_.buffer(kYPlane), 0x80, frame_.allocated_size(kYPlane));
}
virtual I420VideoFrame& NextFrame() OVERRIDE {
angle_ += 30.0;
uint8_t u = fabs(sin(angle_)) * 0xFF;
uint8_t v = fabs(cos(angle_)) * 0xFF;
memset(frame_.buffer(kUPlane), u, frame_.allocated_size(kUPlane));
memset(frame_.buffer(kVPlane), v, frame_.allocated_size(kVPlane));
return frame_;
}
private:
double angle_;
I420VideoFrame frame_;
};
class YuvFileGenerator : public FrameGenerator { class YuvFileGenerator : public FrameGenerator {
public: public:
YuvFileGenerator(FILE* file, size_t width, size_t height) YuvFileGenerator(FILE* file, size_t width, size_t height)
@ -68,6 +98,10 @@ class YuvFileGenerator : public FrameGenerator {
}; };
} // namespace } // namespace
FrameGenerator* FrameGenerator::Create(size_t width, size_t height) {
return new ChromaGenerator(width, height);
}
FrameGenerator* FrameGenerator::CreateFromYuvFile(const char* file, FrameGenerator* FrameGenerator::CreateFromYuvFile(const char* file,
size_t width, size_t width,
size_t height) { size_t height) {

View File

@ -24,6 +24,7 @@ class FrameGenerator {
// Returns video frame that remains valid until next call. // Returns video frame that remains valid until next call.
virtual I420VideoFrame& NextFrame() = 0; virtual I420VideoFrame& NextFrame() = 0;
static FrameGenerator* Create(size_t width, size_t height);
static FrameGenerator* CreateFromYuvFile(const char* file, static FrameGenerator* CreateFromYuvFile(const char* file,
size_t width, size_t width,
size_t height); size_t height);

View File

@ -10,9 +10,6 @@
#include "webrtc/video_engine/test/common/frame_generator_capturer.h" #include "webrtc/video_engine/test/common/frame_generator_capturer.h"
#include <math.h>
#include <string.h>
#include "webrtc/common_video/test/frame_generator.h" #include "webrtc/common_video/test/frame_generator.h"
#include "webrtc/system_wrappers/interface/clock.h" #include "webrtc/system_wrappers/interface/clock.h"
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
@ -23,36 +20,6 @@
namespace webrtc { namespace webrtc {
namespace test { namespace test {
namespace {
class ChromaGenerator : public FrameGenerator {
public:
ChromaGenerator(size_t width, size_t height, Clock* clock) : clock_(clock) {
assert(width > 0);
assert(height > 0);
frame_.CreateEmptyFrame(static_cast<int>(width),
static_cast<int>(height),
static_cast<int>(width),
static_cast<int>((width + 1) / 2),
static_cast<int>((width + 1) / 2));
memset(frame_.buffer(kYPlane), 0x80, frame_.allocated_size(kYPlane));
}
virtual I420VideoFrame& NextFrame() OVERRIDE {
double angle =
static_cast<double>(clock_->CurrentNtpInMilliseconds()) / 1000.0;
uint8_t u = fabs(sin(angle)) * 0xFF;
uint8_t v = fabs(cos(angle)) * 0xFF;
memset(frame_.buffer(kUPlane), u, frame_.allocated_size(kUPlane));
memset(frame_.buffer(kVPlane), v, frame_.allocated_size(kVPlane));
return frame_;
}
private:
Clock* clock_;
I420VideoFrame frame_;
};
} // namespace
FrameGeneratorCapturer* FrameGeneratorCapturer::Create( FrameGeneratorCapturer* FrameGeneratorCapturer::Create(
VideoSendStreamInput* input, VideoSendStreamInput* input,
@ -61,7 +28,7 @@ FrameGeneratorCapturer* FrameGeneratorCapturer::Create(
int target_fps, int target_fps,
Clock* clock) { Clock* clock) {
FrameGeneratorCapturer* capturer = new FrameGeneratorCapturer( FrameGeneratorCapturer* capturer = new FrameGeneratorCapturer(
clock, input, new ChromaGenerator(width, height, clock), target_fps); clock, input, FrameGenerator::Create(width, height), target_fps);
if (!capturer->Init()) { if (!capturer->Init()) {
delete capturer; delete capturer;
return NULL; return NULL;