refactor perspective tool, add as built-in FX, remove obsolete code

This commit is contained in:
niels
2015-10-24 18:05:44 +02:00
parent a392ed3a5f
commit 2a3bb54f04
22 changed files with 217 additions and 594 deletions

View File

@@ -49,8 +49,6 @@
#include <assert.h>
#include <libel/elcache.h>
#include <veejay/vj-misc.h>
#include <veejay/vj-viewport-xml.h>
#include <veejay/vj-viewport.h>
#include <veejay/vj-misc.h>
#include <libstream/vj-tag.h>
//#define KAZLIB_OPAQUE_DEBUG 1
@@ -959,11 +957,6 @@ int sample_del(int sample_id)
if( si->dict )
vj_font_dictionary_destroy( sample_font_,si->dict );
#endif
if(si->viewport) {
viewport_destroy(si->viewport);
si->viewport = NULL;
}
if(si->edit_list) {
/* check if another sample has same EDL */
sample_close_edl( sample_id, si->edit_list );
@@ -1567,57 +1560,6 @@ int sample_set_chain_source(int s1, int position, int input)
return 1;
}
int sample_load_composite_config( void *compiz, int s1 )
{
sample_info *sample = sample_get(s1);
if(!sample) return -1;
int val = 0;
void *temp = composite_load_config( compiz, sample->viewport_config , &val );
if( temp == NULL || val == -1 ) {
return 0;
}
sample->composite = val;
sample->viewport = temp;
return sample->composite;
}
void *sample_get_composite_view(int s1)
{
sample_info *sample = sample_get(s1);
if(!sample) return NULL;
return sample->viewport;
}
int sample_set_composite_view(int s1, void *vp)
{
sample_info *sample = sample_get(s1);
if(!sample) return -1;
sample->viewport = vp;
return 1;
}
int sample_set_composite(void *compiz, int s1, int composite)
{
sample_info *sample = sample_get(s1);
if(!sample) return -1;
sample->composite = composite;
if(sample->viewport_config == NULL) {
sample->composite = 1;
return 1;
}
composite_add_to_config( compiz, sample->viewport_config, composite );
return 1;
}
int sample_get_composite(int s1)
{
sample_info *sample = sample_get(s1);
if(!sample) return 0;
return sample->composite;
}
/****************************************************************************************************
*
* sample_set_speed
@@ -2888,9 +2830,6 @@ void ParseEffects(xmlDocPtr doc, xmlNodePtr cur, sample_info * skel, int start_a
}
void ParseCalibration( xmlDocPtr doc, xmlNodePtr cur, sample_info *skel , void *vp)
{
void *tmp = viewport_load_xml( doc, cur, vp );
if( tmp )
skel->viewport_config = tmp;
}
void LoadCurrentPlaying( xmlDocPtr doc, xmlNodePtr cur , int *id, int *mode )
@@ -3716,22 +3655,6 @@ void WriteSubtitles( sample_info *next_sample, void *font, char *file )
vj_font_set_dict( font, d );
}
void sample_reload_config(void *compiz, int s1, int mode )
{
sample_info *sample = sample_get(s1);
if(sample) {
if(sample->viewport_config) {
free(sample->viewport_config);
sample->viewport_config = NULL;
}
if(!sample->viewport_config) {
veejay_msg(VEEJAY_MSG_DEBUG, "Calibrated sample %d",s1);
sample->viewport_config = composite_get_config(compiz,mode);
}
sample->composite = mode;
}
}
int sample_writeToFile(char *sampleFile, void *vp,void *seq, void *font, int id, int mode)
{
int i;
@@ -3770,7 +3693,6 @@ int sample_writeToFile(char *sampleFile, void *vp,void *seq, void *font, int id,
CreateSample(childnode, next_sample, font);
viewport_save_xml( childnode, next_sample->viewport_config );
}
}

View File

@@ -167,9 +167,6 @@ typedef struct sample_info_t {
int soft_edl;
void *dict;
void *kf;
int composite;
void *viewport_config;
void *viewport;
long resume_pos;
int subrender;
} sample_info;
@@ -221,8 +218,6 @@ extern int sample_set_speed(int s1, int speed);
extern void sample_loopcount(int s1);
extern void sample_reset_loopcount(int s1);
extern int sample_get_loopcount(int s1);
extern int sample_set_composite(void *compiz,int s1, int composite);
extern int sample_get_composite(int s1);
extern int sample_set_framedup(int s1, int n);
extern int sample_get_framedup(int s1);
extern int sample_set_framedups(int s1, int n);
@@ -340,7 +335,6 @@ extern int sample_usable_edl( int s1 );
extern int sample_cache_used( int s1 );
extern void sample_free(void *edl);
extern int sample_load_composite_config( void *compiz, int s1 );
extern int sample_stop_playing(int s1, int new_s1);
extern int sample_start_playing(int s1, int no_cache);
extern int sample_get_kf_tokens( int s1, int entry, int id, int *start,int *end, int *type);
@@ -349,9 +343,6 @@ extern int sample_read_edl( sample_info *sample );
extern int sample_max_video_length(int s1);
extern int sample_set_composite_view(int s1, void *vp );
extern void *sample_get_composite_view(int s1);
extern long sample_get_resume(int s1);
extern int sample_set_resume(int s1, long pos );

View File

@@ -113,7 +113,6 @@ typedef struct
int planes[4];
int out_planes[4];
int rw;
int composite;
int is_jpeg;
int sizeimage;
VJFrame *frames[N_FRAMES];
@@ -1380,17 +1379,6 @@ void v4l2_set_input_channel( void *d, int num )
ioctl( v->fd, VIDIOC_S_INPUT, &num );
}
void v4l2_set_composite_status( void *d, int status)
{
v4l2info *v = (v4l2info*) d;
v->composite = status;
}
int v4l2_get_composite_status( void *d )
{
v4l2info *v = (v4l2info*) d;
return v->composite;
}
// brightness
void v4l2_set_brightness( void *d, int32_t value ) {
v4l2_set_control( d, V4L2_CID_BRIGHTNESS, value );

View File

@@ -98,7 +98,6 @@ typedef struct {
int max_height;
int min_width;
int min_height;
int composite;
sws_template sws_templ;
void *scaler;
v4lprocessing *info;
@@ -119,7 +118,6 @@ typedef struct {
int norm;
int channel;
int frequency;
int composite;
void *v4l;
pthread_mutex_t mutex;
pthread_t thread;
@@ -1138,15 +1136,4 @@ int v4lvideo_change_channel( void *vvv, int channel )
return ret;
}
void v4lvideo_set_composite_status( void *vv, int status )
{
v4lvideo_template_t *v = (v4lvideo_template_t*) vv;
v->composite = status;
}
int v4lvideo_get_composite_status( void *vv)
{
v4lvideo_template_t *v = (v4lvideo_template_t*) vv;
return v->composite;
}
#endif

View File

@@ -59,10 +59,5 @@ void v4lvideo_set_white(void *vv, int x );
int v4lvideo_change_channel( void *vv, int channel );
// veejay specific
void v4lvideo_set_composite_status( void *vv, int status );
int v4lvideo_get_composite_status( void *vv );
#endif

View File

@@ -21,7 +21,6 @@
#include <libstream/vj-tag.h>
#include <libhash/hash.h>
#include <libvje/vje.h>
#include <veejay/vj-viewport.h>
#include <veejay/vjkf.h>
#include <veejay/vj-shm.h>
#define VIDEO_PALETTE_YUV420P 15
@@ -58,7 +57,6 @@
#ifdef HAVE_FREETYPE
#include <veejay/vj-font.h>
#endif
#include <veejay/vj-viewport-xml.h>
#include <libplugger/plugload.h>
static veejay_t *_tag_info = NULL;
@@ -423,7 +421,6 @@ int _vj_tag_new_unicap( vj_tag * tag, int stream_nr, int width, int height, int
v4lvideo_templ_get_norm( selected_video_norm ),
freq,
width, height, palette );
v4lvideo_set_composite_status( vj_tag_input->unicap[stream_nr] ,has_composite );
if( vj_tag_input->unicap[stream_nr] == NULL ) {
veejay_msg(0, "Unable to open device %s", refname );
return 0;
@@ -784,13 +781,6 @@ int vj_tag_set_stream_color(int t1, int r, int g, int b)
return 1;
}
int vj_tag_get_composite(int t1)
{
vj_tag *tag = vj_tag_get(t1);
if(!tag) return 0;
return tag->composite;
}
int vj_tag_get_stream_color(int t1, int *r, int *g, int *b )
{
vj_tag *tag = vj_tag_get(t1);
@@ -806,22 +796,6 @@ int vj_tag_get_stream_color(int t1, int *r, int *g, int *b )
return 1;
}
int vj_tag_composite(int t1)
{
vj_tag *tag = vj_tag_get(t1);
if(!tag) return 0;
if(tag->source_type != VJ_TAG_TYPE_V4L )
return 0;
if(tag->capture_type==1) {
#ifdef HAVE_V4L
return v4lvideo_get_composite_status( vj_tag_input->unicap[tag->index]);
#elif HAVE_V4L2
return v4l2_get_composite_status( vj_tag_input->unicap[tag->index] );
#endif
}
return 0;
}
// for network, filename /channel is passed as host/port num
int vj_tag_new(int type, char *filename, int stream_nr, editlist * el,
int pix_fmt, int channel , int extra , int has_composite)
@@ -1317,8 +1291,6 @@ int vj_tag_del(int id)
tag->socket_frame = NULL;
}
if(tag->viewport)
viewport_destroy(tag->viewport);
#ifdef ARCH_X86_64
uint64_t tid = (uint64_t) tag->id;
#else
@@ -1375,64 +1347,6 @@ int vj_tag_set_n_frames( int t1, int n )
return 1;
}
int vj_tag_load_composite_config( void *compiz, int t1 )
{
vj_tag *tag = vj_tag_get(t1);
if(!tag)
return -1;
int val = 0;
void *temp = composite_load_config( compiz, tag->viewport_config, &val );
if(temp == NULL || val == -1 )
return 0;
tag->composite = val;
tag->viewport = temp;
return tag->composite;
}
void vj_tag_reload_config( void *compiz, int t1, int mode )
{
vj_tag *tag = vj_tag_get(t1);
if(tag) {
if(tag->viewport_config) {
free(tag->viewport_config);
tag->viewport_config = NULL;
}
if(!tag->viewport_config) {
tag->viewport_config = composite_get_config( compiz, mode );
}
tag->composite = mode;
}
}
void *vj_tag_get_composite_view( int t1 )
{
vj_tag *tag = vj_tag_get(t1);
if(!tag) return NULL;
return tag->viewport;
}
int vj_tag_set_composite_view( int t1, void *vp )
{
vj_tag *tag = vj_tag_get(t1);
if(!tag) return -1;
tag->viewport = vp;
return 1;
}
int vj_tag_set_composite( void *compiz,int t1, int n )
{
vj_tag *tag = vj_tag_get(t1);
if(!tag) return -1;
tag->composite = n;
if( tag->viewport_config == NULL ) {
tag->composite = 1;
return 1;
}
composite_add_to_config( compiz, tag->viewport_config, n );
return 1;
}
int vj_tag_get_effect(int t1, int position)
{
vj_tag *tag = vj_tag_get(t1);
@@ -3930,10 +3844,6 @@ static void tagParseEffects(xmlDocPtr doc, xmlNodePtr cur, int dst_stream)
void tagParseCalibration( xmlDocPtr doc, xmlNodePtr cur, int dst_sample , void *vp)
{
vj_tag *t = vj_tag_get( dst_sample );
void *tmp = viewport_load_xml( doc, cur, vp );
if( tmp )
t->viewport_config = tmp;
}
/*************************************************************************************************
@@ -3981,7 +3891,6 @@ void tagParseStreamFX(char *sampleFile, xmlDocPtr doc, xmlNodePtr cur, void *fon
xmlNodePtr subs = NULL;
xmlNodePtr cali = NULL;
void *d = vj_font_get_dict( font );
void *viewport_config = NULL;
while (cur != NULL)
{
@@ -4053,7 +3962,6 @@ void tagParseStreamFX(char *sampleFile, xmlDocPtr doc, xmlNodePtr cur, void *fon
tag->fader_direction = fader_dir;
tag->opacity = opacity;
tag->nframes = nframes;
tag->viewport_config = viewport_config;
switch( source_type )
{
@@ -4232,8 +4140,6 @@ void tagCreateStream(xmlNodePtr node, vj_tag *tag, void *font, void *vp)
vj_font_xml_pack( node, font );
viewport_save_xml( node, tag->viewport_config );
xmlNodePtr childnode =
xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_EFFECTS, NULL);

View File

@@ -44,7 +44,8 @@ EXTRA_DIST += effects/autoeq.h effects/crosspixel.h effects/mask.h effects/rawva
effects/complexthreshold.h effects/lumamask.h effects/radialblur.h effects/waterrippletv.h \
effects/constantblend.h effects/magicmirror.h effects/radioactive.h effects/whiteframe.h \
effects/contourextract.h effects/magicoverlays.h effects/raster.h effects/widthmirror.h \
effects/contrast.h effects/magicscratcher.h effects/rawman.h effects/zoom.h effects/iris.h effects/cali.h effects/median.h effects/average-blend.h
effects/contrast.h effects/magicscratcher.h effects/rawman.h effects/zoom.h effects/iris.h \
effects/cali.h effects/median.h effects/average-blend.h effects/perspective.h
EXTRA_DIST += specs/FreeFrame.h specs/frei0r.h
@@ -91,6 +92,6 @@ libvje_la_SOURCES = vj-effect.c vj-effman.c effects/common.c \
effects/cartonize.c effects/tripplicity.c effects/neighbours.c effects/neighbours2.c\
effects/neighbours3.c effects/neighbours4.c effects/neighbours5.c effects/cutstop.c\
effects/contourextract.c effects/maskstop.c effects/photoplay.c effects/videoplay.c effects/rgbchannel.c \
effects/videowall.c effects/flare.c effects/radioactive.c effects/baltantv.c effects/constantblend.c effects/picinpic.c effects/bgsubtract.c effects/cali.c effects/median.c effects/average-blend.c
effects/videowall.c effects/flare.c effects/radioactive.c effects/baltantv.c effects/constantblend.c effects/picinpic.c effects/bgsubtract.c effects/cali.c effects/median.c effects/average-blend.c effects/perspective.c

View File

@@ -64,7 +64,7 @@ int zoom_malloc(int width, int height)
{
int i;
for( i = 0; i < 3; i ++ ) {
zoom_private_[i] = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(width*height));
zoom_private_[i] = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(width*height+width));
if(!zoom_private_[i])
return 0;
}
@@ -90,7 +90,7 @@ void zoom_apply( VJFrame *frame, int width, int height, int x, int y, int factor
{
if( zoom_vp_ )
viewport_destroy( zoom_vp_ );
zoom_vp_ = viewport_fx_init( VP_QUADZOOM, width,height,x,y,factor, dir );
zoom_vp_ = viewport_fx_zoom_init( VP_QUADZOOM, width,height,x,y,factor, dir );
if(!zoom_vp_ )
return;
zoom_[0] = x; zoom_[1] = y; zoom_[2] = factor; zoom_[3] = dir;

View File

@@ -216,11 +216,12 @@ enum {
VJ_IMAGE_EFFECT_LENSCORRECTION = 189,
VJ_IMAGE_EFFECT_CALI = 190,
VJ_IMAGE_EFFECT_MEDIANFILTER = 191,
VJ_IMAGE_EFFECT_PERSPECTIVE = 192,
VJ_IMAGE_EFFECT_DUMMY=100,
};
#define VJ_IMAGE_EFFECT_MIN 100
#define VJ_IMAGE_EFFECT_MAX 192
#define VJ_IMAGE_EFFECT_MAX 193
#define VJ_VIDEO_EFFECT_MIN 200
#define VJ_VIDEO_EFFECT_MAX 248
@@ -482,6 +483,8 @@ extern void slice_apply(VJFrame *frame, int width, int height, int val, int rein
extern void zoom_apply(VJFrame *frame, int w, int h , int xo, int yo, int f, int dir);
extern void perspective_apply( VJFrame *frame, int width, int height, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int reverse);
extern void deinterlace_apply(VJFrame *frame, int w, int h, int val);
extern void simplematte_apply(VJFrame *frame, int w, int h, int threshold, int invert);

View File

@@ -168,6 +168,7 @@
#include "effects/cali.h"
#include "effects/bgsubtract.h"
#include "effects/average-blend.h"
#include "effects/perspective.h"
#include <libplugger/plugload.h>
#include <veejay/vims.h>
@@ -258,6 +259,7 @@ static struct
{ waterrippletv_malloc, waterrippletv_free, VJ_IMAGE_EFFECT_RIPPLETV },
{ bgsubtract_malloc, bgsubtract_free, VJ_IMAGE_EFFECT_BGSUBTRACT },
{ slicer_malloc, slicer_free, VJ_VIDEO_EFFECT_SLICER },
{ perspective_malloc, perspective_free, VJ_IMAGE_EFFECT_PERSPECTIVE },
{ NULL , NULL ,0 },
};
@@ -658,6 +660,7 @@ void vj_effect_initialize(int width, int height, int full_range)
vj_effects[i + 89 ]= radcor_init(width,height);
vj_effects[i + 90 ]= cali_init(width,height);
vj_effects[i + 91 ] = medianfilter_init(width,height);
vj_effects[i + 92 ] = perspective_init(width,height);
max_width = width;
max_height = height;

View File

@@ -409,6 +409,9 @@ void vj_effman_apply_image_effect(
slice_apply(frames[0],frames[0]->width,frames[0]->height,arg[0], todo_info->tmp[1]);
todo_info->tmp[1] = 0;
break;
case VJ_IMAGE_EFFECT_PERSPECTIVE:
perspective_apply(frames[0],frames[0]->width,frames[0]->height,arg[0],arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8] );
break;
}
}

View File

@@ -22,7 +22,7 @@
#define FX_LIMIT 1024
#define MAX_EFFECTS 140
#define MAX_EFFECTS 141
#define PARAM_WIDTH (1<<0x2)
#define PARAM_HEIGHT (1<<0x3)
#define PARAM_FADER (1<<0x1)

View File

@@ -412,8 +412,6 @@ int veejay_free(veejay_t * info)
task_destroy();
if( info->settings->composite2 )
composite_destroy( info->composite2 );
if( info->composite )
composite_destroy( info->composite );
@@ -586,6 +584,7 @@ static int veejay_stop_playing_sample( veejay_t *info, int new_sample_id )
sample_chain_free( info->uc->sample_id );
sample_set_framedups(info->uc->sample_id,0);
sample_set_resume(info->uc->sample_id, info->settings->current_frame_num );
return 1;
}
static void veejay_stop_playing_stream( veejay_t *info, int new_stream_id )
@@ -631,15 +630,29 @@ static int veejay_start_playing_sample( veejay_t *info, int sample_id )
}
#endif
if(info->composite )
/* if(info->composite )
{
int has_cfg = sample_load_composite_config( info->composite , sample_id );
if( has_cfg && info->settings->composite == 1 ) {
void *cur = sample_get_composite_view(sample_id);
if( cur ) composite_set_backing(info->composite,cur);
if( cur == NULL ) {
composite_set_file_mode( info->composite, info->homedir, info->uc->playback_mode,sample_id);
if( sample_load_composite_config( info->composite, sample_id ) ) {
veejay_msg(VEEJAY_MSG_WARNING, "Sample %d has composite view %p", sample_id, sample_get_composite_view(sample_id) );
}
}
else {
composite_set_backing( info->composite, cur );
}
switch(composite_has_back(info->composite)) {
case 2:
settings->composite = composite_restore_config(info->composite);
break;
default:
settings->composite = 0;
break;
}
}
*/
info->uc->sample_id = sample_id;
info->last_sample_id = sample_id;
@@ -691,14 +704,29 @@ static int veejay_start_playing_stream(veejay_t *info, int stream_id )
info->last_tag_id = stream_id;
info->uc->sample_id = stream_id;
if(info->composite )
/* if(info->composite )
{
int has_cfg = vj_tag_load_composite_config( info->composite , stream_id );
if( has_cfg && info->settings->composite == 1 ) {
void *cur = vj_tag_get_composite_view(stream_id);
if( cur ) composite_set_backing(info->composite,cur);
if(cur == NULL) {
composite_set_file_mode( info->composite, info->homedir, info->uc->playback_mode,stream_id);
if( vj_tag_load_composite_config( info->composite , stream_id ) ) {
veejay_msg(VEEJAY_MSG_WARNING, "Stream %d has composite view %p", stream_id,vj_tag_get_composite_view(stream_id) );
}
}
else {
composite_set_backing( info->composite, cur );
}
switch(composite_has_back(info->composite)) {
case 2:
settings->composite = composite_restore_config(info->composite);
break;
default:
settings->composite = 0;
break;
}
}*/
veejay_msg(VEEJAY_MSG_INFO,"Playing stream %d (FX=%x) (Ff=%d)", stream_id, tmp, settings->max_frame_num );
@@ -776,8 +804,13 @@ void veejay_change_playback_mode( veejay_t *info, int new_pm, int sample_id )
video_playback_setup *settings = info->settings;
settings->min_frame_num = 0;
settings->max_frame_num = info->edit_list->total_frames;
veejay_msg(VEEJAY_MSG_INFO, "Playing plain video, frames %ld - %ld", (long)settings->min_frame_num, (long)settings->max_frame_num );
/* if(info->composite) {
composite_set_file_mode( info->composite, info->homedir, new_pm, 0);
composite_restore_config( info->composite );
}
*/
veejay_msg(VEEJAY_MSG_INFO, "Playing plain video, frames %ld - %ld", (long)settings->min_frame_num, (long)settings->max_frame_num );
}
if(new_pm == VJ_PLAYBACK_MODE_TAG)
{
@@ -1838,19 +1871,22 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags, int gen_t
if( info->settings->composite )
{
char path[1024];
snprintf(path,sizeof(path),"%s/viewport.cfg", info->homedir);
int comp_mode = info->settings->composite;
info->composite = composite_init( info->video_output_width, info->video_output_height,
info->video_output_width, info->video_output_height,
info->homedir,
path,
info->settings->sample_mode,
yuv_which_scaler(),
info->pixel_format,
&comp_mode);
if(!info->composite) {
return -1;
}
info->composite2 = info->composite; // save ptr, composite
composite_set_file_mode( info->composite, info->homedir, info->uc->playback_mode,info->uc->sample_id);
info->settings->zoom = 0;
info->settings->composite = ( comp_mode == 1 ? 1: 0);

View File

@@ -50,7 +50,6 @@ typedef struct
uint8_t *proj_plane[4];
uint8_t *mirror_plane[4];
void *vp1;
void *back1;
void *scaler;
void *back_scaler;
VJFrame *frame1;
@@ -62,9 +61,6 @@ typedef struct
int pf;
int use_back;
int Y_only;
int run;
int back_run;
int has_back;
int proj_width; /* projection (output) */
int proj_height;
int img_width; /* image (input) */
@@ -72,7 +68,7 @@ typedef struct
int has_mirror_plane;
int mirror_row_start;
int mirror_row_end;
int ownback1;
char tmp_path[1024];
} composite_t;
//@ round to multiple of 8
@@ -84,19 +80,24 @@ void *composite_get_vp( void *data )
return c->vp1;
}
void composite_set_file_mode(void *data, const char *homedir, int mode, int id)
{
composite_t *c = (composite_t*) data;
switch(mode) {
case 2: snprintf(c->tmp_path,sizeof(c->tmp_path),"%s/viewport.cfg", homedir ); break;
case 1: snprintf(c->tmp_path,sizeof(c->tmp_path),"%s/viewport-stream-%d", homedir,id );break;
default:snprintf(c->tmp_path,sizeof(c->tmp_path),"%s/viewport-sample-%d.cfg", homedir,id );break;
}
veejay_msg(VEEJAY_MSG_DEBUG, "Save/load from File [%s]",c->tmp_path );
}
int composite_get_ui(void *data )
{
composite_t *c = (composite_t*) data;
return viewport_get_mode(c->vp1);
}
int composite_has_back(void *data)
{
composite_t *c = (composite_t*) data;
return c->has_back;
}
void *composite_init( int pw, int ph, int iw, int ih, const char *homedir, int sample_mode, int zoom_type, int pf, int *vp1_e )
void *composite_init( int pw, int ph, int iw, int ih, char *homedir, int sample_mode, int zoom_type, int pf, int *vp1_e )
{
composite_t *c = (composite_t*) vj_calloc(sizeof(composite_t));
int vp1_frontback = 0;
@@ -138,8 +139,6 @@ void *composite_init( int pw, int ph, int iw, int ih, const char *homedir, int s
c->scaler = yuv_init_swscaler( c->frame1, c->frame2, &sws_templ, 0 );
c->back_scaler = yuv_init_swscaler( c->frame4, c->frame3, &sws_templ, 0 );
c->back1 = NULL;
veejay_msg(VEEJAY_MSG_DEBUG, "\tSoftware scaler : %s", yuv_get_scaler_name(zoom_type) );
veejay_msg(VEEJAY_MSG_DEBUG, "\tVideo resolution : %dx%d", iw,ih );
veejay_msg(VEEJAY_MSG_DEBUG, "\tScreen resolution: %dx%d", pw,ph );
@@ -169,20 +168,11 @@ void *composite_clone( void *compiz )
composite_t *c = (composite_t*) compiz;
if(!c) return NULL;
void *v = viewport_clone(c->vp1,c->img_width,c->img_height);
viewport_reconfigure(v);
return v;
}
// viewport_reconfigure(v);
void composite_set_backing( void *compiz, void *vp )
{
composite_t *c = (composite_t*) compiz;
if(c->ownback1) {
c->ownback1 = 0;
if(c->back1) {
viewport_destroy( c->back1 );
}
}
c->back1 = vp;
veejay_msg(VEEJAY_MSG_WARNING, "Cloned new backing %p", v);
return v;
}
void composite_destroy( void *compiz )
@@ -192,7 +182,6 @@ void composite_destroy( void *compiz )
{
if(c->proj_plane[0]) free(c->proj_plane[0]);
if(c->vp1) viewport_destroy( c->vp1 );
if(c->ownback1 && c->back1) { viewport_destroy(c->back1); c->back1 = NULL; c->ownback1 = 0; }
if(c->scaler) yuv_free_swscaler( c->scaler );
if(c->back_scaler) yuv_free_swscaler(c->back_scaler);
if(c->frame1) free(c->frame1);
@@ -214,8 +203,6 @@ void composite_set_status(void *compiz, int mode)
{
composite_t *c = (composite_t*) compiz;
viewport_set_initial_active( c->vp1, mode );
viewport_save_settings( c->vp1, 1 );
}
void composite_set_ui(void *compiz, int status )
@@ -232,38 +219,10 @@ void composite_add_to_config( void *compiz, void *vc, int which_vp )
viewport_set_composite( vc, which_vp, c->Y_only );
}
void *composite_load_config( void *compiz, void *vc, int *result )
{
if( vc == NULL ) {
*result = -1;
return NULL;
}
composite_t *c = (composite_t*) compiz;
int cm = viewport_get_color_mode_from_config(vc);
int m = viewport_get_composite_mode_from_config(vc);
int res = viewport_reconfigure_from_config( c->vp1, vc );
//@ push to back1 too!
if(res) {
if( c->back1 == NULL ) {
c->back1 = composite_clone(c );
c->ownback1 = 1;
}
viewport_update_from(c->vp1, c->back1 );
c->Y_only = cm;
*result = m;
return (void*)c->back1;
}
return NULL;
}
int composite_event( void *compiz, uint8_t *in[4], int mouse_x, int mouse_y, int mouse_button, int w_x, int w_y )
int composite_event( void *compiz, uint8_t *in[4], int mouse_x, int mouse_y, int mouse_button, int w_x, int w_y, char *homedir, int mode, int id )
{
composite_t *c = (composite_t*) compiz;
if(viewport_external_mouse( c->vp1, c->proj_plane, mouse_x, mouse_y, mouse_button, 1,w_x,w_y )) {
if(c->back1)
viewport_update_from(c->vp1, c->back1 );
if(viewport_external_mouse( c->vp1, c->proj_plane, mouse_x, mouse_y, mouse_button, 1,w_x,w_y, homedir, mode, id )) {
return 1;
}
return 0;
@@ -322,8 +281,6 @@ void composite_blit_yuyv( void *compiz, uint8_t *in[4], uint8_t *yuyv, int which
composite_t *c = (composite_t*) compiz;
int vp1_active = viewport_active(c->vp1);
c->has_back = 0;
if( which_vp == 2 && vp1_active ) {
yuv422_to_yuyv(c->proj_plane,yuyv,c->proj_width,c->proj_height );
return;
@@ -371,13 +328,10 @@ void composite_blit_ycbcr( void *compiz,
{
}
void *composite_get_config(void *compiz, int which_vp )
void *composite_get_config(void *compiz)
{
composite_t *c = (composite_t*) compiz;
void *config = viewport_get_configuration( c->vp1 );
viewport_set_composite( config, which_vp, c->Y_only );
return config;
return viewport_get_configuration( c->vp1, c->tmp_path );
}
/* Top frame */
@@ -385,11 +339,6 @@ int composite_process(void *compiz, VJFrame *output, VJFrame *input, int which_v
{
composite_t *c = (composite_t*) compiz;
if(c->run == 0 ) {
viewport_reconfigure(c->vp1);
c->run=1;
}
int vp1_active = viewport_active(c->vp1);
if( c->has_mirror_plane ) {

View File

@@ -1,7 +1,7 @@
/*
* Linux VeeJay
*
* Copyright(C)2002-2008 Niels Elburg <nwelburg@gmail.com>
* Copyright(C)2002-2015 Niels Elburg <nwelburg@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -40,22 +40,21 @@ void composite_process_divert( void *compiz, uint8_t *in[4], VJFrame *out, void
void composite_blit_yuyv( void *compiz,uint8_t *in[4], uint8_t *yuyv, int which_vp );
int composite_event( void *compiz, uint8_t *in[4], int mouse_x, int mouse_y, int mouse_button, int w_x, int w_y );
int composite_event( void *compiz, uint8_t *in[4], int mouse_x, int mouse_y, int mouse_button, int w_x, int w_y, char *homedir, int mode, int id );
void *composite_get_config(void *compiz);
void composite_destroy( void *compiz );
void *composite_init( int pw, int ph, int iw, int ih, const char *homedir, int sample_mode, int zoom_type, int pf, int *vp1_enabled );
void composite_set_backing( void *compiz, void *vp );
void *composite_init( int pw, int ph, int iw, int ih, char *homedir, int sample_mode, int zoom_type, int pf, int *vp1_enabled );
void *composite_clone( void *compiz );
void composite_set_file_mode(void *data, const char *homedir, int mode, int id);
void *composite_get_vp( void *data );
void composite_set_ui(void *compiz, int status );
int composite_get_ui(void *compiz );
//@ load config after loading to activate viewport setup
//@ add to config before saving
void *composite_load_config( void *compiz, void *vc, int *result );
void composite_add_to_config( void *compiz, void *vc, int which_vp );
int composite_get_status(void *compiz );
void composite_set_status(void *compiz, int mode);

View File

@@ -7095,8 +7095,8 @@ void vj_event_vp_proj_toggle(void *ptr, const char format[],va_list ap )
return;
}
int mode = !composite_get_status(v->composite2);
composite_set_status( v->composite2, mode );
int mode = !composite_get_status(v->composite);
composite_set_status( v->composite, mode );
veejay_msg(VEEJAY_MSG_INFO, "Projection transform is now %s on startup.",(mode==0? "inactive" : "active"));
}
@@ -7120,11 +7120,6 @@ void vj_event_vp_stack( void *ptr, const char format[], va_list ap )
if ( args[1] == 1 ) {
int mode = v->settings->composite;
if( mode == 0 ) {
if( SAMPLE_PLAYING(v) ) {
sample_set_composite( v->composite, v->uc->sample_id, 1 );
} else if (STREAM_PLAYING(v) ) {
vj_tag_set_composite( v->composite, v->uc->sample_id, 1 );
}
v->settings->composite = 1;
} else if ( mode == 1 ) {
v->settings->composite = 0;
@@ -7132,7 +7127,6 @@ void vj_event_vp_stack( void *ptr, const char format[], va_list ap )
v->settings->composite = 1;
}
}
}
void vj_event_vp_set_points( void *ptr, const char format[], va_list ap )
@@ -7284,43 +7278,15 @@ void vj_event_viewport_frontback(void *ptr, const char format[], va_list ap)
}
if( v->settings->composite == 2 && composite_get_ui( v->composite ) ) {
// if(v->use_osd==3)
// v->use_osd = 0;
// v->settings->composite = 2;
if(STREAM_PLAYING(v)) {
void *cur = vj_tag_get_composite_view(v->uc->sample_id);
if(cur == NULL ) {
cur = (void*)composite_clone(v->composite);
vj_tag_set_composite_view(v->uc->sample_id,cur);
}
vj_tag_reload_config(v->composite,v->uc->sample_id,v->settings->composite );
veejay_msg(VEEJAY_MSG_INFO, "Saved calibration to stream %d",v->uc->sample_id);
} else if (SAMPLE_PLAYING(v)) {
void *cur = sample_get_composite_view( v->uc->sample_id );
if( cur == NULL ) {
cur = composite_clone(v->composite);
sample_set_composite_view(v->uc->sample_id, cur );
}
sample_reload_config( v->composite,v->uc->sample_id, v->settings->composite);
veejay_msg(VEEJAY_MSG_INFO, "Saved calibration to sample %d",v->uc->sample_id );
} else {
//FIXME plain mode restore
}
if(v->use_osd==3)
v->use_osd = 0;
composite_set_ui(v->composite, 0 );
v->settings->composite = 1;
//#ifdef HAVE_SDL
// if(v->video_out==0 || v->video_out == 2)
// vj_sdl_grab( v->sdl[0], 0 );
//#endif
v->settings->composite = 0;
}
else {
composite_set_ui( v->composite, 2 );
v->settings->composite = 2;
v->use_osd=3;
//#ifdef HAVE_SDL
// if(v->video_out==0 || v->video_out == 2)
// vj_sdl_grab( v->sdl[0], 1 );
//#endif
veejay_msg(VEEJAY_MSG_INFO, "You can now calibrate your projection/camera, press CTRL-s again to save and exit.");
}
}
@@ -7943,9 +7909,6 @@ void vj_event_print_tag_info(veejay_t *v, int id)
id, vj_tag_size()-1, description,
(vj_tag_get_active(id) == 1 ? "is active" : "is not active"));
if( vj_tag_get_composite( id ) )
veejay_msg(VEEJAY_MSG_INFO, "This tag is transformed when used as secundary input.");
for (i = 0; i < SAMPLE_MAX_EFFECTS; i++)
{
y = vj_tag_get_effect_any(id, i);
@@ -8096,9 +8059,6 @@ void vj_event_print_sample_info(veejay_t *v, int id)
sampletitle,id,sample_size()-1,timecode,len, (long)v->settings->current_frame_num,
curtime);
if( sample_get_composite( id ) )
veejay_msg(VEEJAY_MSG_INFO, "This sample will be transformed when used as secundary input.");
if(sample_encoder_active(v->uc->sample_id))
{
veejay_msg(VEEJAY_MSG_INFO, "REC %09d\t[timecode: %s | %8ld ]",
@@ -9085,7 +9045,7 @@ void vj_event_send_shm_info( void *ptr, const char format[], va_list ap)
int msg_len = strlen(msg);
char *tmp = get_print_buf(1 + msg_len + 3);
sprintf( tmp, "%03zu%s",msg_len, msg );
sprintf( tmp, "%03d%s",msg_len, msg );
SEND_MSG(v,tmp);
free(msg);

View File

@@ -169,7 +169,6 @@ typedef struct {
char *vims_group_name;
int zoom;
int composite;
int composite2;
sws_template sws_templ;
vj_schedule_t action_scheduler;
float output_fps;

View File

@@ -41,6 +41,8 @@
#include <libvje/vje.h>
#include <libyuv/yuvconv.h>
#include <libavutil/pixfmt.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <pthread.h>
@@ -644,3 +646,25 @@ int veejay_sprintf( char *s, size_t size, const char *format, ... )
}
#endif
void xml2flt( xmlDocPtr doc, xmlNodePtr cur, float *dst , const xmlChar *name) {
if(!xmlStrcmp(cur->name, name ) ) {
xmlChar *xmlTemp = xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
unsigned char *chTemp = UTF8toLAT1(xmlTemp);
if (chTemp) {
*dst = (float) atof( (char*)chTemp);
free(chTemp);
}
free(xmlTemp);
}
}
void xml2int( xmlDocPtr doc, xmlNodePtr cur, int *dst , const xmlChar *name) {
if(!xmlStrcmp(cur->name, name ) ) {
xmlChar *xmlTemp = xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
unsigned char *chTemp = UTF8toLAT1(xmlTemp);
if (chTemp) {
*dst = (int) atoi( (char*)chTemp);
free(chTemp);
}
free(xmlTemp);
}
}

View File

@@ -3111,22 +3111,6 @@ static char *vj_perform_osd_status( veejay_t *info )
tc.h, tc.m, tc.s, tc.f );
char *extra = NULL;
if( info->composite ) {
int status = -1;
if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE ) {
status = sample_get_composite( info->uc->sample_id );
} else if (info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG ) {
status = vj_tag_get_composite( info->uc->sample_id );
}
if( status == 0 ) {
snprintf(tmp,sizeof(tmp), "Proj");
extra = vj_strdup(tmp);
}
else if(status == 1 ) {
snprintf(tmp,sizeof(tmp), "Cam");
extra = vj_strdup(tmp);
}
}
switch(info->uc->playback_mode) {
case VJ_PLAYBACK_MODE_SAMPLE:
@@ -3251,27 +3235,7 @@ static void vj_perform_finish_render( veejay_t *info, video_playback_setup *sett
//@ focus on projection screen
if(composite_event( info->composite, pri, info->uc->mouse[0],info->uc->mouse[1],info->uc->mouse[2],
vj_perform_get_width(info), vj_perform_get_height(info)) ) {
//@ save config to playing sample/stream
if( info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG ) {
void *cur = vj_tag_get_composite_view(info->uc->sample_id);
if(cur == NULL )
{
cur = composite_clone(info->composite);
vj_tag_set_composite_view(info->uc->sample_id, cur );
}
composite_set_backing(info->composite,cur);
vj_tag_reload_config( info->composite,info->uc->sample_id, 1);
} else if ( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE) {
void *cur = sample_get_composite_view(info->uc->sample_id);
if(cur==NULL) {
cur = composite_clone(info->composite);
sample_set_composite_view(info->uc->sample_id,cur);
}
composite_set_backing(info->composite,cur);
sample_reload_config( info->composite,info->uc->sample_id, 1 );
}
vj_perform_get_width(info), vj_perform_get_height(info),info->homedir,info->uc->playback_mode,info->uc->sample_id ) ) {
#ifdef HAVE_SDL
if( info->video_out == 0 ) {
//@ release focus

View File

@@ -45,10 +45,8 @@ typedef struct
int initial_active;
} viewport_config_t;
void viewport_save_xml(xmlNodePtr parent,void *vv);
void *viewport_load_xml(xmlDocPtr doc, xmlNodePtr cur, void *vv );
extern void composite_add_to_config( void *compiz, void *vc, int which_vp );
extern void *composite_load_config( void *compiz, void *vc, int *result );
void *composite_get_config(void *compiz, int which_vp );
extern void *composite_load_config( void *compiz, void *vc, void *backing, int *result );
extern void *composite_get_config( void *compiz );
extern void *composite_clone( void *compiz );
#endif

View File

@@ -35,13 +35,12 @@
#include <libvjmsg/vj-msg.h>
#include <libvje/vje.h>
#include <veejay/vj-viewport.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <veejay/vj-viewport-xml.h>
#include <libvje/effects/opacity.h>
#include <libyuv/yuvconv.h>
#include <libavutil/pixfmt.h>
#include <libvjmem/vjmem.h>
#include <veejay/vj-viewport-cfg.h>
#include <veejay/vj-viewport.h>
#include <math.h>
#include <assert.h>
#define X0 0
@@ -132,7 +131,6 @@ typedef struct
char *help;
uint8_t grid_val;
int parameters[8];
char *homedir;
int32_t tx1,tx2,ty1,ty2;
int32_t ttx1,ttx2,tty1,tty2;
int mode;
@@ -184,7 +182,7 @@ static matrix_t *viewport_matrix(void);
static void viewport_find_transform( float *coord, matrix_t *M );
void viewport_line (uint8_t *plane,int x1, int y1, int x2, int y2, int w, int h, uint8_t col);
static void draw_point( uint8_t *plane, int x, int y, int w, int h, int size, int col );
static viewport_config_t *viewport_load_settings( const char *dir, int mode );
static viewport_config_t *viewport_load_settings( char *dir );
static void viewport_prepare_process( viewport_t *v );
static void viewport_compute_grid( viewport_t *v );
@@ -1049,6 +1047,11 @@ void viewport_process_dynamic_map( void *data, uint8_t *in[3], uint8_t *out[3],
float ttx,tty;
int32_t x,y;
int32_t itx,ity;
outY[ w * h + 1 ] = 0;
outU[ w * h + 1 ] = 128;
outV[ w * h + 1 ] = 128;
/*
#if defined (HAVE_ASM_MMX) || defined (HAVE_AMS_SSE )
@@ -1288,8 +1291,6 @@ void viewport_destroy( void *data )
if( v->T ) free( v->T );
if( v->map ) free( v->map );
if( v->help ) free( v->help );
if( v->homedir) free(v->homedir);
// if( v->buf ) free(v->buf);
if( v->ui ) {
if( v->ui->scaler )
yuv_free_swscaler(v->ui->scaler);
@@ -1441,8 +1442,16 @@ void viewport_set_initial_active( void *vv, int status )
v->initial_active = status;
}
void *viewport_get_configuration(void *vv )
void empireoftheclouds()
{
}
void *viewport_get_configuration(void *vv, char *filename )
{
viewport_config_t *vc = viewport_load_settings( filename );
if(vc) {
return vc;
}
viewport_t *v = (viewport_t*) vv;
viewport_config_t *o = (viewport_config_t*) vj_calloc(sizeof(viewport_config_t)); //FIXME not always freed?
@@ -1470,12 +1479,15 @@ void *viewport_get_configuration(void *vv )
return o;
}
int viewport_reconfigure_from_config(void *vv, void *vc)
int viewport_reconfigure_from_config(void *vv, void *config, char *filename)
{
viewport_t *v = (viewport_t*) vv;
viewport_config_t *c = (viewport_config_t*) vc;
viewport_config_t *o = viewport_get_configuration(vv );
viewport_config_t *c = (viewport_config_t*) config;
viewport_config_t *o = viewport_get_configuration(vv, filename);
veejay_msg(0,"Configuration saved %dx%d, have %dx%d",
c->saved_w, c->saved_h,v->saved_w,v->saved_h );
/*
if( c->saved_w != v->saved_w || c->saved_h != v->saved_h ) {
float sx=1.0f;
float sy=1.0f;
@@ -1487,8 +1499,10 @@ int viewport_reconfigure_from_config(void *vv, void *vc)
o->y0 = c->y0 * sy;
o->w0 = c->w0 * sx;
o->h0 = c->h0 * sy;
}
veejay_msg(VEEJAY_MSG_WARNING, "Correcting geometry for current setup");
}
*/
// Clear map
const int len = v->w * v->h;
@@ -1538,7 +1552,7 @@ int viewport_reconfigure_from_config(void *vv, void *vc)
v->user_ui = 0;
viewport_process( v );
veejay_msg(VEEJAY_MSG_DEBUG,
"Reconfigured calibration for %dx%d to (1)=%fx%f\t(2)=%fx%f\t(3)=%fx%f\t(4)=%fx%f\t%dx%d+%dx%d",
"Reconfigured calibration for %dx%d to (1)=%fx%f\t(2)=%fx%f\t(3)=%fx%f\t(4)=%fx%f\t%fx%f+%fx%f",
v->w,v->h,v->x1,v->y1,v->x2,v->y2,v->x3,v->y3,v->x4,v->y4,v->x0,v->y0,v->w0,v->h0);
}
@@ -1598,10 +1612,10 @@ void viewport_update_from(void *vv, void *bb)
}
void *viewport_init(int x0, int y0, int w0, int h0, int w, int h, int iw, int ih,const char *homedir, int *enable, int *frontback, int mode )
void *viewport_init(int x0, int y0, int w0, int h0, int w, int h, int iw, int ih,char *filename, int *enable, int *frontback, int mode )
{
//@ try to load last saved settings
viewport_config_t *vc = viewport_load_settings( homedir,mode );
viewport_config_t *vc = viewport_load_settings( filename );
if(vc) {
float sx = (float) w / (float) vc->saved_w;
float sy = (float) h / (float) vc->saved_h;
@@ -1632,7 +1646,6 @@ void *viewport_init(int x0, int y0, int w0, int h0, int w, int h, int iw, int ih
v->w = w;
v->h = h;
v->marker_size = 4;
v->homedir = strdup(homedir);
v->disable = 0;
int res;
@@ -1683,7 +1696,6 @@ void *viewport_init(int x0, int y0, int w0, int h0, int w, int h, int iw, int ih
if(! res )
{
veejay_msg(VEEJAY_MSG_ERROR, "Invalid point locations");
free(v->homedir);
free(v->ui->buf[0]);
free(v->ui);
free(v);
@@ -1693,12 +1705,20 @@ void *viewport_init(int x0, int y0, int w0, int h0, int w, int h, int iw, int ih
// Allocate memory for map
v->map = (int32_t*) vj_calloc(sizeof(int32_t) * RUP8(v->w * v->h + (v->w*2)) );
if(!v->map) {
free(v->ui->buf[0]);
free(v->ui);
free(v);
free(vc);
veejay_msg(VEEJAY_MSG_ERROR, "Memory allocation error");
return NULL;
}
const int len = v->w * v->h;
const int eln = len + ( v->w * 2 );
int k;
for( k = len ; k < eln ; k ++ )
v->map[k] = len+1;
veejay_memset( v->map, len+1, eln );
// calculate initial view
viewport_process( v );
@@ -1741,7 +1761,6 @@ void *viewport_clone(void *vv, int new_w, int new_h )
q->ui->buf[0] = vj_calloc(sizeof(uint8_t) * RUP8(new_w * new_h) );
q->ui->scale = 1.0f;
q->ui->scaler = viewport_init_swscaler(q->ui,new_w,new_h);
q->homedir = strdup(v->homedir);
q->disable = 0;
int res = viewport_configure( q, q->x1, q->y1,
@@ -1760,7 +1779,6 @@ void *viewport_clone(void *vv, int new_w, int new_h )
if(! res )
{
veejay_msg(VEEJAY_MSG_ERROR, "Invalid point locations");
free(q->homedir);
free(q->ui->buf[0]);
free(q->ui);
free(q);
@@ -1768,7 +1786,7 @@ void *viewport_clone(void *vv, int new_w, int new_h )
}
// Allocate memory for map
q->map = (int32_t*) vj_calloc(sizeof(int32_t) * RUP8(q->w * q->h + (q->w*2)) );
q->map = (int32_t*) vj_malloc(sizeof(int32_t) * RUP8(q->w * q->h + (q->w*2)) );
const int len = q->w * q->h;
const int eln = len + ( q->w * 2 );
@@ -1801,23 +1819,26 @@ char *viewport_get_help(void *data)
return v->help;
}
static viewport_config_t *viewport_load_settings( const char *dir, int mode )
static viewport_config_t *viewport_load_settings( char *path )
{
viewport_config_t *vc = vj_calloc(sizeof(viewport_config_t));
char path[1024];
sprintf(path, "%s/viewport.cfg", dir);
FILE *fd = fopen( path, "r" );
if(!fd)
{
free(vc);
veejay_msg(VEEJAY_MSG_WARNING, "No such file %s", path);
return NULL;
}
fseek(fd,0,SEEK_END );
unsigned int len = ftell( fd );
if( len <= 0 )
{
veejay_msg(VEEJAY_MSG_WARNING, "File %s is empty",path);
free(vc);
return NULL;
}
@@ -1874,11 +1895,9 @@ static viewport_config_t *viewport_load_settings( const char *dir, int mode )
return vc;
}
void viewport_save_settings( void *ptr, int frontback )
void viewport_save_settings( void *ptr, int frontback, char *path )
{
viewport_t *v = (viewport_t *) ptr;
char path[1024];
sprintf(path, "%s/viewport.cfg", v->homedir );
FILE *fd = fopen( path, "wb" );
@@ -1915,7 +1934,7 @@ void viewport_save_settings( void *ptr, int frontback )
fclose( fd );
veejay_msg(VEEJAY_MSG_DEBUG, "Saved viewport settings to %s", path);
veejay_msg(VEEJAY_MSG_INFO, "Saved viewport settings to %s. Press CTRL-p to enable/disable", path);
}
/*
static int viewport_locate_marker( viewport_t *v, uint8_t *img, float fx, float fy , float *dx, float *dy )
@@ -2490,7 +2509,7 @@ int viewport_finetune_coord(void *data, int screen_width, int screen_height,int
return 1;
}
int viewport_external_mouse( void *data, uint8_t *img[3], int sx, int sy, int button, int frontback, int screen_width, int screen_height )
int viewport_external_mouse( void *data, uint8_t *img[3], int sx, int sy, int button, int frontback, int screen_width, int screen_height, char *homedir, int mode, int id )
{
viewport_t *v = (viewport_t*) data;
if( sx == 0 && sy == 0 && button == 0 )
@@ -2591,7 +2610,20 @@ int viewport_external_mouse( void *data, uint8_t *img[3], int sx, int sy, int bu
if( v->user_ui == 0 )
{
viewport_save_settings(v, frontback);
char filename[1024];
switch(mode) {
case 1:
snprintf(filename,sizeof(filename), "%s/viewport-stream-%d.cfg", homedir,id );
break;
case 0:
snprintf(filename,sizeof(filename), "%s/viewport-sample-%d.cfg", homedir,id );
break;
default:
snprintf(filename,sizeof(filename),"%s/viewport.cfg", homedir);
break;
}
viewport_save_settings(v, frontback, filename);
}
}
@@ -3182,21 +3214,21 @@ void viewport_render_dynamic( void *vdata, uint8_t *in[3], uint8_t *out[3],int w
}
void *viewport_fx_init_map( int wid, int hei, int x1, int y1,
int x2, int y2, int x3, int y3, int x4, int y4)
int x2, int y2, int x3, int y3, int x4, int y4, int reverse)
{
viewport_t *v = (viewport_t*) vj_calloc(sizeof(viewport_t));
float fracx = (float) wid / 100.0f;
float fracy = (float) hei / 100.0f;
v->x1 = x1 / fracx;
v->y1 = y1 / fracy;
v->x2 = x2 / fracx;
v->y2 = y2 / fracy;
v->x3 = x3 / fracx;
v->y3 = y3 / fracy;
v->x4 = x4 / fracx;
v->y4 = y4 / fracy;
v->x1 = x1;
v->y1 = y1;
v->x2 = x2;
v->y2 = y2;
v->x3 = x3;
v->y3 = y3;
v->x4 = x4;
v->y4 = y4;
int res = viewport_configure (v,
v->x1, v->y1,
@@ -3206,7 +3238,7 @@ void *viewport_fx_init_map( int wid, int hei, int x1, int y1,
0,0,
wid,hei,
wid,hei,
0,
reverse,
0xff,
32 );
@@ -3228,10 +3260,9 @@ int viewport_get_mode( void *vv ) {
return v->user_ui;
}
void *viewport_fx_init(int type, int wid, int hei, int x, int y, int zoom, int dir)
void *viewport_fx_zoom_init(int type, int wid, int hei, int x, int y, int zoom, int dir)
{
viewport_t *v = (viewport_t*) vj_calloc(sizeof(viewport_t));
float fracx = (float) wid;
float fracy = (float) hei;
@@ -3285,141 +3316,4 @@ void *viewport_fx_init(int type, int wid, int hei, int x, int y, int zoom, int d
}
static void flxml( xmlDocPtr doc, xmlNodePtr cur, float *dst , const xmlChar *name) {
if(!xmlStrcmp(cur->name, name ) ) {
xmlChar *xmlTemp = xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
unsigned char *chTemp = UTF8toLAT1(xmlTemp);
if (chTemp) {
*dst = (float) atof( (char*)chTemp);
free(chTemp);
}
free(xmlTemp);
}
}
static void ixml( xmlDocPtr doc, xmlNodePtr cur, int *dst , const xmlChar *name) {
if(!xmlStrcmp(cur->name, name ) ) {
xmlChar *xmlTemp = xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
unsigned char *chTemp = UTF8toLAT1(xmlTemp);
if (chTemp) {
*dst = (int) atoi( (char*)chTemp);
free(chTemp);
}
free(xmlTemp);
}
}
void *viewport_load_xml(xmlDocPtr doc, xmlNodePtr cur, void *vv )
{
viewport_t *vc = (viewport_t*) vv;
if(!vc || !cur) return NULL;
viewport_config_t *c = (viewport_config_t*) vj_calloc(sizeof(viewport_config_t));
//effectIndex++;
while( cur != NULL ) {
flxml( doc,cur,&(c->x1),(const xmlChar*) "x1" );
flxml( doc,cur,&(c->x2),(const xmlChar*)"x2" );
flxml( doc,cur,&(c->y1),(const xmlChar*)"y1" );
flxml( doc,cur,&(c->y2),(const xmlChar*)"y2" );
flxml( doc,cur,&(c->x3),(const xmlChar*)"x3" );
flxml( doc,cur,&(c->x4),(const xmlChar*)"x4" );
flxml( doc,cur,&(c->y3),(const xmlChar*)"y3" );
flxml( doc,cur,&(c->y4),(const xmlChar*)"y4" );
ixml( doc,cur,&(c->x0),(const xmlChar*)"x0" );
ixml( doc,cur,&(c->w0),(const xmlChar*)"w0" );
ixml( doc,cur,&(c->y0),(const xmlChar*)"y0" );
ixml( doc,cur,&(c->h0),(const xmlChar*)"h0" );
ixml( doc,cur,&(c->saved_w),(const xmlChar*)"saved_w" );
ixml( doc,cur,&(c->saved_h),(const xmlChar*)"saved_h" );
ixml( doc,cur,&(c->reverse),(const xmlChar*)"reverse" );
ixml( doc,cur,&(c->grid_color),(const xmlChar*)"grid_color" );
ixml( doc,cur,&(c->grid_resolution),(const xmlChar*)"grid_resolution" );
ixml( doc,cur,&(c->composite_mode),(const xmlChar*) "compositemode");
ixml( doc,cur,&(c->colormode),(const xmlChar*) "colormode");
ixml( doc,cur,&(c->marker_size),(const xmlChar*) "markersize");
ixml( doc,cur,&(c->grid_mode),(const xmlChar*) "gridmode");
cur = cur->next;
}
return (void*) c;
}
void viewport_save_xml(xmlNodePtr parent,void *vv)
{
viewport_config_t *vc = (viewport_config_t*) vv;
if(!vc) return;
xmlNodePtr node = xmlNewChild(parent, NULL,
(const xmlChar*) "calibration",
NULL );
char buffer[100];
sprintf(buffer, "%f", vc->x1);
xmlNewChild(node, NULL, (const xmlChar *) "x1",
(const xmlChar *) buffer);
sprintf(buffer, "%f", vc->y1);
xmlNewChild(node, NULL, (const xmlChar *) "y1",
(const xmlChar *) buffer);
sprintf(buffer, "%f", vc->x2);
xmlNewChild(node, NULL, (const xmlChar *) "x2",
(const xmlChar *) buffer);
sprintf(buffer, "%f", vc->y2);
xmlNewChild(node, NULL, (const xmlChar *) "y2",
(const xmlChar *) buffer);
sprintf(buffer, "%f", vc->x3);
xmlNewChild(node, NULL, (const xmlChar *) "x3",
(const xmlChar *) buffer);
sprintf(buffer, "%f", vc->y3);
xmlNewChild(node, NULL, (const xmlChar *) "y3",
(const xmlChar *) buffer);
sprintf(buffer, "%f", vc->x4);
xmlNewChild(node, NULL, (const xmlChar *) "x4",
(const xmlChar *) buffer);
sprintf(buffer, "%f", vc->y4);
xmlNewChild(node, NULL, (const xmlChar *) "y4",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->saved_w);
xmlNewChild(node, NULL, (const xmlChar *) "saved_w",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->saved_h);
xmlNewChild(node, NULL, (const xmlChar *) "saved_h",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->reverse);
xmlNewChild(node, NULL, (const xmlChar *) "reverse",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->grid_color);
xmlNewChild(node, NULL, (const xmlChar *) "grid_color",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->grid_resolution);
xmlNewChild(node, NULL, (const xmlChar *) "grid_resolution",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->x0);
xmlNewChild(node, NULL, (const xmlChar *) "x0",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->y0);
xmlNewChild(node, NULL, (const xmlChar *) "y0",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->w0);
xmlNewChild(node, NULL, (const xmlChar *) "w0",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->h0);
xmlNewChild(node, NULL, (const xmlChar *) "h0",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->colormode);
xmlNewChild(node, NULL, (const xmlChar *) "colormode",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->composite_mode);
xmlNewChild(node, NULL, (const xmlChar *) "compositemode",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->marker_size);
xmlNewChild(node, NULL, (const xmlChar *) "markersize",
(const xmlChar *) buffer);
sprintf(buffer, "%d", vc->grid_mode);
xmlNewChild(node, NULL, (const xmlChar *) "gridmode",
(const xmlChar *) buffer);
}

View File

@@ -24,7 +24,8 @@
#define VP_QUADZOOM 1
void viewport_process_dynamic( void *data, uint8_t *in[3], uint8_t *out[3] );
void viewport_process_dynamic_map( void *data, uint8_t *in[3], uint8_t *out[3], uint32_t *map, int feather );
void *viewport_fx_init( int type, int wid, int hei, int x, int y, int zoom, int dir );
void *viewport_fx_init_map( int wid, int hei, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int reverse);
void *viewport_fx_zoom_init(int type, int wid, int hei, int x, int y, int zoom, int dir);
void viewport_update_from(void *vv, void *bb);
void *viewport_clone(void *iv, int new_w, int new_h );
void viewport_set_ui(void *vv, int value );
@@ -32,11 +33,11 @@ void viewport_set_ui(void *vv, int value );
int viewport_active( void *data );
int viewport_render_ssm(void *vdata );
void viewport_render( void *data, uint8_t *in[3], uint8_t *out[3], int width, int height,int uv_len );
int viewport_external_mouse( void *data, uint8_t *in[3],int sx, int sy, int button, int frontback, int w, int h );
int viewport_external_mouse( void *data, uint8_t *in[3],int sx, int sy, int button, int frontback, int w, int h, char *homedir, int mode, int id );
char *viewport_get_help(void *data);
char *viewport_get_my_status(void *v);
void viewport_clone_parameters( void *src , void *dst );
void *viewport_init(int x0, int y0, int w0, int h0, int w, int h,int iw, int ih, const char *dir, int *enable, int *frontback, int mode);
void *viewport_init(int x0, int y0, int w0, int h0, int w, int h,int iw, int ih, char *dir, int *enable, int *frontback, int mode);
int viewport_active( void *data );
void viewport_destroy( void *data );
void vewport_draw_interface_color( void *vdata, uint8_t *img[3] );
@@ -52,17 +53,17 @@ int viewport_event_set_projection(void *data, float x, float y, int num, int fb)
void viewport_push_frame(void *data, int w, int h, uint8_t *Y, uint8_t *U, uint8_t *V );
void viewport_reconfigure(void *vv);
int viewport_get_mode(void *vv);
int viewport_reconfigure_from_config(void *vv, void *vc);
int viewport_reconfigure_from_config(void *vv, void *vc, char *filename);
void viewport_set_composite(void *vc, int mode, int colormode);
int viewport_get_color_mode_from_config(void *vc);
int viewport_get_composite_mode_from_config(void *vc);
void *viewport_get_configuration(void *vv );
void *viewport_get_configuration(void *vv, char *filename );
int viewport_finetune_coord(void *data, int screen_width, int screen_height,int inc_x,int inc_y);
void viewport_set_initial_active( void *vv, int status );
int viewport_get_initial_active( void *vv );
char *viewport_get_my_help(void *vv);
int viewport_finetune_coord(void *data, int screen_width, int screen_height,int inc_x, int inc_y);
void viewport_save_settings( void *v, int frontback );
void viewport_save_settings( void *v, int frontback, char *path );
void viewport_produce_full_img( void *vdata, uint8_t *img[3], uint8_t *out_img[3] );
#endif