void compositor_init_svg_animation(GF_Compositor *compositor, GF_Node *node) { SVGlinkStack *stack; GF_SAFEALLOC(stack, SVGlinkStack); gf_node_set_private(node, stack); gf_node_set_callback_function(node, svg_traverse_animation); gf_smil_set_evaluation_callback(node, svg_animation_smil_evaluate); /*force first processing of xlink-href*/ gf_node_dirty_set(node, GF_SG_SVG_XLINK_HREF_DIRTY, 0); }
void compositor_init_svg_updates(GF_Compositor *compositor, GF_Node *node) { SVG_updates_stack *stack; GF_SAFEALLOC(stack, SVG_updates_stack) /*force first processing of xlink-href*/ gf_node_dirty_set(node, GF_SG_SVG_XLINK_HREF_DIRTY, GF_FALSE); gf_smil_set_evaluation_callback(node, svg_updates_smil_evaluate); gf_node_set_private(node, stack); gf_node_set_callback_function(node, svg_traverse_updates); stack->clipEnd = -1; }
void compositor_init_svg_audio(GF_Compositor *compositor, GF_Node *node, Bool slaved_timing) { SVG_audio_stack *stack; GF_SAFEALLOC(stack, SVG_audio_stack) gf_sc_audio_setup(&stack->input, compositor, node); /*force first processing of xlink-href*/ gf_node_dirty_set(node, GF_SG_SVG_XLINK_HREF_DIRTY, GF_FALSE); if (!slaved_timing) gf_smil_set_evaluation_callback(node, svg_audio_smil_evaluate); gf_node_set_private(node, stack); gf_node_set_callback_function(node, svg_traverse_audio); }
void compositor_init_svg_video(GF_Compositor *compositor, GF_Node *node) { SVG_video_stack *stack; GF_SAFEALLOC(stack, SVG_video_stack) stack->graph = drawable_new(); stack->graph->flags = DRAWABLE_USE_TRAVERSE_DRAW; stack->graph->node = node; gf_sc_texture_setup(&stack->txh, compositor, node); stack->txh.update_texture_fcnt = SVG_Update_video; stack->txh.flags = GF_SR_TEXTURE_SVG; /*force first processing of xlink-href*/ gf_node_dirty_set(node, GF_SG_SVG_XLINK_HREF_DIRTY, GF_FALSE); gf_smil_set_evaluation_callback(node, svg_video_smil_evaluate); gf_node_set_private(node, stack); gf_node_set_callback_function(node, svg_traverse_video); }