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;
|
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)
|
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;
|
video_playback_setup *settings = info->settings;
|
||||||
|
|
||||||
if(settings->composite)
|
if(settings->composite==1)
|
||||||
{
|
{
|
||||||
if(!vj_sdl_lock( info->sdl[0] ) )
|
if(!vj_sdl_lock( info->sdl[0] ) )
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -64,6 +64,11 @@ void veejay_busy(veejay_t *info);
|
|||||||
|
|
||||||
int veejay_increase_frame(veejay_t * info, long numframes);
|
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 veejay_create_tag(veejay_t * info, int type, char *filename,
|
||||||
int index, int palette, int channel);
|
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_msg(VEEJAY_MSG_INFO,"Received signal %x ",sig);
|
||||||
veejay_handle_signal( info, 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)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
video_playback_setup *settings;
|
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 )
|
void composite_blit( void *compiz, uint8_t *yuyv )
|
||||||
{
|
{
|
||||||
composite_t *c = (composite_t*) compiz;
|
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_blit( void *compiz,uint8_t *yuyv );
|
||||||
void composite_get_blit_buffer( void *compiz, uint8_t *buf[3] );
|
void composite_get_blit_buffer( void *compiz, uint8_t *buf[3] );
|
||||||
void *composite_get_vp( void *data );
|
void *composite_get_vp( void *data );
|
||||||
|
void composite_transform_points( void *compiz, int *in_x, int *in_y, int n, int blob_id );
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ typedef struct
|
|||||||
int32_t tx1,tx2,ty1,ty2;
|
int32_t tx1,tx2,ty1,ty2;
|
||||||
int32_t ttx1,ttx2,tty1,tty2;
|
int32_t ttx1,ttx2,tty1,tty2;
|
||||||
int mode;
|
int mode;
|
||||||
|
int32_t *buf;
|
||||||
} viewport_t;
|
} viewport_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@@ -1194,6 +1195,7 @@ void viewport_destroy( void *data )
|
|||||||
if( v->map ) free( v->map );
|
if( v->map ) free( v->map );
|
||||||
if( v->help ) free( v->help );
|
if( v->help ) free( v->help );
|
||||||
if( v->homedir) free(v->homedir);
|
if( v->homedir) free(v->homedir);
|
||||||
|
if( v->buf ) free(v->buf);
|
||||||
free(v);
|
free(v);
|
||||||
}
|
}
|
||||||
v = NULL;
|
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
|
// calculate initial view
|
||||||
viewport_process( v );
|
viewport_process( v );
|
||||||
|
|
||||||
|
v->buf = vj_calloc( sizeof(int32_t) * 5000 );
|
||||||
|
|
||||||
return (void*)v;
|
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[5] = v->y3;
|
||||||
p[7] = v->y4;
|
p[7] = v->y4;
|
||||||
|
|
||||||
v->x0 += incr;
|
if( incr == -1 )
|
||||||
v->y0 += incr;
|
{
|
||||||
v->w0 += incr;
|
v->x0 ++;
|
||||||
v->h0 += incr;
|
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 *tmp = viewport_matrix();
|
||||||
matrix_t *im = viewport_invert_matrix( v->M, tmp );
|
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);
|
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 )
|
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;
|
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->y0 + v->h0, &dx3, &dy3 );
|
||||||
point_map( im, v->x0 + v->w0, v->y0 + v->h0, &dx4, &dy4 );
|
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->x1 = dx1 / (screen_width / 100.0f);
|
||||||
v->y1 = dy1 / (screen_height / 100.0f);
|
v->y1 = dy1 / (screen_height / 100.0f);
|
||||||
v->x2 = dx2 / (screen_width / 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->w0, v->y0, &dx2, &dy2 );
|
||||||
point_map( im, v->x0, v->y0 + v->h0, &dx3, &dy3 );
|
point_map( im, v->x0, v->y0 + v->h0, &dx3, &dy3 );
|
||||||
point_map( im, v->x0 + v->w0, v->y0 + v->h0, &dx4, &dy4 );
|
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->x1 = dx1 / (screen_width / 100.0f);
|
||||||
v->y1 = dy1 / (screen_height / 100.0f);
|
v->y1 = dy1 / (screen_height / 100.0f);
|
||||||
v->x2 = dx2 / (screen_width / 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_draw_interface_color( void *vdata, uint8_t *img[3] );
|
||||||
void viewport_set_marker( void *vdata, int status );
|
void viewport_set_marker( void *vdata, int status );
|
||||||
void viewport_projection_inc( void *data, int incr , int w, int h );
|
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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user