- 积分
- 34
- 帖子
- 5
- 主题
- 1
- 精华
- 0
- 最后登录
- 2016-1-5
- 在线时间
- 4 小时
- 私信
|
发表时间 : 2015-12-21 18:25:41
|
浏览 : 3110 评论 : 0
#include <vuAllocTracer.h>
#include <vpApp.h>
#include "vsMovieRecorder.h"
// track memory leaks
vuAllocTracer m_allocTracer;
class myApp : public vpApp {
public:
/**
* Constructor
*/
myApp() : m_window(NULL),
m_channel(NULL),
m_movieRecorder(NULL),
m_bRecording(false),
m_recordingIndex(0)
{}
/**
* Destructor
*/
~myApp()
{
if (m_movieRecorder)
delete m_movieRecorder;
if (m_window)
m_window->unref();
if (m_channel)
m_channel->unref();
}
/**
* Configuration
*/
int configure()
{
vpApp::configure();
m_window = *vpWindow::begin();
assert(m_window);
m_window->ref();
m_channel = *vpChannel::begin();
assert(m_channel);
m_channel->ref();
return vsgu::SUCCESS;
}
/**
* Override keyboard input
*/
virtual void onKeyInput(vrWindow::Key key, int mod)
{
vpObserver *observer = *vpObserver::begin();
switch (key) {
case vrWindow::KEY_F8:
if(m_bRecording){
m_channel->removeSubscriber(vpChannel::EVENT_POST_DRAW, m_movieRecorder, true);
if(m_movieRecorder != NULL){
delete m_movieRecorder;
m_movieRecorder = NULL;
}
}else{
int width, height;
vuNotify::print(vuNotify::LEVEL_WARN, NULL, "Please do not move or resize the window during recording!");
m_window->getSize(&width, &height);
m_movieRecorder = new vsMovieRecorder();
char buffer[2048];
sprintf(buffer, "vp_movie_recorder_Capture_%d.avi", m_recordingIndex);
m_movieRecorder->configure(buffer, 60, true, width, height );
m_channel->addSubscriber(vpChannel::EVENT_POST_DRAW, m_movieRecorder);
m_recordingIndex++;
}
m_bRecording = !m_bRecording;
break;
default:
vpApp::onKeyInput(key, mod);
break;
}
}
private:
vpWindow *m_window;
vpChannel *m_channel;
// our movie recorder
vsMovieRecorder *m_movieRecorder;
// recording control
bool m_bRecording;
// recording index for file names
int m_recordingIndex;
};
int main(int argc, char *argv[])
{
// initialize vega prime
vp::initialize(argc, argv);
// don't need to initialize vpmotion, it's already done by the acf
// create my app instance
myApp *app = new myApp;
// load acf file
if (argc <= 1)
app->define("vp_movie_recorder.acf");
else
app->define(argv[1]);
// configure my app
app->configure();
// runtime loop
app->run();
// unref my app instance
app->unref();
// shutdown vega prime
vp::shutdown();
return 0;
} |
|