Line data Source code
1 : /*
2 : * GPAC - Multimedia Framework C SDK
3 : *
4 : * Authors: Jean Le Feuvre
5 : * Copyright (c) Telecom ParisTech 2000-2012
6 : * All rights reserved
7 : *
8 : * This file is part of GPAC / Scene Compositor sub-project
9 : *
10 : * GPAC is free software; you can redistribute it and/or modify
11 : * it under the terms of the GNU Lesser General Public License as published by
12 : * the Free Software Foundation; either version 2, or (at your option)
13 : * any later version.
14 : *
15 : * GPAC is distributed in the hope that it will be useful,
16 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : * GNU Lesser General Public License for more details.
19 : *
20 : * You should have received a copy of the GNU Lesser General Public
21 : * License along with this library; see the file COPYING. If not, write to
22 : * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23 : *
24 : */
25 :
26 : #include "nodes_stacks.h"
27 :
28 : #include <gpac/nodes_mpeg4.h>
29 : #include <gpac/nodes_x3d.h>
30 :
31 :
32 :
33 6 : void compositor_init_afx_node(GF_Compositor *compositor, GF_Node *node, MFURL *url)
34 : {
35 6 : GF_MediaObject *mo = gf_mo_register(node, url, GF_FALSE, GF_FALSE);
36 6 : if (!mo) {
37 6 : GF_LOG(GF_LOG_WARNING, GF_LOG_COMPOSE, ("[Compositor] AFX Decoder not found for node %s - node may not be completely/correctly rendered\n", gf_node_get_class_name(node)));
38 : }
39 : #ifndef GPAC_DISABLE_VRML
40 6 : if (gf_node_get_tag(node)==TAG_MPEG4_BitWrapper) {
41 6 : compositor_init_bitwrapper(compositor, node);
42 : }
43 : #endif
44 6 : }
45 :
46 31188 : void gf_sc_on_node_init(GF_Compositor *compositor, GF_Node *node)
47 : {
48 31188 : switch (gf_node_get_tag(node)) {
49 : #ifndef GPAC_DISABLE_VRML
50 217 : case TAG_MPEG4_AnimationStream:
51 217 : compositor_init_animationstream(compositor, node);
52 217 : break;
53 5 : case TAG_MPEG4_AudioBuffer:
54 5 : compositor_init_audiobuffer(compositor, node);
55 5 : break;
56 16 : case TAG_MPEG4_AudioSource:
57 16 : compositor_init_audiosource(compositor, node);
58 16 : break;
59 218 : case TAG_MPEG4_AudioClip:
60 : #ifndef GPAC_DISABLE_X3D
61 : case TAG_X3D_AudioClip:
62 : #endif
63 218 : compositor_init_audioclip(compositor, node);
64 218 : break;
65 536 : case TAG_MPEG4_TimeSensor:
66 : #ifndef GPAC_DISABLE_X3D
67 : case TAG_X3D_TimeSensor:
68 : #endif
69 536 : compositor_init_timesensor(compositor, node);
70 536 : break;
71 107 : case TAG_MPEG4_ImageTexture:
72 : #ifndef GPAC_DISABLE_X3D
73 : case TAG_X3D_ImageTexture:
74 : #endif
75 : case TAG_MPEG4_CacheTexture:
76 107 : compositor_init_imagetexture(compositor, node);
77 107 : break;
78 :
79 10 : case TAG_MPEG4_PixelTexture:
80 : #ifndef GPAC_DISABLE_X3D
81 : case TAG_X3D_PixelTexture:
82 : #endif
83 10 : compositor_init_pixeltexture(compositor, node);
84 10 : break;
85 251 : case TAG_MPEG4_MovieTexture:
86 : #ifndef GPAC_DISABLE_X3D
87 : case TAG_X3D_MovieTexture:
88 : #endif
89 251 : compositor_init_movietexture(compositor, node);
90 251 : break;
91 :
92 622 : case TAG_MPEG4_Background2D:
93 622 : compositor_init_background2d(compositor, node);
94 622 : break;
95 272 : case TAG_MPEG4_Bitmap:
96 272 : compositor_init_bitmap(compositor, node);
97 272 : break;
98 430 : case TAG_MPEG4_ColorTransform:
99 430 : compositor_init_colortransform(compositor, node);
100 430 : break;
101 904 : case TAG_MPEG4_Circle:
102 904 : compositor_init_circle(compositor, node);
103 904 : break;
104 567 : case TAG_MPEG4_Curve2D:
105 567 : compositor_init_curve2d(compositor, node);
106 567 : break;
107 12 : case TAG_MPEG4_XCurve2D:
108 12 : compositor_init_curve2d(compositor, node);
109 12 : break;
110 4 : case TAG_MPEG4_Ellipse:
111 4 : compositor_init_ellipse(compositor, node);
112 4 : break;
113 672 : case TAG_MPEG4_OrderedGroup:
114 672 : compositor_init_orderedgroup(compositor, node);
115 672 : break;
116 18 : case TAG_MPEG4_PointSet2D:
117 18 : compositor_init_pointset2d(compositor, node);
118 18 : break;
119 4753 : case TAG_MPEG4_Transform2D:
120 4753 : compositor_init_transform2d(compositor, node);
121 4753 : break;
122 869 : case TAG_MPEG4_TransformMatrix2D:
123 869 : compositor_init_transformmatrix2d(compositor, node);
124 869 : break;
125 540 : case TAG_MPEG4_LineProperties:
126 540 : compositor_init_lineprops(compositor, node);
127 540 : break;
128 443 : case TAG_MPEG4_XLineProperties:
129 443 : compositor_init_lineprops(compositor, node);
130 443 : break;
131 51 : case TAG_MPEG4_Viewport:
132 51 : compositor_init_viewport(compositor, node);
133 51 : break;
134 :
135 49 : case TAG_MPEG4_IndexedLineSet2D:
136 49 : compositor_init_indexed_line_set2d(compositor, node);
137 49 : break;
138 93 : case TAG_MPEG4_IndexedFaceSet2D:
139 93 : compositor_init_indexed_face_set2d(compositor, node);
140 93 : break;
141 :
142 228 : case TAG_MPEG4_Sound2D:
143 228 : compositor_init_sound2d(compositor, node);
144 228 : break;
145 :
146 74 : case TAG_MPEG4_LinearGradient:
147 74 : compositor_init_linear_gradient(compositor, node);
148 74 : break;
149 434 : case TAG_MPEG4_RadialGradient:
150 434 : compositor_init_radial_gradient(compositor, node);
151 434 : break;
152 :
153 30 : case TAG_MPEG4_CompositeTexture2D:
154 30 : compositor_init_compositetexture2d(compositor, node);
155 30 : break;
156 0 : case TAG_MPEG4_MatteTexture:
157 0 : compositor_init_mattetexture(compositor, node);
158 0 : break;
159 :
160 48 : case TAG_MPEG4_Form:
161 48 : compositor_init_form(compositor, node);
162 48 : break;
163 384 : case TAG_MPEG4_Layer2D:
164 384 : compositor_init_layer2d(compositor, node);
165 384 : break;
166 170 : case TAG_MPEG4_Layout:
167 170 : compositor_init_layout(compositor, node);
168 170 : break;
169 8 : case TAG_MPEG4_PathLayout:
170 8 : compositor_init_path_layout(compositor, node);
171 8 : break;
172 :
173 :
174 : /*sensors*/
175 6 : case TAG_MPEG4_Anchor:
176 : #ifndef GPAC_DISABLE_X3D
177 : case TAG_X3D_Anchor:
178 : #endif
179 6 : compositor_init_anchor(compositor, node);
180 6 : break;
181 9 : case TAG_MPEG4_DiscSensor:
182 9 : compositor_init_disc_sensor(compositor, node);
183 9 : break;
184 39 : case TAG_MPEG4_PlaneSensor2D:
185 39 : compositor_init_plane_sensor2d(compositor, node);
186 39 : break;
187 8 : case TAG_MPEG4_ProximitySensor2D:
188 8 : compositor_init_proximity_sensor2d(compositor, node);
189 8 : break;
190 1382 : case TAG_MPEG4_TouchSensor:
191 : #ifndef GPAC_DISABLE_X3D
192 : case TAG_X3D_TouchSensor:
193 : #endif
194 1382 : compositor_init_touch_sensor(compositor, node);
195 1382 : break;
196 :
197 135 : case TAG_MPEG4_Group:
198 : #ifndef GPAC_DISABLE_X3D
199 : case TAG_X3D_Group:
200 : #endif
201 135 : compositor_init_group(compositor, node);
202 135 : break;
203 391 : case TAG_MPEG4_Rectangle:
204 : #ifndef GPAC_DISABLE_X3D
205 : case TAG_X3D_Rectangle2D:
206 : #endif
207 391 : compositor_init_rectangle(compositor, node);
208 391 : break;
209 4657 : case TAG_MPEG4_Shape:
210 : #ifndef GPAC_DISABLE_X3D
211 : case TAG_X3D_Shape:
212 : #endif
213 4657 : compositor_init_shape(compositor, node);
214 4657 : break;
215 431 : case TAG_MPEG4_Switch:
216 : #ifndef GPAC_DISABLE_X3D
217 : case TAG_X3D_Switch:
218 : #endif
219 431 : compositor_init_switch(compositor, node);
220 431 : break;
221 :
222 1005 : case TAG_MPEG4_Text:
223 : #ifndef GPAC_DISABLE_X3D
224 : case TAG_X3D_Text:
225 : #endif
226 1005 : compositor_init_text(compositor, node);
227 1005 : break;
228 :
229 : #ifndef GPAC_DISABLE_3D
230 11 : case TAG_MPEG4_Background:
231 : #ifndef GPAC_DISABLE_X3D
232 : case TAG_X3D_Background:
233 : #endif
234 11 : compositor_init_background(compositor, node);
235 11 : break;
236 7 : case TAG_MPEG4_CylinderSensor:
237 : #ifndef GPAC_DISABLE_X3D
238 : case TAG_X3D_CylinderSensor:
239 : #endif
240 7 : compositor_init_cylinder_sensor(compositor, node);
241 7 : break;
242 7 : case TAG_MPEG4_PlaneSensor:
243 : #ifndef GPAC_DISABLE_X3D
244 : case TAG_X3D_PlaneSensor:
245 : #endif
246 7 : compositor_init_plane_sensor(compositor, node);
247 7 : break;
248 1 : case TAG_MPEG4_ProximitySensor:
249 : #ifndef GPAC_DISABLE_X3D
250 : case TAG_X3D_ProximitySensor:
251 : #endif
252 1 : compositor_init_proximity_sensor(compositor, node);
253 1 : break;
254 7 : case TAG_MPEG4_SphereSensor:
255 : #ifndef GPAC_DISABLE_X3D
256 : case TAG_X3D_SphereSensor:
257 : #endif
258 7 : compositor_init_sphere_sensor(compositor, node);
259 7 : break;
260 7 : case TAG_MPEG4_VisibilitySensor:
261 : #ifndef GPAC_DISABLE_X3D
262 : case TAG_X3D_VisibilitySensor:
263 : #endif
264 7 : compositor_init_visibility_sensor(compositor, node);
265 7 : break;
266 55 : case TAG_MPEG4_Box:
267 : #ifndef GPAC_DISABLE_X3D
268 : case TAG_X3D_Box:
269 : #endif
270 55 : compositor_init_box(compositor, node);
271 55 : break;
272 12 : case TAG_MPEG4_Cone:
273 : #ifndef GPAC_DISABLE_X3D
274 : case TAG_X3D_Cone:
275 : #endif
276 12 : compositor_init_cone(compositor, node);
277 12 : break;
278 21 : case TAG_MPEG4_Cylinder:
279 : #ifndef GPAC_DISABLE_X3D
280 : case TAG_X3D_Cylinder:
281 : #endif
282 21 : compositor_init_cylinder(compositor, node);
283 21 : break;
284 7 : case TAG_MPEG4_ElevationGrid:
285 : #ifndef GPAC_DISABLE_X3D
286 : case TAG_X3D_ElevationGrid:
287 : #endif
288 7 : compositor_init_elevation_grid(compositor, node);
289 7 : break;
290 7 : case TAG_MPEG4_Extrusion:
291 : #ifndef GPAC_DISABLE_X3D
292 : case TAG_X3D_Extrusion:
293 : #endif
294 7 : compositor_init_extrusion(compositor, node);
295 7 : break;
296 33 : case TAG_MPEG4_IndexedFaceSet:
297 : #ifndef GPAC_DISABLE_X3D
298 : case TAG_X3D_IndexedFaceSet:
299 : #endif
300 33 : compositor_init_ifs(compositor, node);
301 33 : break;
302 8 : case TAG_MPEG4_IndexedLineSet:
303 : #ifndef GPAC_DISABLE_X3D
304 : case TAG_X3D_IndexedLineSet:
305 : #endif
306 8 : compositor_init_ils(compositor, node);
307 8 : break;
308 7 : case TAG_MPEG4_PointSet:
309 : #ifndef GPAC_DISABLE_X3D
310 : case TAG_X3D_PointSet:
311 : #endif
312 7 : compositor_init_point_set(compositor, node);
313 7 : break;
314 19 : case TAG_MPEG4_Sphere:
315 : #ifndef GPAC_DISABLE_X3D
316 : case TAG_X3D_Sphere:
317 : #endif
318 19 : compositor_init_sphere(compositor, node);
319 19 : break;
320 3 : case TAG_MPEG4_Billboard:
321 : #ifndef GPAC_DISABLE_X3D
322 : case TAG_X3D_Billboard:
323 : #endif
324 3 : compositor_init_billboard(compositor, node);
325 3 : break;
326 8 : case TAG_MPEG4_Collision:
327 : #ifndef GPAC_DISABLE_X3D
328 : case TAG_X3D_Collision:
329 : #endif
330 8 : compositor_init_collision(compositor, node);
331 8 : break;
332 1 : case TAG_MPEG4_LOD:
333 : #ifndef GPAC_DISABLE_X3D
334 : case TAG_X3D_LOD:
335 : #endif
336 1 : compositor_init_lod(compositor, node);
337 1 : break;
338 184 : case TAG_MPEG4_Transform:
339 : #ifndef GPAC_DISABLE_X3D
340 : case TAG_X3D_Transform:
341 : #endif
342 184 : compositor_init_transform(compositor, node);
343 184 : break;
344 2 : case TAG_MPEG4_Sound:
345 : #ifndef GPAC_DISABLE_X3D
346 : case TAG_X3D_Sound:
347 : #endif
348 2 : compositor_init_sound(compositor, node);
349 2 : break;
350 61 : case TAG_MPEG4_Viewpoint:
351 : #ifndef GPAC_DISABLE_X3D
352 : case TAG_X3D_Viewpoint:
353 : #endif
354 61 : compositor_init_viewpoint(compositor, node);
355 61 : break;
356 28 : case TAG_MPEG4_NavigationInfo:
357 : #ifndef GPAC_DISABLE_X3D
358 : case TAG_X3D_NavigationInfo:
359 : #endif
360 28 : compositor_init_navigation_info(compositor, node);
361 28 : break;
362 4 : case TAG_MPEG4_Fog:
363 : #ifndef GPAC_DISABLE_X3D
364 : case TAG_X3D_Fog:
365 : #endif
366 4 : compositor_init_fog(compositor, node);
367 4 : break;
368 8 : case TAG_MPEG4_DirectionalLight:
369 : #ifndef GPAC_DISABLE_X3D
370 : case TAG_X3D_DirectionalLight:
371 : #endif
372 8 : compositor_init_directional_light(compositor, node);
373 8 : break;
374 1 : case TAG_MPEG4_PointLight:
375 : #ifndef GPAC_DISABLE_X3D
376 : case TAG_X3D_PointLight:
377 : #endif
378 1 : compositor_init_point_light(compositor, node);
379 1 : break;
380 1 : case TAG_MPEG4_SpotLight:
381 : #ifndef GPAC_DISABLE_X3D
382 : case TAG_X3D_SpotLight:
383 : #endif
384 1 : compositor_init_spot_light(compositor, node);
385 1 : break;
386 :
387 7 : case TAG_MPEG4_NonLinearDeformer:
388 7 : compositor_init_non_linear_deformer(compositor, node);
389 7 : break;
390 :
391 15 : case TAG_MPEG4_Layer3D:
392 15 : compositor_init_layer3d(compositor, node);
393 15 : break;
394 2 : case TAG_MPEG4_CompositeTexture3D:
395 2 : compositor_init_compositetexture3d(compositor, node);
396 2 : break;
397 :
398 9 : case TAG_MPEG4_EnvironmentTest:
399 9 : compositor_init_envtest(compositor, node);
400 9 : break;
401 : #endif
402 :
403 :
404 : /*X3D nodes*/
405 : #ifndef GPAC_DISABLE_X3D
406 1 : case TAG_X3D_StaticGroup:
407 1 : compositor_init_static_group(compositor, node);
408 1 : break;
409 1 : case TAG_X3D_Disk2D:
410 1 : compositor_init_disk2d(compositor, node);
411 1 : break;
412 2 : case TAG_X3D_Arc2D:
413 : case TAG_X3D_ArcClose2D:
414 2 : compositor_init_arc2d(compositor, node);
415 2 : break;
416 1 : case TAG_X3D_Polyline2D:
417 1 : compositor_init_polyline2d(compositor, node);
418 1 : break;
419 1 : case TAG_X3D_TriangleSet2D:
420 1 : compositor_init_triangle_set2d(compositor, node);
421 1 : break;
422 :
423 : #ifndef GPAC_DISABLE_3D
424 1 : case TAG_X3D_Polypoint2D:
425 1 : compositor_init_polypoint2d(compositor, node);
426 1 : break;
427 1 : case TAG_X3D_LineSet:
428 1 : compositor_init_lineset(compositor, node);
429 1 : break;
430 1 : case TAG_X3D_TriangleSet:
431 1 : compositor_init_triangle_set(compositor, node);
432 1 : break;
433 1 : case TAG_X3D_TriangleStripSet:
434 1 : compositor_init_triangle_strip_set(compositor, node);
435 1 : break;
436 1 : case TAG_X3D_TriangleFanSet:
437 1 : compositor_init_triangle_fan_set(compositor, node);
438 1 : break;
439 1 : case TAG_X3D_IndexedTriangleFanSet:
440 1 : compositor_init_indexed_triangle_fan_set(compositor, node);
441 1 : break;
442 1 : case TAG_X3D_IndexedTriangleStripSet:
443 1 : compositor_init_indexed_triangle_strip_set(compositor, node);
444 1 : break;
445 1 : case TAG_X3D_IndexedTriangleSet:
446 1 : compositor_init_indexed_triangle_set(compositor, node);
447 1 : break;
448 : #endif
449 :
450 : #endif /*GPAC_DISABLE_X3D*/
451 :
452 359 : case TAG_ProtoNode:
453 359 : gf_sc_init_hardcoded_proto(compositor, node);
454 359 : break;
455 :
456 0 : case TAG_MPEG4_SBVCAnimation:
457 0 : compositor_init_afx_node(compositor, node, & ((M_SBVCAnimation *)node)->url);
458 0 : break;
459 6 : case TAG_MPEG4_BitWrapper:
460 6 : compositor_init_afx_node(compositor, node, & ((M_BitWrapper *)node)->url);
461 6 : break;
462 :
463 : #endif /*GPAC_DISABLE_VRML*/
464 :
465 : #ifndef GPAC_DISABLE_SVG
466 : /* SVG Part */
467 51 : case TAG_SVG_svg:
468 51 : compositor_init_svg_svg(compositor, node);
469 51 : break;
470 866 : case TAG_SVG_g:
471 866 : compositor_init_svg_g(compositor, node);
472 866 : break;
473 20 : case TAG_SVG_switch:
474 20 : compositor_init_svg_switch(compositor, node);
475 20 : break;
476 75 : case TAG_SVG_rect:
477 75 : compositor_init_svg_rect(compositor, node);
478 75 : break;
479 774 : case TAG_SVG_path:
480 774 : compositor_init_svg_path(compositor, node);
481 774 : break;
482 23 : case TAG_SVG_circle:
483 23 : compositor_init_svg_circle(compositor, node);
484 23 : break;
485 26 : case TAG_SVG_ellipse:
486 26 : compositor_init_svg_ellipse(compositor, node);
487 26 : break;
488 19 : case TAG_SVG_line:
489 19 : compositor_init_svg_line(compositor, node);
490 19 : break;
491 12 : case TAG_SVG_polyline:
492 12 : compositor_init_svg_polyline(compositor, node);
493 12 : break;
494 31 : case TAG_SVG_polygon:
495 31 : compositor_init_svg_polygon(compositor, node);
496 31 : break;
497 5 : case TAG_SVG_a:
498 5 : compositor_init_svg_a(compositor, node);
499 5 : break;
500 :
501 3 : case TAG_SVG_linearGradient:
502 3 : compositor_init_svg_linearGradient(compositor, node);
503 3 : break;
504 1 : case TAG_SVG_radialGradient:
505 1 : compositor_init_svg_radialGradient(compositor, node);
506 1 : break;
507 3 : case TAG_SVG_solidColor:
508 3 : compositor_init_svg_solidColor(compositor, node);
509 3 : break;
510 7 : case TAG_SVG_stop:
511 7 : compositor_init_svg_stop(compositor, node);
512 7 : break;
513 :
514 202 : case TAG_SVG_text:
515 202 : compositor_init_svg_text(compositor, node);
516 202 : break;
517 56 : case TAG_SVG_tspan:
518 56 : compositor_init_svg_tspan(compositor, node);
519 56 : break;
520 17 : case TAG_SVG_textArea:
521 17 : compositor_init_svg_textarea(compositor, node);
522 17 : break;
523 17 : case TAG_SVG_tbreak:
524 17 : compositor_init_svg_tbreak(compositor, node);
525 17 : break;
526 :
527 16 : case TAG_SVG_image:
528 16 : compositor_init_svg_image(compositor, node);
529 16 : break;
530 2 : case TAG_SVG_video:
531 2 : compositor_init_svg_video(compositor, node);
532 2 : break;
533 2 : case TAG_SVG_audio:
534 2 : compositor_init_svg_audio(compositor, node, GF_FALSE);
535 2 : break;
536 :
537 : /*SVG font support - note that we initialize the font when parsing the font-face element, not the font element*/
538 2 : case TAG_SVG_font_face:
539 2 : compositor_init_svg_font(compositor, node);
540 2 : break;
541 8 : case TAG_SVG_missing_glyph:
542 : case TAG_SVG_glyph:
543 8 : compositor_init_svg_glyph(compositor, node);
544 8 : break;
545 1 : case TAG_SVG_font_face_uri:
546 1 : compositor_init_svg_font_face_uri(compositor, node);
547 1 : break;
548 :
549 23 : case TAG_SVG_use:
550 23 : compositor_init_svg_use(compositor, node);
551 23 : break;
552 7 : case TAG_SVG_animation:
553 7 : compositor_init_svg_animation(compositor, node);
554 7 : break;
555 1 : case TAG_SVG_foreignObject:
556 1 : compositor_init_svg_foreign_object(compositor, node);
557 1 : break;
558 :
559 : case TAG_SVG_filter:
560 : #ifdef GPAC_ENABLE_SVG_FILTERS
561 : compositor_init_svg_filter(compositor, node);
562 : #endif
563 : break;
564 :
565 0 : case TAG_LSR_updates:
566 0 : compositor_init_svg_updates(compositor, node);
567 0 : break;
568 : #endif
569 :
570 6897 : default:
571 6897 : GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[Compositor] node %s will not be rendered\n", gf_node_get_class_name(node)));
572 : break;
573 : }
574 31188 : }
575 :
576 : GF_EXPORT
577 78114 : void gf_sc_invalidate(GF_Compositor *compositor, GF_Node *byObj)
578 : {
579 :
580 78114 : if (!byObj) {
581 18658 : gf_sc_next_frame_state(compositor, GF_SC_DRAW_FRAME);
582 18658 : return;
583 : }
584 59456 : switch (gf_node_get_tag(byObj)) {
585 : #ifndef GPAC_DISABLE_VRML
586 8 : case TAG_MPEG4_AnimationStream:
587 8 : compositor_animationstream_modified(byObj);
588 8 : break;
589 1 : case TAG_MPEG4_AudioBuffer:
590 1 : compositor_audiobuffer_modified(byObj);
591 1 : break;
592 6 : case TAG_MPEG4_AudioSource:
593 6 : compositor_audiosource_modified(byObj);
594 6 : break;
595 4 : case TAG_MPEG4_AudioClip:
596 : #ifndef GPAC_DISABLE_X3D
597 : case TAG_X3D_AudioClip:
598 : #endif
599 4 : compositor_audioclip_modified(byObj);
600 4 : break;
601 325 : case TAG_MPEG4_TimeSensor:
602 : #ifndef GPAC_DISABLE_X3D
603 : case TAG_X3D_TimeSensor:
604 : #endif
605 325 : compositor_timesensor_modified(byObj);
606 325 : break;
607 14 : case TAG_MPEG4_ImageTexture:
608 : #ifndef GPAC_DISABLE_X3D
609 : case TAG_X3D_ImageTexture:
610 : #endif
611 : case TAG_MPEG4_CacheTexture:
612 14 : compositor_imagetexture_modified(byObj);
613 14 : break;
614 :
615 206 : case TAG_MPEG4_MovieTexture:
616 : #ifndef GPAC_DISABLE_X3D
617 : case TAG_X3D_MovieTexture:
618 : #endif
619 206 : compositor_movietexture_modified(byObj);
620 206 : break;
621 :
622 319 : case TAG_MPEG4_Background2D:
623 319 : compositor_background2d_modified(byObj);
624 319 : break;
625 : #ifndef GPAC_DISABLE_3D
626 5 : case TAG_MPEG4_Background:
627 : #ifndef GPAC_DISABLE_X3D
628 : case TAG_X3D_Background:
629 : #endif
630 5 : compositor_background_modified(byObj);
631 5 : break;
632 : #endif
633 8 : case TAG_MPEG4_Layout:
634 8 : compositor_layout_modified(compositor, byObj);
635 8 : break;
636 0 : case TAG_MPEG4_EnvironmentTest:
637 0 : compositor_envtest_modified(byObj);
638 0 : break;
639 :
640 : #endif /*GPAC_DISABLE_VRML*/
641 :
642 : #ifndef GPAC_DISABLE_SVG
643 0 : case TAG_SVG_video:
644 0 : compositor_svg_video_modified(compositor, byObj);
645 0 : break;
646 : #endif /*GPAC_DISABLE_SVG*/
647 :
648 58560 : default:
649 : /*for all nodes, invalidate parent graph - note we do that for sensors as well to force recomputing
650 : sensor list cached at grouping node level*/
651 58560 : gf_node_dirty_set(byObj, 0, GF_TRUE);
652 58560 : gf_sc_next_frame_state(compositor, GF_SC_DRAW_FRAME);
653 58560 : break;
654 : }
655 : }
|