void daemon_disconnect_frame_buffer(struct razer_daemon *daemon) { if(daemon->frame_buffer_linked_uid != 0) //unlink old render node first { struct razer_fx_render_node *old_rn = daemon_get_render_node(daemon,daemon->frame_buffer_linked_uid); old_rn->output_frame = razer_create_rgb_frame(); old_rn->output_frame_linked_uid = -1; } //if(render_node->output_frame_linked_uid == -1) // razer_free_rgb_frame(render_node->output_frame); //daemon->frame_buffer = razer_create_rgb_frame(); daemon->frame_buffer_linked_uid = -1; daemon->is_render_nodes_dirty = 1; }
void daemon_connect_frame_buffer(struct razer_daemon *daemon,struct razer_fx_render_node *render_node) { if(daemon->frame_buffer_linked_uid != 0) //unlink old render node first { struct razer_fx_render_node *old_rn = daemon_get_render_node(daemon,daemon->frame_buffer_linked_uid); old_rn->output_frame = razer_create_rgb_frame(); old_rn->output_frame_linked_uid = -1; } if(render_node->output_frame_linked_uid == -1) razer_free_rgb_frame(render_node->output_frame); render_node->output_frame = daemon->frame_buffer; daemon->frame_buffer_linked_uid = render_node->id; daemon->fps = render_node->effect->fps; daemon->is_render_nodes_dirty = 1; }
struct razer_fx_render_node *daemon_create_render_node(struct razer_daemon *daemon,struct razer_effect *effect,int input_render_node_uid,int second_input_render_node_uid,int output_render_node_uid,char *name,char *description) { struct razer_fx_render_node *render_node = (struct razer_fx_render_node*)malloc(sizeof(struct razer_fx_render_node)); render_node->daemon = daemon; //render_node->effect = effect; if(effect) render_node->effect = daemon_create_effect_instance(daemon,effect); else render_node->effect = NULL; render_node->opacity = 1.0f; if(input_render_node_uid == -1) { struct razer_rgb_frame *iframe = razer_create_rgb_frame(); render_node->input_frame = iframe; render_node->input_frame_linked_uid = -1; } else if(input_render_node_uid == 0) //set input to daemon output buffer { render_node->input_frame = daemon->frame_buffer; render_node->input_frame_linked_uid = 0; } else { struct razer_fx_render_node *rn = daemon_get_render_node(daemon,input_render_node_uid); render_node->input_frame = rn->output_frame; render_node->input_frame_linked_uid = input_render_node_uid; } if(second_input_render_node_uid == -1) { struct razer_rgb_frame *siframe = razer_create_rgb_frame(); render_node->second_input_frame = siframe; render_node->second_input_frame_linked_uid = -1; } else if(second_input_render_node_uid == 0) //set input to daemon output buffer { render_node->second_input_frame = daemon->frame_buffer; render_node->second_input_frame_linked_uid = 0; } else { struct razer_fx_render_node *srn = daemon_get_render_node(daemon,second_input_render_node_uid); render_node->second_input_frame = srn->output_frame; render_node->second_input_frame_linked_uid = second_input_render_node_uid; } if(output_render_node_uid == -1) { struct razer_rgb_frame *oframe = razer_create_rgb_frame(); render_node->output_frame = oframe; render_node->output_frame_linked_uid = -1; } else if(output_render_node_uid == 0) //set input to daemon output buffer { render_node->output_frame = daemon->frame_buffer; render_node->output_frame_linked_uid = 0; } /*else //not used { struct razer_fx_render_node *orn = daemon_get_render_node(daemon,output_render_node_uid); render_node->output_frame = orn->output_frame; render_node->output_frame_linked_uid = output_render_node_uid; }*/ render_node->description = str_Copy(description); render_node->name = str_Copy(name); //render_node->fps = daemon->fps; render_node->compose_mode = RAZER_COMPOSE_MODE_MIX; render_node->next = NULL; render_node->parent = NULL; //render_node->parameters = NULL; //render_node->parameters_num = 0; render_node->subs = list_Create(0,0); render_node->start_ticks = 0; render_node->running = 0;//set to 1 with first update render_node->limit_render_time_ms = 0; render_node->move_frame_buffer_linkage_to_next = 1; //render_node->continue_chain=1; render_node->loop_count = -1; return(render_node); }
struct razer_daemon *daemon_open(void) { //signal(SIGINT,stop); //signal(SIGKILL,stop); //signal(SIGTERM,stop); struct razer_daemon *daemon = (struct razer_daemon*)malloc(sizeof(struct razer_daemon)); daemon->chroma = NULL; daemon->running = 1; daemon->is_paused = 0; daemon->fps = 12; daemon->libs_uid = 1; daemon->libs = list_Create(0,0); daemon->effects_uid = 1; daemon->effects = list_Create(0,0); daemon->fx_render_nodes_uid = 1; daemon->fx_render_nodes = list_Create(0,0);//list of all render_nodes available daemon->is_render_nodes_dirty = 0; daemon->render_nodes = list_Create(0,0); if(!(daemon->chroma=razer_open())) { free(daemon->chroma); list_Close(daemon->libs); list_Close(daemon->fx_render_nodes); list_Close(daemon->render_nodes); list_Close(daemon->effects); free(daemon); return(NULL); } #ifdef USE_DBUS daemon->dbus = NULL; #ifdef USE_DEBUGGING printf("dbus: opened\n"); #endif if(!daemon_dbus_open(daemon)) { free(daemon->chroma); list_Close(daemon->libs); list_Close(daemon->fx_render_nodes); list_Close(daemon->render_nodes); list_Close(daemon->effects); free(daemon); return(NULL); } if(!daemon_dbus_announce(daemon)) { free(daemon->chroma); list_Close(daemon->libs); list_Close(daemon->fx_render_nodes); list_Close(daemon->render_nodes); list_Close(daemon->effects); free(daemon); return(NULL); } #endif razer_set_input_handler(daemon->chroma,daemon_input_event_handler); daemon->chroma->tag = daemon; daemon->frame_buffer = razer_create_rgb_frame(); daemon->frame_buffer_linked_uid = 0; daemon->return_render_node = NULL; //TODO remember what i wanted to achieve with this variable ... :-) razer_set_custom_mode(daemon->chroma); razer_clear_all(daemon->chroma->keys); razer_update_keys(daemon->chroma,daemon->chroma->keys); //TODO Move to configuration options (dbus race condition present) #ifdef USE_DEBUGGING struct daemon_lib *lib = daemon_load_fx_lib(daemon,"daemon/fx/pez2001_collection_debug.so"); #else //void *lib = daemon_load_fx_lib(daemon,"daemon/fx/pez2001_collection.so"); struct daemon_lib *lib = daemon_load_fx_lib(daemon,"/usr/share/razer_bcd/fx/pez2001_collection.so"); #endif if(lib) daemon_register_lib(daemon,lib); #ifdef USE_DEBUGGING struct daemon_lib *blib = daemon_load_fx_lib(daemon,"daemon/fx/pez2001_light_blast_debug.so"); #else struct daemon_lib *blib = daemon_load_fx_lib(daemon,"/usr/share/razer_bcd/fx/pez2001_light_blast.so"); #endif if(lib) daemon_register_lib(daemon,blib); //daemon->render_node = daemon_create_render_node(daemon,daemon_get_effect(daemon,2),-1,-1,0,"First Render Node","Default Render Node"); daemon->render_node = daemon_create_render_node(daemon,daemon_get_effect(daemon,11),-1,-1,0,"First Render Node","Default Render Node"); daemon_register_render_node(daemon,daemon->render_node); daemon_compute_render_nodes(daemon); daemon_connect_frame_buffer(daemon,daemon->render_node); /*daemon->render_node = daemon_create_render_node(daemon,daemon_get_effect(daemon,3),-1,-1,0,"Second Test Render Node","Additional Testing Render Node"); daemon_register_render_node(daemon,daemon->render_node); daemon_compute_render_nodes(daemon); */ // Catch SIGTERM struct sigaction sigterm_action; memset(&sigterm_action, 0, sizeof(struct sigaction)); sigterm_action.sa_handler = got_sigterm_signal; sigaction(SIGTERM, &sigterm_action, NULL); return(daemon); }