mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-17 21:30:02 +01:00
contour extraction from calibrated camera-projection view, send out through multicast (blob_id, num points, point 0 ... n , 4 byte per element)
git-svn-id: svn://code.dyne.org/veejay/trunk@1003 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
@@ -522,6 +522,15 @@ int veejay_set_frame(veejay_t * info, long framenum)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int veejay_composite_active( veejay_t *info )
|
||||
{
|
||||
return info->settings->composite;
|
||||
}
|
||||
|
||||
void veejay_composite_transform_points( veejay_t *info, int *in_x, int *in_y, int points, int blob_id )
|
||||
{
|
||||
composite_transform_points( info->composite, in_x, in_y, points, blob_id);
|
||||
}
|
||||
|
||||
void veejay_auto_loop(veejay_t *info)
|
||||
{
|
||||
@@ -905,7 +914,7 @@ static int veejay_screen_update(veejay_t * info )
|
||||
|
||||
video_playback_setup *settings = info->settings;
|
||||
|
||||
if(settings->composite)
|
||||
if(settings->composite==1)
|
||||
{
|
||||
if(!vj_sdl_lock( info->sdl[0] ) )
|
||||
return 0;
|
||||
|
||||
@@ -64,6 +64,11 @@ void veejay_busy(veejay_t *info);
|
||||
|
||||
int veejay_increase_frame(veejay_t * info, long numframes);
|
||||
|
||||
void veejay_composite_transform_points( veejay_t *info, int *in_x, int *in_y, int points, int blob_id );
|
||||
|
||||
int veejay_composite_active( veejay_t *info );
|
||||
|
||||
|
||||
int veejay_create_tag(veejay_t * info, int type, char *filename,
|
||||
int index, int palette, int channel);
|
||||
|
||||
|
||||
@@ -695,6 +695,17 @@ static void donothing(int sig)
|
||||
veejay_msg(VEEJAY_MSG_INFO,"Received signal %x ",sig);
|
||||
veejay_handle_signal( info, sig );
|
||||
}
|
||||
|
||||
int vj_composite_active()
|
||||
{
|
||||
return veejay_composite_active( info );
|
||||
}
|
||||
|
||||
void vj_composite_transform( int *in_x, int *in_y, int points, int blob_id)
|
||||
{
|
||||
veejay_composite_transform_points( info, in_x, in_y, points, blob_id );
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
video_playback_setup *settings;
|
||||
|
||||
@@ -271,7 +271,11 @@ void composite_process( void *compiz, uint8_t *img_dat[3], VJFrame *input, int
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void composite_transform_points( void *compiz, int *in_x, int *in_y, int n, int blob_id )
|
||||
{
|
||||
composite_t *c = (composite_t*) compiz;
|
||||
viewport_transform_coords( c->vp1, in_x, in_y, n , blob_id);
|
||||
}
|
||||
void composite_blit( void *compiz, uint8_t *yuyv )
|
||||
{
|
||||
composite_t *c = (composite_t*) compiz;
|
||||
|
||||
@@ -27,4 +27,5 @@ void composite_process( void *compiz, uint8_t *in[3], VJFrame *input, int vp_
|
||||
void composite_blit( void *compiz,uint8_t *yuyv );
|
||||
void composite_get_blit_buffer( void *compiz, uint8_t *buf[3] );
|
||||
void *composite_get_vp( void *data );
|
||||
void composite_transform_points( void *compiz, int *in_x, int *in_y, int n, int blob_id );
|
||||
#endif
|
||||
|
||||
@@ -118,6 +118,7 @@ typedef struct
|
||||
int32_t tx1,tx2,ty1,ty2;
|
||||
int32_t ttx1,ttx2,tty1,tty2;
|
||||
int mode;
|
||||
int32_t *buf;
|
||||
} viewport_t;
|
||||
|
||||
typedef struct
|
||||
@@ -1194,6 +1195,7 @@ void viewport_destroy( void *data )
|
||||
if( v->map ) free( v->map );
|
||||
if( v->help ) free( v->help );
|
||||
if( v->homedir) free(v->homedir);
|
||||
if( v->buf ) free(v->buf);
|
||||
free(v);
|
||||
}
|
||||
v = NULL;
|
||||
@@ -1331,6 +1333,8 @@ void *viewport_init(int x0, int y0, int w0, int h0, int w, int h, const char *ho
|
||||
// calculate initial view
|
||||
viewport_process( v );
|
||||
|
||||
v->buf = vj_calloc( sizeof(int32_t) * 5000 );
|
||||
|
||||
return (void*)v;
|
||||
}
|
||||
|
||||
@@ -1561,10 +1565,19 @@ void viewport_projection_inc( void *data, int incr, int screen_width, int screen
|
||||
p[5] = v->y3;
|
||||
p[7] = v->y4;
|
||||
|
||||
v->x0 += incr;
|
||||
v->y0 += incr;
|
||||
v->w0 += incr;
|
||||
v->h0 += incr;
|
||||
if( incr == -1 )
|
||||
{
|
||||
v->x0 ++;
|
||||
v->y0 ++;
|
||||
v->w0 -= 2;
|
||||
v->h0 -= 2;
|
||||
} else
|
||||
{
|
||||
v->x0 --;
|
||||
v->y0 --;
|
||||
v->w0 +=2;
|
||||
v->h0 +=2;
|
||||
}
|
||||
matrix_t *tmp = viewport_matrix();
|
||||
matrix_t *im = viewport_invert_matrix( v->M, tmp );
|
||||
|
||||
@@ -1589,6 +1602,52 @@ void viewport_projection_inc( void *data, int incr, int screen_width, int screen
|
||||
viewport_update_perspective(v, p);
|
||||
}
|
||||
|
||||
#ifdef ANIMAX
|
||||
#include <libvjnet/mcastsender.h>
|
||||
static void *sender_ = NULL;
|
||||
#define GROUP 227.0.0.17
|
||||
#define PORT 1234
|
||||
#endif
|
||||
|
||||
void viewport_transform_coords( void *data, int *in_x, int *in_y, int n, int blob_id )
|
||||
{
|
||||
viewport_t *v = (viewport_t*) data;
|
||||
matrix_t *tmp = viewport_matrix();
|
||||
matrix_t *im = viewport_invert_matrix( v->M, tmp );
|
||||
int i,j=2;
|
||||
|
||||
v->buf[0] = blob_id;
|
||||
v->buf[1] = n;
|
||||
|
||||
for( i = 0; i < n; i ++ )
|
||||
{
|
||||
float dx1 ,dy1;
|
||||
point_map( im, in_x[i], in_y[i], &dx1, &dy1);
|
||||
v->buf[j+0] = dx1 / (v->w / 1000.0f);
|
||||
v->buf[j+1] = dy1 / (v->h / 1000.0f);
|
||||
j+=2;
|
||||
}
|
||||
|
||||
//@ send out coordinates
|
||||
|
||||
/*
|
||||
protocol: blob_id (4 bytes) | numer of points (4 bytes) | points 0..n (4 byte per point)
|
||||
*/
|
||||
|
||||
#ifdef ANIMAX
|
||||
if(! sender_ )
|
||||
sender_ = mcast_new_sender( GROUP );
|
||||
if(mcast_send( sender_, v->buf, (n+2) * sizeof(int32_t), PORT_NUM )<=0)
|
||||
{
|
||||
veejay_msg(0, "Cannot send contour over mcast %s:%d", GROUP,PORT_NUM );
|
||||
mcast_close_sender( sender_ );
|
||||
sender_ = NULL;
|
||||
}
|
||||
#endif
|
||||
free(im);
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
void viewport_external_mouse( void *data, uint8_t *img[3], int sx, int sy, int button, int frontback, int screen_width, int screen_height )
|
||||
{
|
||||
viewport_t *v = (viewport_t*) data;
|
||||
@@ -1712,6 +1771,9 @@ void viewport_external_mouse( void *data, uint8_t *img[3], int sx, int sy, int b
|
||||
point_map( im, v->x0, v->y0 + v->h0, &dx3, &dy3 );
|
||||
point_map( im, v->x0 + v->w0, v->y0 + v->h0, &dx4, &dy4 );
|
||||
|
||||
veejay_msg(2, "Rect x0=%d, y0=%d, w0=%d, h0=%d",
|
||||
v->x0,v->y0, v->w0, v->h0 );
|
||||
|
||||
v->x1 = dx1 / (screen_width / 100.0f);
|
||||
v->y1 = dy1 / (screen_height / 100.0f);
|
||||
v->x2 = dx2 / (screen_width / 100.0f);
|
||||
@@ -1768,7 +1830,9 @@ void viewport_external_mouse( void *data, uint8_t *img[3], int sx, int sy, int b
|
||||
point_map( im, v->x0 + v->w0, v->y0, &dx2, &dy2 );
|
||||
point_map( im, v->x0, v->y0 + v->h0, &dx3, &dy3 );
|
||||
point_map( im, v->x0 + v->w0, v->y0 + v->h0, &dx4, &dy4 );
|
||||
|
||||
veejay_msg(2, "Rect x0=%d, y0=%d, w0=%d, h0=%d",
|
||||
v->x0,v->y0, v->w0, v->h0 );
|
||||
|
||||
v->x1 = dx1 / (screen_width / 100.0f);
|
||||
v->y1 = dy1 / (screen_height / 100.0f);
|
||||
v->x2 = dx2 / (screen_width / 100.0f);
|
||||
|
||||
@@ -42,4 +42,5 @@ void viewport_produce_full_img_yuyv( void *vdata, uint8_t *img[3], uint8_t *out_
|
||||
void viewport_draw_interface_color( void *vdata, uint8_t *img[3] );
|
||||
void viewport_set_marker( void *vdata, int status );
|
||||
void viewport_projection_inc( void *data, int incr , int w, int h );
|
||||
void viewport_transform_coords( void *data, int *in_x, int *in_y, int n, int blob_id );
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user