107 lines
2.2 KiB
C++
107 lines
2.2 KiB
C++
/*
|
|
* iaxclient: a cross-platform IAX softphone library
|
|
*
|
|
* Copyrights:
|
|
* Copyright (C) 2003 HorizonLive.com, (c) 2004, Horizon Wimba, Inc.
|
|
*
|
|
* Contributors:
|
|
* Steve Kann <stevek@stevek.com>
|
|
*
|
|
* This program is free software, distributed under the terms of
|
|
* the GNU Lesser (Library) General Public License
|
|
*
|
|
* Module: video_portvideo
|
|
* Purpose: Video code to provide portvideo driver support for IAX library
|
|
* Developed by: Steve Kann
|
|
* Creation Date: April 7, 2005
|
|
*
|
|
*
|
|
*/
|
|
|
|
#include "iaxclient_lib.h"
|
|
#include "PortVideoSDL/common/cameraEngine.h"
|
|
#include "PortVideoSDL/common/cameraTool.h"
|
|
|
|
static cameraEngine *engine;
|
|
int running;
|
|
|
|
|
|
int pv_start (struct iaxc_video_driver *d ) {
|
|
if(!running) {
|
|
if(!engine->startCamera()) {
|
|
fprintf(stderr, "pv: couldn't start camera\n");
|
|
return -1;
|
|
}
|
|
running = 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int pv_stop (struct iaxc_video_driver *d ) {
|
|
return 0;
|
|
}
|
|
|
|
void pv_shutdown() {
|
|
}
|
|
|
|
int pv_input(struct iaxc_video_driver *d, unsigned char **in) {
|
|
unsigned char *data = NULL;
|
|
data = engine->getFrame();
|
|
if(!data) {
|
|
if(!engine->stillRunning()) {
|
|
fprintf(stderr, "camera disconnected\n");
|
|
running = 0;
|
|
}
|
|
fprintf(stderr, "pv_input: no frame\n");
|
|
return 0;
|
|
}
|
|
*in = data;
|
|
return 0;
|
|
}
|
|
|
|
int pv_output(struct iaxc_video_driver *d, unsigned char *data) {
|
|
return 0;
|
|
}
|
|
|
|
int pv_select_devices (struct iaxc_video_driver *d, int input, int output) {
|
|
return 0;
|
|
}
|
|
|
|
int pv_selected_devices (struct iaxc_video_driver *d, int *input, int *output) {
|
|
return 0;
|
|
}
|
|
|
|
int pv_destroy (struct iaxc_video_driver *d ) {
|
|
//implementme
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* initialize video driver */
|
|
int pv_initialize (struct iaxc_video_driver *d, int w, int h, int framerate) {
|
|
/* setup methods */
|
|
d->initialize = pv_initialize;
|
|
d->destroy = pv_destroy;
|
|
d->select_devices = pv_select_devices;
|
|
d->selected_devices = pv_selected_devices;
|
|
d->start = pv_start;
|
|
d->stop = pv_stop;
|
|
d->output = pv_output;
|
|
d->input = pv_input;
|
|
|
|
engine = cameraTool::findCamera();
|
|
if(!engine) {
|
|
fprintf(stderr, "video_portvideo: can't find camera\n");
|
|
return -1;
|
|
}
|
|
|
|
if(!engine->initCamera(w,h,true)) {
|
|
fprintf(stderr, "can't initialize camera");
|
|
return -1;
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|