static void movietexture_activate(MovieTextureStack *stack, M_MovieTexture *mt, Double scene_time) { mt->isActive = 1; gf_node_event_out_str((GF_Node*)mt, "isActive"); if (!stack->txh.is_open) { scene_time -= mt->startTime; gf_sc_texture_play_from_to(&stack->txh, &mt->url, scene_time, -1, gf_mo_get_loop(stack->txh.stream, mt->loop), 0); } gf_mo_set_speed(stack->txh.stream, mt->speed); }
GF_EXPORT GF_Err gf_sc_texture_play(GF_TextureHandler *txh, MFURL *url) { Double offset = 0; Bool loop = 0; if (txh->compositor->term && (txh->compositor->term->play_state!=GF_STATE_PLAYING)) { offset = gf_node_get_scene_time(txh->owner); loop = /*gf_mo_get_loop(gf_mo_register(txh->owner, url, 0, 0), 0)*/ 1; } return gf_sc_texture_play_from_to(txh, url, offset, -1, loop, 0); }
static void SVG_Update_image(GF_TextureHandler *txh) { MFURL *txurl = &(((SVG_video_stack *)gf_node_get_private(txh->owner))->txurl); /*setup texture if needed*/ if (!txh->is_open && txurl->count) { gf_sc_texture_play_from_to(txh, txurl, 0, -1, GF_FALSE, GF_FALSE); } gf_sc_texture_update_frame(txh, GF_FALSE); /*URL is present but not opened - redraw till fetch*/ if (txh->stream && (!txh->tx_io || txh->needs_refresh) ) { /*mark all subtrees using this image as dirty*/ gf_node_dirty_parents(txh->owner); gf_sc_invalidate(txh->compositor, NULL); } }
static void svg_play_texture(SVG_video_stack *stack, SVGAllAttributes *atts) { SVGAllAttributes all_atts; Bool lock_scene = GF_FALSE; if (stack->txh.is_open) gf_sc_texture_stop(&stack->txh); if (!atts) { gf_svg_flatten_attributes((SVG_Element*)stack->txh.owner, &all_atts); atts = &all_atts; } if (atts->syncBehavior) lock_scene = (*atts->syncBehavior == SMIL_SYNCBEHAVIOR_LOCKED) ? GF_TRUE : GF_FALSE; gf_sc_texture_play_from_to(&stack->txh, &stack->txurl, atts->clipBegin ? (*atts->clipBegin) : 0.0, atts->clipEnd ? (*atts->clipEnd) : -1.0, GF_FALSE, lock_scene); }