#spidermonkey test for new API
if test "$has_js" = "no" ; then
-cat > $TMPCPP << EOF
+cat > $TMPC << EOF
#include <jsapi.h>
int main( void ) { JSContext *cx; jsval *rp; return JS_AddValueRoot(cx, rp); }
EOF
#try local
js_inc="$local_inc/js"
js_flags="-DXP_UNIX -I$local_inc/js"
- if $cpp -o $TMPO $TMPCPP $js_flags -L$local_lib -ljs -lpthread 2> /dev/null ; then
+ if $cc -o $TMPO $TMPC $js_flags -L$local_lib -ljs -lpthread 2> /dev/null ; then
has_js="local"
#dc added
else
if $pkg_config --exists mozilla-js 2> /dev/null ; then
js_flags=`$pkg_config --cflags mozilla-js`
js_lib_pkg=`$pkg_config --libs mozilla-js`
- if $cpp -o $TMPO $TMPCPP $js_flags $js_lib_pkg $LDFLAGS -lpthread 2> /dev/null ; then
+ if $cc -o $TMPO $TMPC $js_flags $js_lib_pkg $LDFLAGS -lpthread 2> /dev/null ; then
has_js="system"
js_lib=`$pkg_config --libs mozilla-js`
fi
if test "$has_js" = "no" ; then
js_inc="/usr/include/$i"
js_flags="-DXP_UNIX -I$js_inc"
- js_lib="-L/usr/lib/$i/ -lxul -lmozsqlite3 -lmozalloc -lnssutil3 -lnss3"
- if $cpp -o $TMPO $TMPCPP $js_flags $js_lib 2> /dev/null ; then
+ js_lib="-L/usr/lib/$i/ -lxul -lmozsqlite3 -lmozalloc -lnssutil3 -lnss3 -lnspr4 -lsmime3"
+ if $cc -o $TMPO $TMPC $js_flags $js_lib 2> /dev/null ; then
has_js="$i"
- elif $cpp -o $TMPO $TMPCPP $js_flags -lnssutil3 $js_lib -lssl3 2> /dev/null ; then
+ elif $cc -o $TMPO $TMPC $js_flags -lnssutil3 $js_lib -lssl3 2> /dev/null ; then
#firefox 11 compatibility
has_js="$i"
js_lib="-lnssutil3 $js_lib -lssl3"
#try prefix (DC)
js_inc="$prefix/include/js"
js_flags="-DXP_UNIX -I$prefix/include/js"
- if $cpp -o $TMPO $TMPCPP $js_flags -L$prefix/lib -ljs -lpthread 2> /dev/null ; then
+ if $cc -o $TMPO $TMPC $js_flags -L$prefix/lib -ljs -lpthread 2> /dev/null ; then
has_js="prefix"
#dc added end
else
- if $cpp -o $TMPO $TMPCPP $js_flags $LDFLAGS -ljs -lpthread 2> /dev/null ; then
+ if $cc -o $TMPO $TMPC $js_flags $LDFLAGS -ljs -lpthread 2> /dev/null ; then
js_inc="/usr/include"
has_js="system"
- elif $cpp -o $TMPO $TMPCPP -DXP_UNIX -I$alt_macosx_dir/include/js -L$alt_macosx_dir/lib $LDFLAGS -ljs -lpthread 2> /dev/null ; then
+ elif $cc -o $TMPO $TMPC -DXP_UNIX -I$alt_macosx_dir/include/js -L$alt_macosx_dir/lib $LDFLAGS -ljs -lpthread 2> /dev/null ; then
has_js="system"
js_flags="-DXP_UNIX -I$alt_macosx_dir/include/js"
js_lib="-L$alt_macosx_dir/lib -ljs"
#debian spidermonkey (smjs)
js_flags="-DXP_UNIX -I/usr/include/smjs"
js_inc="/usr/include/smjs"
- if $cpp -o $TMPO $TMPCPP $js_flags $LDFLAGS -lsmjs -lpthread 2> /dev/null ; then
+ if $cc -o $TMPO $TMPC $js_flags $LDFLAGS -lsmjs -lpthread 2> /dev/null ; then
has_js="system"
js_lib="-lsmjs"
else
#debian spidermonkey (mozjs)
js_flags="-DXP_UNIX -I/usr/include/mozjs"
js_inc="/usr/include/mozjs"
- if $cpp -o $TMPO $TMPCPP $js_flags $LDFLAGS -lmozjs -lpthread 2> /dev/null ; then
+ if $cc -o $TMPO $TMPC $js_flags $LDFLAGS -lmozjs -lpthread 2> /dev/null ; then
has_js="system"
js_lib="-lmozjs"
fi
else
cat > $TMPC << EOF
#include <jsapi.h>
-int main( void ) { JSContext *cx; JS_SetRuntimeThread(cx); }
+int main( void ) { JSObject *obj; JS_GetPrivate(obj); }
EOF
if $cc -o $TMPO $TMPC $js_flags $LDFLAGS $js_lib 2> /dev/null ; then
- js_flags="$js_flags"
+ js_flags="-DUSE_FFDEV_12 $js_flags"
else
- js_flags="-DNO_JS_RUNTIMETHREAD $js_flags"
+cat > $TMPC << EOF
+#include <jsapi.h>
+int main( void ) { JSContext *cx; JS_SetContextThread(cx); }
+EOF
+ if $cc -o $TMPO $TMPC $js_flags $LDFLAGS $js_lib 2> /dev/null ; then
+cat > $TMPC << EOF
+#include <jsapi.h>
+int main( void ) { JSContext *cx; JS_SetRuntimeThread(cx); }
+EOF
+ if $cc -o $TMPO $TMPC $js_flags $LDFLAGS $js_lib 2> /dev/null ; then
+ js_flags="$js_flags"
+ else
+ js_flags="-DNO_JS_RUNTIMETHREAD $js_flags"
+ fi
+ else
+ js_flags="-DUSE_FFDEV_11 $js_flags"
+ fi
fi
fi
fi
#include <gpac/constants.h>
#include <gpac/xml.h>
#include <gpac/media_tools.h>
-#include <gpac/internal/terminal_dev.h>
-
/*TODO*/
typedef struct
/*frees a SegmentURL*/
void gf_mpd_segment_url_free(void *_item);
-GF_Err gf_m3u8_to_mpd(const char *m3u8_file, const char *base_url, const char *mpd_file, u32 reload_count, char *mimeTypeForM3U8Segments, GF_ClientService *service, Bool do_import, Bool use_mpd_templates);
+typedef struct _gf_file_get GF_FileDownload;
+struct _gf_file_get
+{
+ GF_Err (*new_session)(GF_FileDownload *getter, char *url);
+ void (*del_session)(GF_FileDownload *getter);
+ const char *(*get_cache_name)(GF_FileDownload *getter);
+
+ void *udta;
+ /*created by udta after new_session*/
+ void *session;
+};
+
+/*converts M3U8 to MPD - getter is optional (download will still be processed if NULL)*/
+GF_Err gf_m3u8_to_mpd(const char *m3u8_file, const char *base_url, const char *mpd_file, u32 reload_count, char *mimeTypeForM3U8Segments, Bool do_import, Bool use_mpd_templates, GF_FileDownload *getter);
#endif // _MPD_H_
/*new APIs*/
#if (JS_VERSION>=185)
+
+#ifdef USE_FFDEV_12
+typedef unsigned uintN;
+typedef uint32_t jsuint;
+typedef int jsint;
+typedef double jsdouble;
+#endif
+
#define JS_NewDouble(c, v) v
#define JS_PropertyStub_forSetter JS_StrictPropertyStub
#define SMJS_PROP_SETTER jsid id, JSBool strict
#define JS_THREADSAFE
#endif
+
+#ifdef USE_FFDEV_12
+#define JS_ClearContextThread(__ctx)
+#define JS_SetContextThread(__ctx)
+#define SMJS_GET_PRIVATE(__ctx, __obj) JS_GetPrivate(__obj)
+#define SMJS_SET_PRIVATE(__ctx, __obj, __val) JS_SetPrivate(__obj, __val)
+#define SMJS_GET_PARENT(__ctx, __obj) JS_GetParent(__obj)
+#define JS_GET_CLASS(__ctx, __obj) JS_GetClass(__obj)
+#define SMJS_CONSTRUCT_OBJECT(__ctx, __class, __parent) JS_ConstructObject(__ctx, __class, __parent)
+
+#else
+
+#define SMJS_GET_PRIVATE(__ctx, __obj) JS_GetPrivate(__ctx, __obj)
+#define SMJS_SET_PRIVATE(__ctx, __obj, __val) JS_SetPrivate(__ctx, __obj, __val)
+#define SMJS_GET_PARENT(__ctx, __obj) JS_GetParent(__ctx, __obj)
+
+#ifdef USE_FFDEV_11
+#define JS_ClearContextThread(__ctx)
+#define JS_SetContextThread(__ctx)
+#define SMJS_CONSTRUCT_OBJECT(__ctx, __class, __parent) JS_ConstructObject(__ctx, __class, __parent)
+#else
+#define SMJS_CONSTRUCT_OBJECT(__ctx, __class, __parent) JS_ConstructObject(__ctx, __class, 0, __parent)
+#endif
+
+#endif
+
+
#else
+
#define SMJS_PROP_SETTER jsval id
#define SMJS_PROP_GETTER jsval id
#define JS_PropertyStub_forSetter JS_PropertyStub
#define SMJS_ID_IS_INT JSVAL_IS_INT
#define SMJS_ID_TO_INT JSVAL_TO_INT
+#define SMJS_CONSTRUCT_OBJECT(__ctx, __class, __parent) JS_ConstructObject(__ctx, __class, 0, __parent)
+#define SMJS_GET_PRIVATE(__ctx, __obj) JS_GetPrivate(__ctx, __obj)
+#define SMJS_SET_PRIVATE(__ctx, __obj, __val) JS_SetPrivate(__ctx, __obj, __val)
+#define SMJS_GET_PARENT(__ctx, __obj) JS_GetParent(__ctx, __obj)
+
#endif
This allows preventing OD/BIFS streams shutdown/startup when seeking.*/
Bool static_media_ressources;
+ /*set to 1 to force all sub-resources to share the timeline of this scene*/
+ Bool force_single_timeline;
+
/*callback to call to dispatch SVG MediaEvent - this is a pointer to function only because of linking issues
with static libgpac (avoids depending on SpiderMonkey and OpenGL32 if not needed)*/
static GF_Terminal *gpac_get_term(JSContext *c, JSObject *obj)
{
- GF_GPACJSExt *ext = (GF_GPACJSExt *)JS_GetPrivate(c, obj);
+ GF_GPACJSExt *ext = (GF_GPACJSExt *)SMJS_GET_PRIVATE(c, obj);
return ext ? ext->term : NULL;
}
*vp = DOUBLE_TO_JSVAL(JS_NewDouble(c, fps) );
}
else if (!strcmp(prop_name, "cpu_load")) {
- GF_GPACJSExt *ext = (GF_GPACJSExt *)JS_GetPrivate(c, obj);
+ GF_GPACJSExt *ext = (GF_GPACJSExt *)SMJS_GET_PRIVATE(c, obj);
gf_sys_get_rti(ext->rti_refresh_rate, &ext->rti, 0);
*vp = INT_TO_JSVAL(ext->rti.process_cpu_usage);
}
else if (!strcmp(prop_name, "memory")) {
- GF_GPACJSExt *ext = (GF_GPACJSExt *)JS_GetPrivate(c, obj);
+ GF_GPACJSExt *ext = (GF_GPACJSExt *)SMJS_GET_PRIVATE(c, obj);
gf_sys_get_rti(ext->rti_refresh_rate, &ext->rti, 0);
*vp = INT_TO_JSVAL(ext->rti.process_memory);
}
static JSBool gpacevt_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
- GF_GPACJSExt *gjs = JS_GetPrivate(c, obj);
+ GF_GPACJSExt *gjs = SMJS_GET_PRIVATE(c, obj);
GF_Event *evt = gjs->evt;
if (!evt) return 0;
rval = JSVAL_VOID;
gjs->evt = evt;
- JS_SetPrivate(gjs->c, gjs->evt_obj, gjs);
+ SMJS_SET_PRIVATE(gjs->c, gjs->evt_obj, gjs);
argv[0] = OBJECT_TO_JSVAL(gjs->evt_obj);
rval = JSVAL_VOID;
JS_CallFunctionValue(gjs->c, gjs->evt_filter_obj, gjs->evt_fun, 1, argv, &rval);
- JS_SetPrivate(gjs->c, gjs->evt_obj, NULL);
+ SMJS_SET_PRIVATE(gjs->c, gjs->evt_obj, NULL);
gjs->evt = NULL;
res = 0;
{
SMJS_OBJ
SMJS_ARGS
- GF_GPACJSExt *gjs = (GF_GPACJSExt *)JS_GetPrivate(c, obj);
+ GF_GPACJSExt *gjs = (GF_GPACJSExt *)SMJS_GET_PRIVATE(c, obj);
if (!argc || !JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;
if (! JSVAL_IS_NULL(gjs->evt_fun) ) return JS_TRUE;
GF_Scene *scene=NULL;
SMJS_OBJ
SMJS_ARGS
- GF_GPACJSExt *gjs = (GF_GPACJSExt *)JS_GetPrivate(c, obj);
+ GF_GPACJSExt *gjs = (GF_GPACJSExt *)SMJS_GET_PRIVATE(c, obj);
if (!gjs || !argc || !JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;
elt = gf_sg_js_get_node(c, JSVAL_TO_OBJECT(argv[0]));
scene_obj = JS_NewObject(c, &gjs->anyClass, 0, 0);
- JS_SetPrivate(c, scene_obj, scene);
+ SMJS_SET_PRIVATE(c, scene_obj, scene);
gf_sg_get_scene_size_info(scene->graph, &w, &h);
JS_DefineProperty(c, scene_obj, "width", INT_TO_JSVAL(w), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, scene_obj, "height", INT_TO_JSVAL(h), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
gjs->term = par.term;
}
}
- JS_SetPrivate(c, gjs->gpac_obj, gjs);
+ SMJS_SET_PRIVATE(c, gjs->gpac_obj, gjs);
} else {
JS_DefineProperty(c, global, "gpac", OBJECT_TO_JSVAL(gjs->gpac_obj), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
}
Bool selected;
Bool done;
- Bool force_switch_bandwidth;
+ Bool force_switch_bandwidth, min_bandwidth_selected;
u32 nb_bw_check;
u32 active_bitrate, max_bitrate, min_bitrate;
u32 force_representation_idx_plus_one;
Bool force_segment_switch;
+
+ /*set when switching segment, indicates the current downloaded segment duration*/
+ u64 current_downloaded_segment_duration;
} GF_MPD_Group;
typedef struct __mpd_module {
Used to detect when audio service connection request is made on the same URL as video */
char *url;
+ /*interface to mpd parser*/
+ GF_FileDownload getter;
+
u32 option_max_cached;
u32 auto_switch_count;
Bool keep_files, disable_switching;
if (download_rate>group->max_bitrate) group->max_bitrate = download_rate;
if (download_rate && (download_rate < group->active_bitrate)) {
- fprintf(stdout, "Downloading from set %s at rate %d kbps but group bitrate is %d kbps\n", group->adaptation_set->id, download_rate/1024, group->active_bitrate/1024);
+ u32 set_idx = gf_list_find(group->period->adaptation_sets, group->adaptation_set)+1;
group->nb_bw_check ++;
- if (group->nb_bw_check>2) {
- fprintf(stdout, "Downloading from group %s at rate %d kbps but group bitrate is %d kbps - switching\n", group->adaptation_set->id, download_rate/1024, group->active_bitrate/1024);
+ if (group->min_bandwidth_selected) {
+ fprintf(stdout, "Downloading from set #%d at rate %d kbps but media bitrate is %d kbps - no lower bitrate available ...\n", set_idx, download_rate/1024, group->active_bitrate/1024);
+ } else if (group->nb_bw_check>2) {
+ fprintf(stdout, "Downloading from set #%d at rate %d kbps but media bitrate is %d kbps - switching\n", set_idx, download_rate/1024, group->active_bitrate/1024);
group->force_switch_bandwidth = 1;
gf_dm_sess_abort(group->segment_dnload);
+ } else {
+ fprintf(stdout, "Downloading from set #%ds at rate %d kbps but media bitrate is %d kbps\n", set_idx, download_rate/1024, group->active_bitrate/1024);
}
} else {
group->nb_bw_check = 0;
/* Some servers, for instance http://tv.freebox.fr, serve m3u8 as text/plain */
if (MPD_isM3U8_mime(mime) || strstr(purl, ".m3u8")) {
- gf_m3u8_to_mpd(local_url, purl, NULL, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments, mpdin->service, 0, M3U8_TO_MPD_USE_TEMPLATE);
+ gf_m3u8_to_mpd(local_url, purl, NULL, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments, 0, M3U8_TO_MPD_USE_TEMPLATE, &mpdin->getter);
} else if (!MPD_is_MPD_mime(mime)) {
GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] mime '%s' should be m3u8 or mpd\n", mime));
gf_term_on_connect(mpdin->service, NULL, GF_BAD_PARAM);
}
}
+static void MPD_GetTimelineDuration(GF_MPD_SegmentTimeline *timeline, u32 *nb_segments, Double *seg_duration)
+{
+ u32 i, count;
+
+ *nb_segments = 0;
+ *seg_duration = 0;
+ count = gf_list_count(timeline->entries);
+ for (i=0; i<count; i++) {
+ GF_MPD_SegmentTimelineEntry *ent = gf_list_get(timeline->entries, i);
+ *nb_segments += 1 + ent->repeat_count;
+ if (*seg_duration < ent->duration) *seg_duration = ent->duration;
+ }
+}
+
static void MPD_GetSegmentDuration(GF_MPD_Representation *rep, GF_MPD_AdaptationSet *set, GF_MPD_Period *period, GF_MPD *mpd, u32 *nb_segments, Double *seg_duration)
{
Double mediaDuration;
u32 timescale;
u64 duration;
+ GF_MPD_SegmentTimeline *timeline = NULL;
*nb_segments = timescale = 0;
duration = 0;
if (period->segment_list->duration) duration = period->segment_list->duration;
if (period->segment_list->timescale) timescale = period->segment_list->timescale;
if (period->segment_list->segment_URLs) segments = period->segment_list->segment_URLs;
+ if (period->segment_list->segment_timeline) timeline = period->segment_list->segment_timeline;
}
if (set->segment_list) {
if (set->segment_list->duration) duration = set->segment_list->duration;
if (set->segment_list->timescale) timescale = set->segment_list->timescale;
if (set->segment_list->segment_URLs) segments = set->segment_list->segment_URLs;
+ if (set->segment_list->segment_timeline) timeline = set->segment_list->segment_timeline;
}
if (rep->segment_list) {
if (rep->segment_list->duration) duration = rep->segment_list->duration;
if (rep->segment_list->timescale) timescale = rep->segment_list->timescale;
if (rep->segment_list->segment_URLs) segments = rep->segment_list->segment_URLs;
+ if (rep->segment_list->segment_timeline) timeline = rep->segment_list->segment_timeline;
}
- if (segments)
- *nb_segments = gf_list_count(segments);
-
if (! timescale) timescale=1;
- *seg_duration = (Double) duration;
- *seg_duration /= timescale;
+
+ if (timeline) {
+ MPD_GetTimelineDuration(timeline, nb_segments, seg_duration);
+ *seg_duration /= timescale;
+ } else {
+ if (segments)
+ *nb_segments = gf_list_count(segments);
+ *seg_duration = (Double) duration;
+ *seg_duration /= timescale;
+ }
return;
}
if (period->segment_template) {
if (period->segment_template->duration) duration = period->segment_template->duration;
if (period->segment_template->timescale) timescale = period->segment_template->timescale;
+ if (period->segment_template->segment_timeline) timeline = period->segment_template->segment_timeline;
}
if (set->segment_template) {
if (set->segment_template->duration) duration = set->segment_template->duration;
if (set->segment_template->timescale) timescale = set->segment_template->timescale;
+ if (set->segment_template->segment_timeline) timeline = set->segment_template->segment_timeline;
}
if (rep->segment_template) {
if (rep->segment_template->duration) duration = rep->segment_template->duration;
if (rep->segment_template->timescale) timescale = rep->segment_template->timescale;
+ if (rep->segment_template->segment_timeline) timeline = rep->segment_template->segment_timeline;
}
if (!timescale) timescale=1;
- *seg_duration = (Double) duration;
- *seg_duration /= timescale;
- mediaDuration = period->duration;
- if (!mediaDuration) mediaDuration = mpd->media_presentation_duration;
- if (mediaDuration && duration) {
- Double nb_seg = (Double) mediaDuration;
- /*duration is given in ms*/
- nb_seg /= 1000;
- nb_seg *= timescale;
- nb_seg /= duration;
- *nb_segments = (u32) ceil(nb_seg);
+
+ if (timeline) {
+ MPD_GetTimelineDuration(timeline, nb_segments, seg_duration);
+ *seg_duration /= timescale;
+ } else {
+ *seg_duration = (Double) duration;
+ *seg_duration /= timescale;
+ mediaDuration = period->duration;
+ if (!mediaDuration) mediaDuration = mpd->media_presentation_duration;
+ if (mediaDuration && duration) {
+ Double nb_seg = (Double) mediaDuration;
+ /*duration is given in ms*/
+ nb_seg /= 1000;
+ nb_seg *= timescale;
+ nb_seg /= duration;
+ *nb_segments = (u32) ceil(nb_seg);
+ }
}
}
u32 width=0, height=0, samplerate=0;
GF_MPD_Fractional *framerate=NULL;
#endif
- u32 timescale = 1;
+ u32 k, timescale = 1;
GF_MPD_AdaptationSet *set;
GF_MPD_Period *period;
u32 i = gf_list_find(group->adaptation_set->representations, rep);
group->active_bitrate = rep->bandwidth;
group->nb_segments_in_rep = 1;
+ group->min_bandwidth_selected = 1;
+ for (k=0; k<gf_list_count(group->adaptation_set->representations); k++) {
+ GF_MPD_Representation *arep = gf_list_get(group->adaptation_set->representations, k);
+ if (group->active_bitrate > arep->bandwidth) {
+ group->min_bandwidth_selected = 0;
+ break;
+ }
+ }
+
set = group->adaptation_set;
period = group->period;
}
-u64 MPD_ResolveDuration(GF_MPD_Representation *rep, GF_MPD_AdaptationSet *set, GF_MPD_Period *period, u32 item_index)
+static void MPD_ResolveDuration(GF_MPD_Representation *rep, GF_MPD_AdaptationSet *set, GF_MPD_Period *period, u64 *out_duration, u32 *out_timescale)
{
+ u32 timescale = 0;
GF_MPD_SegmentTimeline *segment_timeline;
GF_MPD_MultipleSegmentBase *mbase_rep, *mbase_set, *mbase_period;
/*single media segment - duration is not known unless indicated in period*/
if (rep->segment_base || set->segment_base || period->segment_base) {
- return period ? period->duration : 0;
+ *out_duration = period ? period->duration : 0;
+ *out_timescale = 1000;
+ return;
}
/*we have a segment template list or template*/
mbase_rep = rep->segment_list ? (GF_MPD_MultipleSegmentBase *) rep->segment_list : (GF_MPD_MultipleSegmentBase *) rep->segment_template;
if (mbase_period) segment_timeline = mbase_period->segment_timeline;
if (mbase_set) segment_timeline = mbase_set->segment_timeline;
if (mbase_rep) segment_timeline = mbase_rep->segment_timeline;
-
- if (segment_timeline) {
- /*not supported yet*/
- assert(0);
- return 0;
- }
- if (mbase_rep && mbase_rep->duration) return mbase_rep->duration;
- if (mbase_set && mbase_set->duration) return mbase_set->duration;
- if (mbase_period && mbase_period->duration) return mbase_period->duration;
- return 0;
+
+ timescale = mbase_rep ? mbase_rep->timescale : 0;
+ if (!timescale && mbase_set && mbase_set->timescale) timescale = mbase_set->timescale;
+ if (!timescale && mbase_period && mbase_period->timescale) timescale = mbase_period->timescale;
+ if (!timescale) timescale = 1;
+ *out_timescale = timescale;
+
+ if (mbase_rep && mbase_rep->duration) *out_duration = mbase_rep->duration;
+ else if (mbase_set && mbase_set->duration) *out_duration = mbase_set->duration;
+ else if (mbase_period && mbase_period->duration) *out_duration = mbase_period->duration;
+
}
typedef enum
} GF_MPDURLResolveType;
-GF_Err MPD_ResolveURL(GF_MPD *mpd, GF_MPD_Representation *rep, GF_MPD_AdaptationSet *set, GF_MPD_Period *period, char *mpd_url, GF_MPDURLResolveType resolve_type, u32 item_index, char **out_url, u64 *out_range_start, u64 *out_range_end)
+GF_Err MPD_ResolveURL(GF_MPD *mpd, GF_MPD_Representation *rep, GF_MPD_AdaptationSet *set, GF_MPD_Period *period, char *mpd_url, GF_MPDURLResolveType resolve_type, u32 item_index, char **out_url, u64 *out_range_start, u64 *out_range_end, u64 *segment_duration)
{
GF_MPD_BaseURL *url_child;
+ GF_MPD_SegmentTimeline *timeline = NULL;
u32 start_number = 1;
+ u32 timescale;
char *url;
char *url_to_solve, *solved_template, *first_sep, *media_url;
char *init_template, *index_template;
url = t_url;
}
+ MPD_ResolveDuration(rep, set, period, segment_duration, ×cale);
+ *segment_duration = (u32) ((Double) (*segment_duration) * 1000.0 / timescale);
+
/*single URL*/
if (rep->segment_base || set->segment_base || period->segment_base) {
GF_MPD_URL *res_url;
if (period->segment_list->representation_index) index_url = period->segment_list->representation_index;
if (period->segment_list->segment_URLs) segments = period->segment_list->segment_URLs;
if (period->segment_list->start_number != (u32) -1) start_number = period->segment_list->start_number;
+ if (period->segment_list->segment_timeline) timeline = period->segment_list->segment_timeline;
}
if (set->segment_list) {
if (set->segment_list->initialization_segment) init_url = set->segment_list->initialization_segment;
if (set->segment_list->representation_index) index_url = set->segment_list->representation_index;
if (set->segment_list->segment_URLs) segments = set->segment_list->segment_URLs;
if (set->segment_list->start_number != (u32) -1) start_number = set->segment_list->start_number;
+ if (set->segment_list->segment_timeline) timeline = set->segment_list->segment_timeline;
}
if (rep->segment_list) {
if (rep->segment_list->initialization_segment) init_url = rep->segment_list->initialization_segment;
if (rep->segment_list->representation_index) index_url = rep->segment_list->representation_index;
if (rep->segment_list->segment_URLs) segments = rep->segment_list->segment_URLs;
if (rep->segment_list->start_number != (u32) -1) start_number = rep->segment_list->start_number;
+ if (rep->segment_list->segment_timeline) timeline = rep->segment_list->segment_timeline;
}
}
/*segmentTemplate*/
- init_template = index_template = NULL;
+ media_url = init_template = index_template = NULL;
/*apply inheritance of attributes, lowest level having preceedence*/
if (period->segment_template) {
if (period->segment_template->index) index_template = period->segment_template->index;
if (period->segment_template->media) media_url = period->segment_template->media;
if (period->segment_template->start_number != (u32) -1) start_number = period->segment_template->start_number;
+ if (period->segment_template->segment_timeline) timeline = period->segment_template->segment_timeline;
}
if (set->segment_template) {
if (set->segment_template->initialization) init_template = set->segment_template->initialization;
if (set->segment_template->index) index_template = set->segment_template->index;
if (set->segment_template->media) media_url = set->segment_template->media;
if (set->segment_template->start_number != (u32) -1) start_number = set->segment_template->start_number;
+ if (set->segment_template->segment_timeline) timeline = set->segment_template->segment_timeline;
}
if (rep->segment_template) {
if (rep->segment_template->initialization) init_template = rep->segment_template->initialization;
if (rep->segment_template->index) index_template = rep->segment_template->index;
if (rep->segment_template->media) media_url = rep->segment_template->media;
if (rep->segment_template->start_number != (u32) -1) start_number = rep->segment_template->start_number;
+ if (rep->segment_template->segment_timeline) timeline = rep->segment_template->segment_timeline;
+ }
+ if (!media_url) {
+ GF_MPD_BaseURL *base = gf_list_get(rep->base_URLs, 0);
+ media_url = base->URL;
}
url_to_solve = NULL;
switch (resolve_type) {
strcat(solved_template, szFormat);
}
else if (!strcmp(first_sep+1, "Time")) {
- assert(0);
- /*uses segment timeline, not supported yet*/
+ if (timeline) {
+ /*uses segment timeline*/
+ u32 k, nb_seg, cur_idx, nb_repeat;
+ u64 time, start_time;
+ nb_seg = gf_list_count(timeline->entries);
+ cur_idx = 0;
+ start_time=0;
+ for (k=0; k<nb_seg; k++) {
+ GF_MPD_SegmentTimelineEntry *ent = gf_list_get(timeline->entries, k);
+ if (item_index>cur_idx+ent->repeat_count) {
+ cur_idx += 1 + ent->repeat_count;
+ start_time += ent->duration * (1 + ent->repeat_count);
+ continue;
+ }
+ *segment_duration = ent->duration;
+ *segment_duration = (u32) ((Double) (*segment_duration) * 1000.0 / timescale);
+ nb_repeat = item_index - cur_idx;
+ time = ent->start_time ? ent->start_time : start_time;
+ time += nb_repeat * ent->duration;
+ sprintf(szFormat, ""LLD"", time);
+ strcat(solved_template, szFormat);
+ break;
+ }
+ }
}
if (format_tag) format_tag[0] = '%';
second_sep[0] = '$';
}
start_range = end_range = 0;
- e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_INIT, 0, &base_init_url, &start_range, &end_range);
+ e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_INIT, 0, &base_init_url, &start_range, &end_range, &group->current_downloaded_segment_duration);
if (e) {
gf_mx_v(mpdin->dl_mutex);
GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Unable to resolve initialization URL: %s\n", gf_error_to_string(e) ));
/*no error and no init segment, go for media segment*/
if (!base_init_url) {
- e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_MEDIA, group->download_segment_index, &base_init_url, &start_range, &end_range);
+ e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_MEDIA, group->download_segment_index, &base_init_url, &start_range, &end_range, &group->current_downloaded_segment_duration);
if (e) {
gf_mx_v(mpdin->dl_mutex);
GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Unable to resolve media URL: %s\n", gf_error_to_string(e) ));
gf_free(base_init_url);
- e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_MEDIA, group->download_segment_index + 1, &base_init_url, &start_range, &end_range);
+ e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_MEDIA, group->download_segment_index + 1, &base_init_url, &start_range, &end_range, &group->current_downloaded_segment_duration);
if (!e) {
gf_mx_v(mpdin->dl_mutex);
return e;
stype2 = mime ? strchr(mime, '/') : NULL;
if (stype1 && stype2 && !strcmp(stype1, stype2)) valid = 1;
- if (!valid) {
+ if (!valid && 0) {
GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Mime '%s' is not correct for '%s', it should be '%s'\n", mime, base_init_url, mime_type));
mpdin->mpd_stop_request = 0;
gf_mx_v(mpdin->dl_mutex);
for (i=0; i<group_count; i++) {
GF_MPD_Group *group = gf_list_get(mpdin->groups, i);
+ if (!group->selected) continue;
GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Connecting initial service... %s\n", group->segment_local_url));
if (! group->input_module) {
e = GF_SERVICE_ERROR;
gf_mx_p(mpdin->dl_mutex);
/* At this stage, there are some segments left to be downloaded */
- e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_MEDIA, group->download_segment_index, &new_base_seg_url, &start_range, &end_range);
+ e = MPD_ResolveURL(mpdin->mpd, rep, group->adaptation_set, group->period, mpdin->url, GF_MPD_RESOLVE_URL_MEDIA, group->download_segment_index, &new_base_seg_url, &start_range, &end_range, &group->current_downloaded_segment_duration);
gf_mx_v(mpdin->dl_mutex);
if (e) {
/*do something!!*/
}
} else {
+ u32 total_size, bytes_per_sec;
+
group->max_bitrate = 0;
group->min_bitrate = (u32)-1;
/*use persistent connection for segment downloads*/
resource_name = gf_dm_sess_get_resource_name(group->segment_dnload);
- {
- u32 total_size, bytes_per_sec;
- u64 duration;
- Double bitrate;
- gf_dm_sess_get_stats(group->segment_dnload, NULL, NULL, &total_size, NULL, &bytes_per_sec, NULL);
+ gf_dm_sess_get_stats(group->segment_dnload, NULL, NULL, &total_size, NULL, &bytes_per_sec, NULL);
+ if (total_size && bytes_per_sec && group->current_downloaded_segment_duration) {
+ Double bitrate, time;
bitrate = 8*total_size;
bitrate *= 1000;
- duration = MPD_ResolveDuration(rep, group->adaptation_set, group->period, 0);
- if (!duration) {
- GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("Downloaded segment (bandwidth %d) with bandwith %d kbps\n", 8*rep->bandwidth/1024, 8*bytes_per_sec/1024));
- } else {
- bitrate /= duration;
- bitrate /= 1024;
- GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("Downloaded segment (bandwidth %d) bitrate %d with bandwith %d kbps\n", 8*rep->bandwidth/1024, (u32) bitrate, 8*bytes_per_sec/1024));
- }
- /*TODO switch quality*/
-
- if (!mpdin->auto_switch_count) {
-// MPD_SwitchGroupRepresentation(mpdin, group);
+ bitrate /= group->current_downloaded_segment_duration;
+ bitrate /= 1024;
+ time = total_size;
+ time /= bytes_per_sec;
+
+ GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("Downloaded segment %d bytes in %g seconds - duration %g sec - Bandwidth (kbps): indicated %d - computed %d - download %d\n", total_size, time, group->current_downloaded_segment_duration/1000.0, rep->bandwidth/1024, (u32) bitrate, 8*bytes_per_sec/1024));
+
+ if (rep->bandwidth < 8*bytes_per_sec) {
+ u32 k;
+ /*find highest bandwidth that fits our bitrate*/
+ GF_MPD_Representation *new_rep = NULL;
+ for (k=0; k<gf_list_count(group->adaptation_set->representations); k++) {
+ GF_MPD_Representation *arep = gf_list_get(group->adaptation_set->representations, k);
+ if (8*bytes_per_sec > arep->bandwidth) {
+ if (!new_rep) new_rep = arep;
+ else if (arep->bandwidth > new_rep->bandwidth) {
+ new_rep = arep;
+ }
+ }
+ }
+ if (new_rep) {
+ GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("Switching to new representation bitrate %d kbps\n", new_rep->bandwidth/1024));
+ MPD_SetGroupRepresentation(group, new_rep);
+ }
}
}
}
for (i=0; i<gf_list_count(mpdin->groups); i++) {
GF_MPD_Group *group = gf_list_get(mpdin->groups, i);
assert( group );
- if (! group->service_connected ) return;
if (group->selected && group->segment_dnload) {
gf_dm_sess_abort(group->segment_dnload);
group->done = 1;
if (!rep_sel->segment_base && !rep_sel->segment_list && !rep_sel->segment_template
&& !group->adaptation_set->segment_base && !group->adaptation_set->segment_list && !group->adaptation_set->segment_template
&& !group->period->segment_base && !group->period->segment_list && !group->period->segment_template
-
+ && !gf_list_count(rep_sel->base_URLs)
+
) {
GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot start: missing segments\n"));
return GF_NON_COMPLIANT_BITSTREAM;
return e;
}
+
+static GF_Err http_ifce_get(GF_FileDownload *getter, char *url)
+{
+ GF_MPD_In *mpdin = (GF_MPD_In*) getter->udta;
+ GF_DownloadSession *sess = gf_term_download_new(mpdin->service, url, GF_NETIO_SESSION_NOT_THREADED, NULL, NULL);
+ if (!sess) return GF_IO_ERR;
+ getter->session = sess;
+ return gf_dm_sess_process(sess);
+}
+
+static void http_ifce_clean(GF_FileDownload *getter)
+{
+ GF_MPD_In *mpdin = (GF_MPD_In*) getter->udta;
+ if (getter->session) gf_term_download_del(getter->session);
+}
+
+static const char *http_ifce_cache_name(GF_FileDownload *getter)
+{
+ GF_MPD_In *mpdin = (GF_MPD_In*) getter->udta;
+ if (getter->session) return gf_dm_sess_get_cache_name(getter->session);
+ return NULL;
+}
+
GF_Err MPD_ConnectService(GF_InputService *plug, GF_ClientService *serv, const char *url)
{
GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv;
mpdin->url = gf_strdup(url);
mpdin->option_max_cached = 0;
+ mpdin->getter.udta = mpdin;
+ mpdin->getter.new_session = http_ifce_get;
+ mpdin->getter.del_session = http_ifce_clean;
+ mpdin->getter.get_cache_name = http_ifce_cache_name;
+ mpdin->getter.session = NULL;
+
+
opt = gf_modules_get_option((GF_BaseInterface *)plug, "DASH", "MaxCachedSegments");
if (!opt) gf_modules_set_option((GF_BaseInterface *)plug, "DASH", "MaxCachedSegments", "3");
if (opt) mpdin->option_max_cached = atoi(opt);
if (sep) sep[0]=0;
strcat(local_path, ".mpd");
- gf_m3u8_to_mpd(local_url, url, local_path, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments, mpdin->service, 0, M3U8_TO_MPD_USE_TEMPLATE);
+ gf_m3u8_to_mpd(local_url, url, local_path, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments, 0, M3U8_TO_MPD_USE_TEMPLATE, &mpdin->getter);
local_url = local_path;
} else {
- gf_m3u8_to_mpd(local_url, url, NULL, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments, mpdin->service, 0, M3U8_TO_MPD_USE_TEMPLATE);
+ gf_m3u8_to_mpd(local_url, url, NULL, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments, 0, M3U8_TO_MPD_USE_TEMPLATE, &mpdin->getter);
}
}
else if (!strcmp(prop_name, "PresentationURL")) {
*vp = STRING_TO_JSVAL( JS_NewStringCopyZ(c, dev->m_device->m_PresentationURL) );
}
+ else if (!strcmp(prop_name, "ServicesCount")) {
+ u32 count = gf_list_count(dev->m_Services);
+ *vp = INT_TO_JSVAL(count);
+ }
SMJS_FREE(c, prop_name);
return JS_TRUE;
}
return JS_TRUE;
}
+static JSBool SMJS_FUNCTION(upnp_device_get_service)
+{
+ u32 service_index;
+ SMJS_OBJ
+ SMJS_ARGS
+ GPAC_DeviceItem *item = (GPAC_DeviceItem *)JS_GetPrivate(c, obj);
+ if (!item || !argc || !JSVAL_IS_INT(argv[0])) return JS_FALSE;
+ service_index = JSVAL_TO_INT(argv[0]);
+
+ GPAC_ServiceItem *serv = (GPAC_ServiceItem*)gf_list_get(item->m_Services, service_index);
+ if (!serv) {
+ SMJS_SET_RVAL( JSVAL_NULL );
+ return JS_TRUE;
+ }
+ SMJS_SET_RVAL( OBJECT_TO_JSVAL(serv->obj) );
+ return JS_TRUE;
+}
+
void GF_UPnP::OnDeviceAdd(GPAC_DeviceItem *item, int added)
{
};
JSFunctionSpec upnpDeviceClassFuncs[] = {
SMJS_FUNCTION_SPEC("FindService", upnp_device_find_service, 0),
+ SMJS_FUNCTION_SPEC("GetService", upnp_device_get_service, 0),
SMJS_FUNCTION_SPEC(0, 0, 0)
};
JS_SETUP_CLASS(upnpGenericDeviceClass, "UPNPDEVICE", JSCLASS_HAS_PRIVATE, upnpdevice_getProperty, JS_PropertyStub_forSetter, JS_FinalizeStub);
char *feat_name;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE;
GF_Event evt;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || !argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE;
memset(&evt, 0, sizeof(GF_Event));
{
jsval fval;
SMJS_OBJ
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_TRUE;
if ((JS_LookupProperty(c, wid->widget->wm->obj, "getAttention", &fval)==JS_TRUE) && JSVAL_IS_OBJECT(fval)) {
jsval fval;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_TRUE;
if ((JS_LookupProperty(c, wid->widget->wm->obj, "showNotification", &fval)==JS_TRUE) && JSVAL_IS_OBJECT(fval)) {
u32 i, count;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetMessage *msg = JS_GetPrivate(c, obj);
+ GF_WidgetMessage *msg = SMJS_GET_PRIVATE(c, obj);
if (!msg || !argc || !JSVAL_IS_OBJECT(argv[0]) ) return JS_FALSE;
if ((JS_LookupProperty(c, obj, "replyCallback", &fval)==JS_TRUE) && JSVAL_IS_OBJECT(fval)) {
u32 i, count;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)SMJS_GET_PRIVATE(c, obj);
if (!bifce) return JS_FALSE;
if (!argc) return JS_FALSE;
GF_WidgetMessage *msg = gf_list_get(bifce->ifce->messages, i);
if (!strcmp(msg->name, msg_name)) {
JSObject *an_obj = JS_NewObject(c, &bifce->wid->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, an_obj, msg);
+ SMJS_SET_PRIVATE(c, an_obj, msg);
JS_DefineProperty(c, an_obj, "msgName", STRING_TO_JSVAL( JS_NewStringCopyZ(c, msg->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, an_obj, "interfaceHandler", OBJECT_TO_JSVAL( obj ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineFunction(c, an_obj, "onInvokeReply", widget_call_message_reply_callback, 1, 0);
GF_WidgetMessage *msg = NULL;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)SMJS_GET_PRIVATE(c, obj);
if (!bifce) return JS_FALSE;
SMJS_SET_RVAL( JSVAL_NULL );
if (!JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;
if (JSVAL_IS_NULL(argv[0])) return JS_FALSE;
- msg = (GF_WidgetMessage *)JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ msg = (GF_WidgetMessage *)SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
if (!msg) return JS_FALSE;
/*look for JS Callback "invoke" in the widget manager script*/
SMJS_OBJ
SMJS_ARGS
GF_WidgetMessage *msg = NULL;
- GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)SMJS_GET_PRIVATE(c, obj);
if (!bifce) return JS_FALSE;
SMJS_SET_RVAL( JSVAL_NULL );
if (!JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;
if (JSVAL_IS_NULL(argv[0])) return JS_FALSE;
- msg = (GF_WidgetMessage *)JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ msg = (GF_WidgetMessage *)SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
if (!msg) return JS_FALSE;
/*look for JS Callback "invokeReply" in the widget manager script*/
{
if (!ifce->obj) {
ifce->obj = JS_NewObject(c, &ifce->wid->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, ifce->obj, ifce);
+ SMJS_SET_PRIVATE(c, ifce->obj, ifce);
gf_js_add_root(c, &ifce->obj, GF_JSGC_OBJECT);
JS_DefineProperty(c, ifce->obj, "type", STRING_TO_JSVAL( JS_NewStringCopyZ(c, ifce->ifce->type) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, ifce->obj, "bound", STRING_TO_JSVAL( JS_NewStringCopyZ(c, ifce->hostname) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
jsval v;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE;
char *comp_id;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE;
{
const char *opt;
char *prop_name;
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!SMJS_ID_IS_STRING(id)) return JS_TRUE;
for (i=0; i<count; i++) {
GF_WidgetInterfaceInstance *ifce = gf_list_get(wi->bound_ifces, i);
if (ifce->obj) {
- JS_SetPrivate(c, ifce->obj, NULL);
+ SMJS_SET_PRIVATE(c, ifce->obj, NULL);
gf_js_remove_root(c, &ifce->obj, GF_JSGC_OBJECT);
ifce->obj = NULL;
}
wi->scene_obj = JS_DefineObject(c, global, "widget", &wm->widgetClass, 0, 0);
//JS_AliasProperty(c, global, "widget", "MPEGWidget");
- JS_SetPrivate(c, wi->scene_obj, wi);
+ SMJS_SET_PRIVATE(c, wi->scene_obj, wi);
/*and remember the script*/
wi->scene_context = c;
wi->scene_global = global;
{
if (bifce->hostname) gf_free(bifce->hostname);
if (bifce->obj) {
- JS_SetPrivate(wm->ctx, bifce->obj, NULL);
+ SMJS_SET_PRIVATE(wm->ctx, bifce->obj, NULL);
gf_js_remove_root(wm->ctx, &bifce->obj, GF_JSGC_OBJECT);
}
gf_free(bifce);
gf_list_del(widg->output_triggers);
if (widg->obj) {
- JS_SetPrivate(wm->ctx, widg->obj, NULL);
+ SMJS_SET_PRIVATE(wm->ctx, widg->obj, NULL);
gf_js_remove_root(wm->ctx, &widg->obj, GF_JSGC_OBJECT);
}
gf_list_del_item(wm->widget_instances, widg);
GF_WidgetMessage *msg;
GF_WidgetInterface *ifce;
- if (!wid && obj) wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ if (!wid && obj) wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!wid->scene) return JS_TRUE;
/*set_input*/
case 0:
if (argc!=2) return JS_FALSE;
- param = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ param = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
break;
/*call_input_action*/
case 1:
- msg = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ msg = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
param = msg ? msg->input_action : NULL;
break;
/*bind_interface*/
case 2:
- ifce = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ ifce = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
param = ifce ? ifce->bind_action : NULL;
break;
/*unbind_interface*/
case 3:
- ifce = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ ifce = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
param = ifce ? ifce->unbind_action : NULL;
break;
}
GF_WidgetPin *param;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || (argc!=2) ) return JS_FALSE;
if (!wid->scene) return JS_TRUE;
if (!JSVAL_IS_OBJECT(argv[0])) return JS_TRUE;
- msg = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ msg = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
param = msg ? msg->input_action : NULL;
if (!param || !param->node || param->attribute) return JS_FALSE;
c = handler->js_context;
obj = handler->evt_listen_obj;
if (!c || !obj) return;
- wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return;
comp = (GF_WidgetComponent *)handler->js_fun;
jsval funval, rval;
u32 i, count;
GF_XMLNode *context = NULL;
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || wid->activated) return;
/*widget is now activated*/
GF_Node *inl;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || !argc) return JS_FALSE;
if (!JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;
GF_WidgetPin *param;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || !wid->scene || !argc || !JSVAL_IS_OBJECT(argv[0]) ) return JS_FALSE;
- param = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ param = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
if (!param) return JS_FALSE;
if (!param->node) {
GF_WidgetPin *par = NULL;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetMessage *msg = (GF_WidgetMessage *)JS_GetPrivate(c, obj);
+ GF_WidgetMessage *msg = (GF_WidgetMessage *)SMJS_GET_PRIVATE(c, obj);
if (!msg || !argc ) return JS_FALSE;
if (JSVAL_IS_INT(argv[0])) {
if (par) {
JSObject *obj = JS_NewObject(c, &msg->ifce->content->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, obj, par);
+ SMJS_SET_PRIVATE(c, obj, par);
JS_DefineProperty(c, obj, "name", STRING_TO_JSVAL( JS_NewStringCopyZ(c, par->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, obj, "is_input", BOOLEAN_TO_JSVAL( (par->type == GF_WM_PARAM_OUTPUT) ? JS_FALSE : JS_TRUE), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
switch (par->script_type) {
GF_WidgetMessage *msg;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInterface *ifce = (GF_WidgetInterface*)JS_GetPrivate(c, obj);
+ GF_WidgetInterface *ifce = (GF_WidgetInterface*)SMJS_GET_PRIVATE(c, obj);
if (!ifce || !argc) return JS_FALSE;
msg = NULL;
}
if (msg) {
JSObject *obj = JS_NewObject(c, &ifce->content->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, obj, msg);
+ SMJS_SET_PRIVATE(c, obj, msg);
JS_DefineProperty(c, obj, "num_params", INT_TO_JSVAL( gf_list_count(msg->params) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, obj, "name", STRING_TO_JSVAL( JS_NewStringCopyZ(c, msg->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, obj, "is_input", BOOLEAN_TO_JSVAL( msg->is_output ? JS_FALSE : JS_TRUE ) , 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
GF_WidgetComponentInstance *comp_inst;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || !argc || !JSVAL_IS_STRING(argv[0]) ) return JS_FALSE;
comp_id = SMJS_CHARS(c, argv[0]);
GF_WidgetInterface *ifce;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || !argc || !JSVAL_IS_INT(argv[0]) ) return JS_FALSE;
idx = JSVAL_TO_INT(argv[0]);
if (ifce) {
if (!ifce->obj) {
ifce->obj = JS_NewObject(c, &wid->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, ifce->obj, ifce);
+ SMJS_SET_PRIVATE(c, ifce->obj, ifce);
JS_DefineProperty(c, ifce->obj, "num_messages", INT_TO_JSVAL( gf_list_count(ifce->messages) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, ifce->obj, "type", STRING_TO_JSVAL( JS_NewStringCopyZ(c, ifce->type) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, ifce->obj, "serviceProvider", BOOLEAN_TO_JSVAL( ifce->provider ? JS_TRUE : JS_FALSE ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
SVG_handlerElement *handler;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
SMJS_SET_RVAL( BOOLEAN_TO_JSVAL(JS_FALSE) );
if (!wid || !wid->scene || (argc!=3)) return JS_TRUE;
if (!JSVAL_IS_OBJECT(argv[1])) return JS_TRUE;
if (!JSVAL_IS_OBJECT(argv[2])) return JS_TRUE;
- msg = (GF_WidgetMessage *)JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]));
+ msg = (GF_WidgetMessage *)SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]));
if (!msg) return JS_TRUE;
param = msg->output_trigger;
if (!param) return JS_TRUE;
char *att;
SMJS_OBJ
//SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!wid->scene) {
SMJS_SET_RVAL(JSVAL_NULL);
JSString *s;
char *prop_name;
const char *opt;
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!SMJS_ID_IS_STRING(id)) return JS_TRUE;
char *abs_reloc_url;
jsval icon_obj_val;
JSObject *icon_obj = JS_NewObject(c, &wid->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, icon_obj, icon);
+ SMJS_SET_PRIVATE(c, icon_obj, icon);
JS_DefineProperty(c, icon_obj, "src", STRING_TO_JSVAL( JS_NewStringCopyZ(c, icon->src) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
if (strlen(icon->relocated_src)) abs_reloc_url = gf_url_concatenate(wid->widget->url, icon->relocated_src);
else abs_reloc_url = gf_strdup("");
if (pref) {
jsval pref_obj_val;
JSObject *pref_obj = JS_NewObject(c, &wid->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, pref_obj, pref);
+ SMJS_SET_PRIVATE(c, pref_obj, pref);
JS_DefineProperty(c, pref_obj, "name", STRING_TO_JSVAL( JS_NewStringCopyZ(c, pref->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, pref_obj, "value", STRING_TO_JSVAL( JS_NewStringCopyZ(c, pref->value) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, pref_obj, "readonly", STRING_TO_JSVAL( JS_NewStringCopyZ(c, ((pref->flags & GF_WM_PREF_READONLY)?"true":"false")) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
if (feat) {
jsval feat_obj_val;
JSObject *feat_obj = JS_NewObject(c, &wid->widget->wm->widgetAnyClass, 0, 0);
- JS_SetPrivate(c, feat_obj, feat);
+ SMJS_SET_PRIVATE(c, feat_obj, feat);
JS_DefineProperty(c, feat_obj, "name", STRING_TO_JSVAL( JS_NewStringCopyZ(c, feat->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, feat_obj, "required", BOOLEAN_TO_JSVAL( (feat->required? JS_TRUE : JS_FALSE) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
{
GF_WidgetFeatureParam *param = gf_list_get(feat->params, j);
JSObject *param_obj = JS_NewObject(c, &wid->widget->wm->widgetAnyClass, 0, 0);
jsval param_obj_val;
- JS_SetPrivate(c, param_obj, param);
+ SMJS_SET_PRIVATE(c, param_obj, param);
JS_DefineProperty(c, param_obj, "name", STRING_TO_JSVAL( JS_NewStringCopyZ(c, param->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineProperty(c, param_obj, "value", STRING_TO_JSVAL( JS_NewStringCopyZ(c, param->value) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
param_obj_val = OBJECT_TO_JSVAL(param_obj);
char szVal[32];
jsdouble val;
char *prop_name;
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
if (!SMJS_ID_IS_STRING(id)) return JS_TRUE;
u32 i, count;
GF_WidgetInterfaceInstance *bifce;
GF_WidgetInterface *ifce;
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || !wid->scene) return JS_FALSE;
ifce = NULL;
if (argc) {
if (!JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;
- ifce = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ ifce = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
if (!ifce) return JS_FALSE;
}
u32 i, count;
jsval funval;
SMJS_OBJ
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid) return JS_FALSE;
/*widget is a component of another widget, unregister*/
if (wid->obj)
return;
wid->obj = JS_NewObject(wm->ctx, &wm->wmWidgetClass, 0, 0);
- JS_SetPrivate(wm->ctx, wid->obj, wid);
+ SMJS_SET_PRIVATE(wm->ctx, wid->obj, wid);
/*protect from GC*/
gf_js_add_root(wm->ctx, &wid->obj, GF_JSGC_OBJECT);
}
GF_WidgetInterface *ifce;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetInstance *wid = (GF_WidgetInstance *)JS_GetPrivate(c, obj);
+ GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj);
if (!wid || !wid->scene || (argc<1) || !JSVAL_IS_OBJECT(argv[0]) ) return JS_FALSE;
- ifce = JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ ifce = SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
if (!ifce) return JS_FALSE;
cookie = NULL;
if ((argc==2) && JSVAL_IS_OBJECT(argv[1]) )
GF_WidgetInstance *wid;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetManager *wm = (GF_WidgetManager *)JS_GetPrivate(c, obj);
+ GF_WidgetManager *wm = (GF_WidgetManager *)SMJS_GET_PRIVATE(c, obj);
if (!argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE;
manifest = SMJS_CHARS(c, argv[0]);
if ((argc==2) && ! JSVAL_IS_NULL(argv[1]) && JSVAL_IS_OBJECT(argv[1])) {
GF_WidgetInstance *parent_widget;
if (!JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[1]), &wm->wmWidgetClass, NULL) ) return JS_FALSE;
- parent_widget = (GF_WidgetInstance *)JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[1]) );
+ parent_widget = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[1]) );
if (parent_widget->widget->url) url = gf_url_concatenate(parent_widget->widget->url, manifest);
}
GF_WidgetInstance *wid;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetManager *wm = (GF_WidgetManager *)JS_GetPrivate(c, obj);
+ GF_WidgetManager *wm = (GF_WidgetManager *)SMJS_GET_PRIVATE(c, obj);
if (!argc || !JSVAL_IS_OBJECT(argv[0])) return JS_TRUE;
if (!JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &wm->wmWidgetClass, NULL) ) return JS_FALSE;
- wid = (GF_WidgetInstance *)JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]) );
+ wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) );
if (!wid) return JS_TRUE;
/*unless explecetely requested, remove the section*/
static JSBool wm_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
char *prop_name;
- GF_WidgetManager *wm = (GF_WidgetManager *)JS_GetPrivate(c, obj);
+ GF_WidgetManager *wm = (GF_WidgetManager *)SMJS_GET_PRIVATE(c, obj);
if (!wm) return JS_FALSE;
if (!SMJS_ID_IS_STRING(id)) return JS_TRUE;
static JSBool wm_setProperty(JSContext *c, JSObject *obj, SMJS_PROP_SETTER, jsval *vp)
{
char *prop_name;
- GF_WidgetManager *wm = (GF_WidgetManager *)JS_GetPrivate(c, obj);
+ GF_WidgetManager *wm = (GF_WidgetManager *)SMJS_GET_PRIVATE(c, obj);
if (!wm) return JS_FALSE;
if (!JSVAL_IS_STRING(*vp)) return JS_TRUE;
GF_WidgetInstance *wid;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetManager *wm = (GF_WidgetManager *)JS_GetPrivate(c, obj);
+ GF_WidgetManager *wm = (GF_WidgetManager *)SMJS_GET_PRIVATE(c, obj);
if (!argc || !JSVAL_IS_INT(argv[0])) return JS_TRUE;
i = JSVAL_TO_INT(argv[0]);
GF_WidgetInstance *wid;
SMJS_OBJ
SMJS_ARGS
- GF_WidgetManager *wm = (GF_WidgetManager *)JS_GetPrivate(c, obj);
+ GF_WidgetManager *wm = (GF_WidgetManager *)SMJS_GET_PRIVATE(c, obj);
if (!argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE;
ifce_name = SMJS_CHARS(c, argv[0]);
const char*opt;
SMJS_OBJ
//SMJS_ARGS
- GF_WidgetManager *wm = (GF_WidgetManager *)JS_GetPrivate(c, obj);
+ GF_WidgetManager *wm = (GF_WidgetManager *)SMJS_GET_PRIVATE(c, obj);
count = gf_cfg_get_key_count(wm->term->user->config, "Widgets");
for (i=0; i<count; i++) {
JS_InitClass(c, global, 0, &wm->widmanClass, 0, 0, wmClassProps, wmClassFuncs, 0, 0);
wm->obj = JS_DefineObject(c, global, "WidgetManager", &wm->widmanClass, 0, 0);
- JS_SetPrivate(c, wm->obj, wm);
+ SMJS_SET_PRIVATE(c, wm->obj, wm);
gf_js_add_root(c, &wm->obj, GF_JSGC_OBJECT);
while ( (att = gf_list_enum(root->attributes, &i)) ) {
if (!strcmp(att->name, "media")) seg->media = gf_mpd_parse_string(att->value);
else if (!strcmp(att->name, "index")) seg->index = gf_mpd_parse_string(att->value);
- else if (!strcmp(att->name, "initialization")) seg->initialization = gf_mpd_parse_string(att->value);
+ else if (!strcmp(att->name, "initialization") ) seg->initialization = gf_mpd_parse_string(att->value);
+ else if (!strcmp(att->name, "initialisation") ) seg->initialization = gf_mpd_parse_string(att->value);
else if (!strcmp(att->name, "bitstreamSwitching")) seg->bitstream_switching = gf_mpd_parse_string(att->value);
}
gf_mpd_parse_multiple_segment_base((GF_MPD_MultipleSegmentBase *)seg, root);
GF_EXPORT
GF_Err gf_m3u8_to_mpd(const char *m3u8_file, const char *base_url,
const char *mpd_file,
- u32 reload_count, char *mimeTypeForM3U8Segments, GF_ClientService *service, Bool do_import, Bool use_mpd_templates)
+ u32 reload_count, char *mimeTypeForM3U8Segments, Bool do_import, Bool use_mpd_templates, GF_FileDownload *getter)
{
GF_Err e;
char *sep, *template_base, *template_ext;
GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD Generator] Not downloading, programs are identical for %s...\n", pe->url));
continue;
}
- if (service) {
+ if (getter && getter->new_session && getter->del_session && getter->get_cache_name) {
+ e = getter->new_session(getter, suburl);
+ if (e) {
+ gf_free(suburl);
+ break;
+ }
+ if (e==GF_OK) {
+ e = parse_sub_playlist(getter->get_cache_name(getter), &pl, suburl, prog, pe);
+ }
+ getter->del_session(getter);
+
+#if 0
GF_DownloadSession *sess = gf_term_download_new(service, suburl, GF_NETIO_SESSION_NOT_THREADED, NULL, NULL);
if (!sess) {
gf_free(suburl);
e = parse_sub_playlist(gf_dm_sess_get_cache_name(sess), &pl, suburl, prog, pe);
}
gf_term_download_del(sess);
+#endif
gf_free(suburl);
} else { /* for use in MP4Box */
if (strstr(suburl, "://") && !strstr(suburl, "://") ) {
}
paf = ⁡
memset(paf, 0, sizeof(GF_M2TS_AdaptationField));
+ //this will stop you when processing invalid (yet existing) mpeg2ts streams in debug
assert(af_size>=0 && af_size<=182);
+ if ( !(af_size>=0 && af_size<=182))
+ GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS] Detected wrong adaption field size %u when control value is 3\n", af_size));
if (af_size) gf_m2ts_get_adaptation_field(ts, paf, data+5, af_size, hdr.pid);
pos += 1+af_size;
payload_size = 183 - af_size;
GF_SceneGraph *scene;
JSObject *global = JS_GetGlobalObject(c);
assert(global);
- scene = JS_GetPrivate(c, global);
+ scene = SMJS_GET_PRIVATE(c, global);
assert(scene);
return scene;
}
GF_Node *dom_get_node(JSContext *c, JSObject *obj)
{
- GF_Node *n = obj ? JS_GetPrivate(c, obj) : NULL;
+ GF_Node *n = obj ? SMJS_GET_PRIVATE(c, obj) : NULL;
if (n && n->sgprivate) return n;
return NULL;
}
GF_Node *dom_get_element(JSContext *c, JSObject *obj)
{
- GF_Node *n = JS_GetPrivate(c, obj);
+ GF_Node *n = SMJS_GET_PRIVATE(c, obj);
if (!n || !n->sgprivate) return NULL;
if (n->sgprivate->tag==TAG_DOMText) return NULL;
return n;
GF_SceneGraph *dom_get_doc(JSContext *c, JSObject *obj)
{
- GF_SceneGraph *sg = JS_GetPrivate(c, obj);
+ GF_SceneGraph *sg = SMJS_GET_PRIVATE(c, obj);
if (sg && !sg->__reserved_null) return sg;
return NULL;
}
if (!jsclass) jsclass = &dom_rt->domDocumentClass;
new_obj = JS_NewObject(c, jsclass, 0, 0);
- JS_SetPrivate(c, new_obj, sg);
+ SMJS_SET_PRIVATE(c, new_obj, sg);
sg->document = new_obj;
return OBJECT_TO_JSVAL(new_obj);
}
gf_node_register(n, NULL);
new_obj = JS_NewObject(c, _class, 0, 0);
- JS_SetPrivate(c, new_obj, n);
+ SMJS_SET_PRIVATE(c, new_obj, n);
if (!n->sgprivate->interact) GF_SAFEALLOC(n->sgprivate->interact, struct _node_interactive_ext);
if (!n->sgprivate->interact->js_binding) {
gf_node_register((GF_Node*)n, NULL);
new_obj = JS_NewObject(c, &dom_rt->domNodeListClass, 0, 0);
- JS_SetPrivate(c, new_obj, nl);
+ SMJS_SET_PRIVATE(c, new_obj, nl);
return OBJECT_TO_JSVAL(new_obj);
}
if (!JS_InstanceOf(c, obj, &dom_rt->domNodeListClass, NULL) )
return;
- nl = (DOMNodeList *) JS_GetPrivate(c, obj);
+ nl = (DOMNodeList *) SMJS_GET_PRIVATE(c, obj);
if (!nl) return;
if (nl->owner) {
if ((argc!=1) || !JSVAL_IS_INT(argv[0]))
return JS_TRUE;
- nl = (DOMNodeList *)JS_GetPrivate(c, obj);
+ nl = (DOMNodeList *)SMJS_GET_PRIVATE(c, obj);
count = gf_node_list_get_count(nl->owner ? nl->owner->children : nl->child);
idx = JSVAL_TO_INT(argv[0]);
if ((idx<0) || ((u32) idx>=count)) {
switch (SMJS_ID_TO_INT(id)) {
case 0:
- nl = (DOMNodeList *) JS_GetPrivate(c, obj);
+ nl = (DOMNodeList *) SMJS_GET_PRIVATE(c, obj);
*vp = INT_TO_JSVAL( gf_node_list_get_count(nl->owner ? nl->owner->children : nl->child) );
return JS_TRUE;
}
/*dom3 node*/
static void dom_node_finalize(JSContext *c, JSObject *obj)
{
- GF_Node *n = (GF_Node *) JS_GetPrivate(c, obj);
+ GF_Node *n = (GF_Node *) SMJS_GET_PRIVATE(c, obj);
/*the JS proto of the svgClass or a destroyed object*/
if (!n) return;
if (!n->sgprivate) return;
- JS_SetPrivate(c, obj, NULL);
+ SMJS_SET_PRIVATE(c, obj, NULL);
gf_list_del_item(n->sgprivate->scenegraph->objects, obj);
dom_js_pre_destroy(c, n->sgprivate->scenegraph, n);
{
GF_SceneGraph *sg = dom_get_doc(c, obj);
- sg = (GF_SceneGraph*) JS_GetPrivate(c, obj);
+ sg = (GF_SceneGraph*) SMJS_GET_PRIVATE(c, obj);
/*the JS proto of the svgClass or a destroyed object*/
if (!sg) return;
- JS_SetPrivate(c, sg->document, NULL);
+ SMJS_SET_PRIVATE(c, sg->document, NULL);
sg->document = NULL;
if (sg->RootNode) {
gf_node_unregister(sg->RootNode, NULL);
if (name && !strcmp(name, "*")) name = NULL;
xml_doc_gather_nodes((GF_ParentNode*)sg->RootNode, name, nl);
new_obj = JS_NewObject(c, &dom_rt->domNodeListClass, 0, 0);
- JS_SetPrivate(c, new_obj, nl);
+ SMJS_SET_PRIVATE(c, new_obj, nl);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(new_obj));
SMJS_FREE(c, name);
return JS_TRUE;
}
xml_doc_gather_nodes((GF_ParentNode*)n, name, nl);
new_obj = JS_NewObject(c, &dom_rt->domNodeListClass, 0, 0);
- JS_SetPrivate(c, new_obj, nl);
+ SMJS_SET_PRIVATE(c, new_obj, nl);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(new_obj) );
SMJS_FREE(c, name);
static JSBool SMJS_FUNCTION(event_stop_propagation)
{
SMJS_OBJ
- GF_DOM_Event *evt = JS_GetPrivate(c, obj);
+ GF_DOM_Event *evt = SMJS_GET_PRIVATE(c, obj);
if (!evt) return JS_TRUE;
evt->event_phase |= GF_DOM_EVENT_PHASE_CANCEL;
return JS_TRUE;
static JSBool SMJS_FUNCTION(event_stop_immediate_propagation)
{
SMJS_OBJ
- GF_DOM_Event *evt = JS_GetPrivate(c, obj);
+ GF_DOM_Event *evt = SMJS_GET_PRIVATE(c, obj);
if (!evt) return JS_TRUE;
evt->event_phase |= GF_DOM_EVENT_PHASE_CANCEL_ALL;
return JS_TRUE;
static JSBool SMJS_FUNCTION(event_prevent_default)
{
SMJS_OBJ
- GF_DOM_Event *evt = JS_GetPrivate(c, obj);
+ GF_DOM_Event *evt = SMJS_GET_PRIVATE(c, obj);
if (!evt) return JS_TRUE;
evt->event_phase |= GF_DOM_EVENT_PHASE_PREVENT;
return JS_TRUE;
static JSBool event_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
JSString *s;
- GF_DOM_Event *evt = JS_GetPrivate(c, obj);
+ GF_DOM_Event *evt = SMJS_GET_PRIVATE(c, obj);
if (evt==NULL) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
switch (SMJS_ID_TO_INT(id)) {
{
XMLHTTPContext *ctx;
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (ctx) {
if (ctx->onreadystatechange) gf_js_remove_root(c, &(ctx->onreadystatechange), GF_JSGC_VAL);
xml_http_reset(ctx);
GF_SAFEALLOC(p, XMLHTTPContext);
p->c = c;
p->_this = obj;
- JS_SetPrivate(c, obj, p);
+ SMJS_SET_PRIVATE(c, obj, p);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(obj) );
return JS_TRUE;
}
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
/*reset*/
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
if (ctx->readyState!=1) return JS_TRUE;
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
if (ctx->readyState!=1) return JS_TRUE;
SMJS_OBJ
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
sess = ctx->sess;
SMJS_OBJ
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
/*must be received or loaded*/
SMJS_OBJ
SMJS_ARGS
if (!argc || !JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
if (!JSVAL_CHECK_STRING(argv[0])) return JS_TRUE;
JSString *s;
XMLHTTPContext *ctx;
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
{
XMLHTTPContext *ctx;
if (!JS_InstanceOf(c, obj, &dom_rt->xmlHTTPRequestClass, NULL) ) return JS_TRUE;
- ctx = (XMLHTTPContext *)JS_GetPrivate(c, obj);
+ ctx = (XMLHTTPContext *)SMJS_GET_PRIVATE(c, obj);
if (!ctx) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
GF_SAFEALLOC(nl, DOMNodeList);
dcci_prop_collect(nl, n, ns, name, deep, 1);
new_obj = JS_NewObject(c, &dom_rt->domNodeListClass, 0, 0);
- JS_SetPrivate(c, new_obj, nl);
+ SMJS_SET_PRIVATE(c, new_obj, nl);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(new_obj) );
SMJS_FREE(c, ns);
SMJS_FREE(c, name);
if (n) {
if (n->sgprivate->interact && n->sgprivate->interact->js_binding && n->sgprivate->interact->js_binding->node) {
JSObject *obj = n->sgprivate->interact->js_binding->node;
- JS_SetPrivate(c, obj, NULL);
+ SMJS_SET_PRIVATE(c, obj, NULL);
n->sgprivate->interact->js_binding->node=NULL;
if (gf_list_del_item(sg->objects, obj)>=0) {
gf_js_remove_root(c, &(n->sgprivate->interact->js_binding->node), GF_JSGC_OBJECT);
JSObject *obj = gf_list_get(sg->objects, 0);
n = dom_get_node(c, obj);
if (n) {
- JS_SetPrivate(c, obj, NULL);
+ SMJS_SET_PRIVATE(c, obj, NULL);
n->sgprivate->interact->js_binding->node=NULL;
gf_node_unregister(n, NULL);
gf_js_remove_root(c, &(n->sgprivate->interact->js_binding->node), GF_JSGC_OBJECT);
obj = JS_DefineObject(c, global, name, __class, 0, 0 );
gf_node_register(doc->RootNode, NULL);
- JS_SetPrivate(c, obj, doc);
+ SMJS_SET_PRIVATE(c, obj, doc);
doc->document = obj;
}
SMJS_OBJ
SMJS_ARGS
if ((argc!=1) || !JS_InstanceOf(c, obj, &svg_rt->globalClass, NULL)) return JS_TRUE;
- sg = JS_GetPrivate(c, obj);
+ sg = SMJS_GET_PRIVATE(c, obj);
par.uri.url = SMJS_CHARS(c, argv[0]);
par.uri.nb_params = 0;
ScriptAction(sg, GF_JSAPI_OP_LOAD_URL, sg->RootNode, &par);
SMJS_OBJ
SMJS_ARGS
if ((argc!=1) || !JS_InstanceOf(c, obj, &svg_rt->globalClass, NULL)) return JS_TRUE;
- sg = JS_GetPrivate(c, obj);
+ sg = SMJS_GET_PRIVATE(c, obj);
if (!sg) return JS_TRUE;
if (JSVAL_IS_STRING(argv[0])) {
if (!JS_InstanceOf(c, obj, &svg_rt->globalClass, NULL) )
return JS_TRUE;
- sg = JS_GetPrivate(c, obj);
+ sg = SMJS_GET_PRIVATE(c, obj);
if (SMJS_ID_IS_INT(id)) {
switch (SMJS_ID_TO_INT(id)) {
/*namespaceURI*/
rc->x = FIX2FLT(par.pt.x);
rc->y = FIX2FLT(par.pt.y);
rc->sg = n->sgprivate->scenegraph;
- JS_SetPrivate(c, r, rc);
+ SMJS_SET_PRIVATE(c, r, rc);
*vp = OBJECT_TO_JSVAL(r);
return JS_TRUE;
}
rc->w = FIX2FLT(par.rc.width);
rc->h = FIX2FLT(par.rc.height);
rc->sg = n->sgprivate->scenegraph;
- JS_SetPrivate(c, r, rc);
+ SMJS_SET_PRIVATE(c, r, rc);
*vp = OBJECT_TO_JSVAL(r);
return JS_TRUE;
}
gf_mx2d_init(*mx);
gf_mx2d_copy(*mx, ((SVG_Transform*)info.far_ptr)->mat);
- JS_SetPrivate(c, mO, mx);
+ SMJS_SET_PRIVATE(c, mO, mx);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(mO) );
return JS_TRUE;
}
rc->y = FIX2FLT(v->y);
rc->w = FIX2FLT(v->width);
rc->h = FIX2FLT(v->height);
- JS_SetPrivate(c, newObj, rc);
+ SMJS_SET_PRIVATE(c, newObj, rc);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(newObj) );
return JS_TRUE;
}
rgb->r = (u8) (255*FIX2FLT(col->red)) ;
rgb->g = (u8) (255*FIX2FLT(col->green)) ;
rgb->b = (u8) (255*FIX2FLT(col->blue)) ;
- JS_SetPrivate(c, newObj, rgb);
+ SMJS_SET_PRIVATE(c, newObj, rgb);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(newObj) );
return JS_TRUE;
}
rgb->r = (u8) (255*FIX2FLT(paint->color.red) );
rgb->g = (u8) (255*FIX2FLT(paint->color.green) );
rgb->b = (u8) (255*FIX2FLT(paint->color.blue) );
- JS_SetPrivate(c, newObj, rgb);
+ SMJS_SET_PRIVATE(c, newObj, rgb);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(newObj) );
return JS_TRUE;
}
if (JSVAL_IS_NULL(argv[1]) || !JSVAL_IS_OBJECT(argv[1])) return JS_TRUE;
mO = JSVAL_TO_OBJECT(argv[1]);
if (!JS_InstanceOf(c, mO, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx = JS_GetPrivate(c, mO);
+ mx = SMJS_GET_PRIVATE(c, mO);
if (!mx) return JS_TRUE;
szName = SMJS_CHARS(c, argv[0]);
if (JSVAL_IS_NULL(argv[1]) || !JSVAL_IS_OBJECT(argv[1])) return JS_TRUE;
rO = JSVAL_TO_OBJECT(argv[1]);
if (!JS_InstanceOf(c, rO, &svg_rt->rectClass, NULL) ) return JS_TRUE;
- rc = JS_GetPrivate(c, rO);
+ rc = SMJS_GET_PRIVATE(c, rO);
if (!rc) return JS_TRUE;
szName = SMJS_CHARS(c, argv[0]);
if (JSVAL_IS_NULL(argv[1]) || !JSVAL_IS_OBJECT(argv[1])) return JS_TRUE;
pO = JSVAL_TO_OBJECT(argv[1]);
if (!JS_InstanceOf(c, pO, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- path = JS_GetPrivate(c, pO);
+ path = SMJS_GET_PRIVATE(c, pO);
if (!path) return JS_TRUE;
szName = SMJS_CHARS(c, argv[0]);
colO = JSVAL_TO_OBJECT(argv[1]);
if (!colO) return JS_TRUE;
if (!JS_InstanceOf(c, colO, &svg_rt->rgbClass, NULL) ) return JS_TRUE;
- rgb = JS_GetPrivate(c, colO);
+ rgb = SMJS_GET_PRIVATE(c, colO);
if (!rgb) return JS_TRUE;
SMJS_SET_RVAL(JSVAL_VOID);
rc->y = FIX2FLT(par.bbox.min_edge.y);
rc->w = FIX2FLT(par.bbox.max_edge.x - par.bbox.min_edge.x);
rc->h = FIX2FLT(par.bbox.max_edge.y - par.bbox.min_edge.y);
- JS_SetPrivate(c, rO, rc);
+ SMJS_SET_PRIVATE(c, rO, rc);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(rO) );
} else {
SMJS_SET_RVAL( JSVAL_VOID );
JSObject *mO = JS_NewObject(c, &svg_rt->matrixClass, 0, 0);
GF_Matrix2D *mx = gf_malloc(sizeof(GF_Matrix2D));
gf_mx2d_from_mx(mx, &par.mx);
- JS_SetPrivate(c, mO, mx);
+ SMJS_SET_PRIVATE(c, mO, mx);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(mO) );
return JS_TRUE;
}
JS_ValueToNumber(c, argv[5], &v);
mx->m[5] = FLT2FIX(v);
mat = JS_NewObject(c, &svg_rt->matrixClass, 0, 0);
- JS_SetPrivate(c, mat, mx);
+ SMJS_SET_PRIVATE(c, mat, mx);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(mat) );
return JS_TRUE;
}
GF_SAFEALLOC(rc, rectCI);
r = JS_NewObject(c, &svg_rt->rectClass, 0, 0);
- JS_SetPrivate(c, r, rc);
+ SMJS_SET_PRIVATE(c, r, rc);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(r) );
return JS_TRUE;
}
GF_SAFEALLOC(pt, pointCI);
r = JS_NewObject(c, &svg_rt->pointClass, 0, 0);
- JS_SetPrivate(c, r, pt);
+ SMJS_SET_PRIVATE(c, r, pt);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(r) );
return JS_TRUE;
}
GF_SAFEALLOC(path, pathCI);
p = JS_NewObject(c, &svg_rt->pathClass, 0, 0);
- JS_SetPrivate(c, p, path);
+ SMJS_SET_PRIVATE(c, p, path);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(p) );
return JS_TRUE;
}
col->g = JSVAL_TO_INT(argv[1]);
col->b = JSVAL_TO_INT(argv[2]);
p = JS_NewObject(c, &svg_rt->rgbClass, 0, 0);
- JS_SetPrivate(c, p, col);
+ SMJS_SET_PRIVATE(c, p, col);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(p) );
return JS_TRUE;
}
static void baseCI_finalize(JSContext *c, JSObject *obj)
{
- void *data = JS_GetPrivate(c, obj);
+ void *data = SMJS_GET_PRIVATE(c, obj);
if (data) gf_free(data);
}
{
if (!JS_InstanceOf(c, obj, &svg_rt->rgbClass, NULL) ) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
- rgbCI *col = JS_GetPrivate(c, obj);
+ rgbCI *col = SMJS_GET_PRIVATE(c, obj);
if (!col) return JS_TRUE;
switch (SMJS_ID_TO_INT(id)) {
case 0: *vp = INT_TO_JSVAL(col->r); return JS_TRUE;
{
if (!JS_InstanceOf(c, obj, &svg_rt->rgbClass, NULL) ) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
- rgbCI *col = JS_GetPrivate(c, obj);
+ rgbCI *col = SMJS_GET_PRIVATE(c, obj);
if (!col) return JS_TRUE;
switch (SMJS_ID_TO_INT(id)) {
case 0: col->r = JSVAL_TO_INT(*vp); return JS_TRUE;
{
if (!JS_InstanceOf(c, obj, &svg_rt->rectClass, NULL) ) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
- rectCI *rc = JS_GetPrivate(c, obj);
+ rectCI *rc = SMJS_GET_PRIVATE(c, obj);
if (!rc) return JS_TRUE;
if (rc->sg) {
GF_JSAPIParam par;
if (!JS_InstanceOf(c, obj, &svg_rt->rectClass, NULL) ) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
jsdouble d;
- rectCI *rc = JS_GetPrivate(c, obj);
+ rectCI *rc = SMJS_GET_PRIVATE(c, obj);
if (!rc) return JS_TRUE;
JS_ValueToNumber(c, *vp, &d);
switch (SMJS_ID_TO_INT(id)) {
{
if (!JS_InstanceOf(c, obj, &svg_rt->pointClass, NULL) ) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
- pointCI *pt = JS_GetPrivate(c, obj);
+ pointCI *pt = SMJS_GET_PRIVATE(c, obj);
if (!pt) return JS_TRUE;
if (pt->sg) {
GF_JSAPIParam par;
if (!JS_InstanceOf(c, obj, &svg_rt->pointClass, NULL) ) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
jsdouble d;
- pointCI *pt = JS_GetPrivate(c, obj);
+ pointCI *pt = SMJS_GET_PRIVATE(c, obj);
if (!pt) return JS_TRUE;
JS_ValueToNumber(c, *vp, &d);
switch (SMJS_ID_TO_INT(id)) {
}
}
obj = JS_NewObject(c, &svg_rt->pathClass, 0, 0);
- JS_SetPrivate(c, obj, p);
+ SMJS_SET_PRIVATE(c, obj, p);
return obj;
#endif
}
{
pathCI *p;
GF_SAFEALLOC(p, pathCI);
- JS_SetPrivate(c, obj, p);
+ SMJS_SET_PRIVATE(c, obj, p);
*rval = OBJECT_TO_JSVAL(obj);
return JS_TRUE;
}
static void pathCI_finalize(JSContext *c, JSObject *obj)
{
- pathCI *p = JS_GetPrivate(c, obj);
+ pathCI *p = SMJS_GET_PRIVATE(c, obj);
if (p) {
if (p->pts) gf_free(p->pts);
if (p->tags) gf_free(p->tags);
{
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
if (SMJS_ID_IS_INT(id)) {
- pathCI *p = JS_GetPrivate(c, obj);
+ pathCI *p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
switch (SMJS_ID_TO_INT(id)) {
case 0: *vp = INT_TO_JSVAL(p->nb_coms); return JS_TRUE;
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- p = JS_GetPrivate(c, obj);
+ p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
if ((argc!=1) || !JSVAL_IS_INT(argv[0])) return JS_TRUE;
idx = JSVAL_TO_INT(argv[0]);
SMJS_ARGS
u32 i, idx, param_idx, pt_idx;
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- p = JS_GetPrivate(c, obj);
+ p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
if ((argc!=2) || !JSVAL_IS_INT(argv[0]) || !JSVAL_IS_INT(argv[1])) return JS_TRUE;
idx = JSVAL_TO_INT(argv[0]);
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- p = JS_GetPrivate(c, obj);
+ p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
if ((argc!=2) || !JSVAL_IS_NUMBER(argv[0]) || !JSVAL_IS_NUMBER(argv[1])) return JS_TRUE;
JS_ValueToNumber(c, argv[0], &x);
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- p = JS_GetPrivate(c, obj);
+ p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
if ((argc!=2) || !JSVAL_IS_NUMBER(argv[0]) || !JSVAL_IS_NUMBER(argv[1])) return JS_TRUE;
JS_ValueToNumber(c, argv[0], &x);
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- p = JS_GetPrivate(c, obj);
+ p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
if ((argc!=4) || !JSVAL_IS_NUMBER(argv[0]) || !JSVAL_IS_NUMBER(argv[1]) || !JSVAL_IS_NUMBER(argv[2]) || !JSVAL_IS_NUMBER(argv[3])) return JS_TRUE;
JS_ValueToNumber(c, argv[0], &x1);
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- p = JS_GetPrivate(c, obj);
+ p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
if ((argc!=6) || !JSVAL_IS_NUMBER(argv[0]) || !JSVAL_IS_NUMBER(argv[1]) || !JSVAL_IS_NUMBER(argv[2]) || !JSVAL_IS_NUMBER(argv[3]) || !JSVAL_IS_NUMBER(argv[4]) || !JSVAL_IS_NUMBER(argv[5])) return JS_TRUE;
JS_ValueToNumber(c, argv[0], &x1);
pathCI *p;
SMJS_OBJ
if (!JS_InstanceOf(c, obj, &svg_rt->pathClass, NULL) ) return JS_TRUE;
- p = JS_GetPrivate(c, obj);
+ p = SMJS_GET_PRIVATE(c, obj);
if (!p) return JS_TRUE;
if (argc) return JS_TRUE;
p->tags = gf_realloc(p->tags, sizeof(u8)*(p->nb_coms+1) );
{
GF_Matrix2D *mx;
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx = JS_GetPrivate(c, obj);
+ mx = SMJS_GET_PRIVATE(c, obj);
if (!SMJS_ID_IS_INT(id)) return JS_TRUE;
if (!mx) return JS_TRUE;
jsdouble d;
GF_Matrix2D *mx;
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx = JS_GetPrivate(c, obj);
+ mx = SMJS_GET_PRIVATE(c, obj);
if (!SMJS_ID_IS_INT(id)) return JS_TRUE;
JS_ValueToNumber(c, *vp, &d);
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx = JS_GetPrivate(c, obj);
+ mx = SMJS_GET_PRIVATE(c, obj);
if (!mx || (argc!=1)) return JS_TRUE;
if (!JSVAL_IS_INT(argv[0])) return JS_TRUE;
switch (JSVAL_TO_INT(argv[0])) {
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx1 = JS_GetPrivate(c, obj);
+ mx1 = SMJS_GET_PRIVATE(c, obj);
if (!mx1 || (argc!=1)) return JS_TRUE;
if (!JSVAL_IS_OBJECT(argv[0])) return JS_TRUE;
mat = JSVAL_TO_OBJECT(argv[0]);
if (!JS_InstanceOf(c, mat, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx2 = JS_GetPrivate(c, mat);
+ mx2 = SMJS_GET_PRIVATE(c, mat);
if (!mx2) return JS_TRUE;
gf_mx2d_add_matrix(mx1, mx2);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(obj) );
GF_Matrix2D *mx1;
SMJS_OBJ
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx1 = JS_GetPrivate(c, obj);
+ mx1 = SMJS_GET_PRIVATE(c, obj);
if (!mx1) return JS_TRUE;
gf_mx2d_inverse(mx1);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(obj) );
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx1 = JS_GetPrivate(c, obj);
+ mx1 = SMJS_GET_PRIVATE(c, obj);
if (!mx1 || (argc!=2)) return JS_TRUE;
JS_ValueToNumber(c, argv[0], &x);
JS_ValueToNumber(c, argv[1], &y);
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx1 = JS_GetPrivate(c, obj);
+ mx1 = SMJS_GET_PRIVATE(c, obj);
if (!mx1 || (argc!=1)) return JS_TRUE;
JS_ValueToNumber(c, argv[0], &scale);
gf_mx2d_init(mx2);
SMJS_OBJ
SMJS_ARGS
if (!JS_InstanceOf(c, obj, &svg_rt->matrixClass, NULL) ) return JS_TRUE;
- mx1 = JS_GetPrivate(c, obj);
+ mx1 = SMJS_GET_PRIVATE(c, obj);
if (!mx1 || (argc!=1)) return JS_TRUE;
JS_ValueToNumber(c, argv[0], &angle);
gf_mx2d_init(mx2);
rc->w = FIX2FLT(width);
rc->h = FIX2FLT(height);
rc->sg = NULL;
- JS_SetPrivate(c, r, rc);
+ SMJS_SET_PRIVATE(c, r, rc);
return OBJECT_TO_JSVAL(r);
}
pt->x = FIX2FLT(x);
pt->y = FIX2FLT(y);
pt->sg = NULL;
- JS_SetPrivate(c, p, pt);
+ SMJS_SET_PRIVATE(c, p, pt);
return OBJECT_TO_JSVAL(p);
}
JS_InitStandardClasses(scene->svg_js->js_ctx, scene->svg_js->global);
/*remember pointer to scene graph!!*/
- JS_SetPrivate(scene->svg_js->js_ctx, scene->svg_js->global, scene);
+ SMJS_SET_PRIVATE(scene->svg_js->js_ctx, scene->svg_js->global, scene);
{
JSPropertySpec globalClassProps[] = {
{"connected", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED | JSPROP_READONLY, 0, 0},
gf_sg_lock_javascript(sg->svg_js->js_ctx, 1);
- prev_event = JS_GetPrivate(sg->svg_js->js_ctx, sg->svg_js->event);
- JS_SetPrivate(sg->svg_js->js_ctx, sg->svg_js->event, event);
+ prev_event = SMJS_GET_PRIVATE(sg->svg_js->js_ctx, sg->svg_js->event);
+ SMJS_SET_PRIVATE(sg->svg_js->js_ctx, sg->svg_js->event, event);
ret = JS_EvaluateScript(sg->svg_js->js_ctx, sg->svg_js->global, utf8_script, strlen(utf8_script), 0, 0, &rval);
- JS_SetPrivate(sg->svg_js->js_ctx, sg->svg_js->event, prev_event);
+ SMJS_SET_PRIVATE(sg->svg_js->js_ctx, sg->svg_js->event, prev_event);
if (ret==JS_FALSE) {
char *sep = strchr(utf8_script, '(');
#endif
gf_sg_lock_javascript(svg_js->js_ctx, 1);
- prev_event = JS_GetPrivate(svg_js->js_ctx, svg_js->event);
+ prev_event = SMJS_GET_PRIVATE(svg_js->js_ctx, svg_js->event);
/*break loops*/
if (prev_event && (prev_event->type==event->type) && (prev_event->target==event->target)) {
gf_sg_lock_javascript(svg_js->js_ctx, 0);
return 0;
}
- JS_SetPrivate(svg_js->js_ctx, svg_js->event, event);
+ SMJS_SET_PRIVATE(svg_js->js_ctx, svg_js->event, event);
svg_js->in_script = 1;
JSObject *evt;
jsval argv[1];
evt = gf_dom_new_event(svg_js->js_ctx);
- JS_SetPrivate(svg_js->js_ctx, evt, event);
+ SMJS_SET_PRIVATE(svg_js->js_ctx, evt, event);
argv[0] = OBJECT_TO_JSVAL(evt);
if (hdl->js_fun) {
JS_ClearPendingException(svg_js->js_ctx);
}
- JS_SetPrivate(svg_js->js_ctx, svg_js->event, prev_event);
+ SMJS_SET_PRIVATE(svg_js->js_ctx, svg_js->event, prev_event);
if (txt && hdl) hdl->js_fun=0;
while (svg_js->force_gc) {
gf_node_register(node, NULL);
obj = JS_NewObject(priv->js_ctx, &js_rt->SFNodeClass, 0, 0);
- JS_SetPrivate(priv->js_ctx, obj, field);
+ SMJS_SET_PRIVATE(priv->js_ctx, obj, field);
field->obj = obj;
gf_list_add(priv->js_cache, obj);
if (!JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
- ptr = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]));
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]));
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
n1 = * ((GF_Node **)ptr->field.far_ptr);
if (!n1) return JS_FALSE;
/*regular route*/
if (JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[2]), &js_rt->SFNodeClass, NULL) && JSVAL_IS_STRING(argv[3]) ) {
GF_Route *r;
- ptr = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[2]));
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[2]));
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
n2 = * ((GF_Node **)ptr->field.far_ptr);
if (!n2) return JS_FALSE;
if (!JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
if (JSVAL_IS_STRING(argv[1]) && JSVAL_IS_NULL(argv[2]) && JSVAL_IS_NULL(argv[3])) {
- ptr = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]));
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]));
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
n1 = * ((GF_Node **)ptr->field.far_ptr);
f1 = SMJS_CHARS(c, argv[1]);
if (!JSVAL_IS_OBJECT(argv[2]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[2]), &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
if (!JSVAL_IS_STRING(argv[1]) || !JSVAL_IS_STRING(argv[3])) return JS_FALSE;
- ptr = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0]));
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]));
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
n1 = * ((GF_Node **)ptr->field.far_ptr);
- ptr = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[2]));
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[2]));
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
n2 = * ((GF_Node **)ptr->field.far_ptr);
JS_ValueToObject(c, argv[0], &p);
- f = (GF_JSField *) JS_GetPrivate(c, p);
+ f = (GF_JSField *) SMJS_GET_PRIVATE(c, p);
if (!f || !f->js_list) return JS_FALSE;
JS_GetArrayLength(c, f->js_list, &len);
static void JS_ObjectDestroyed(JSContext *c, JSObject *obj, GF_JSField *ptr, Bool is_js_call)
{
- JS_SetPrivate(c, obj, NULL);
+ SMJS_SET_PRIVATE(c, obj, NULL);
if (ptr) {
/*if ptr is a node, remove node binding*/
JSString *s;
jsval item;
SMJS_OBJ
- GF_JSField *f = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *f = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (!f) return JS_FALSE;
strcpy(str, "");
break;
default:
if (JSVAL_IS_OBJECT(item)) {
- GF_JSField *sf = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(item));
+ GF_JSField *sf = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(item));
sffield_toString(str, sf->field.far_ptr, sf->field.fieldType);
}
break;
field->field.fieldType = GF_SG_VRML_SFNODE;
field->node = NULL;
field->field.far_ptr = &field->node;
- JS_SetPrivate(c, obj, field);
+ SMJS_SET_PRIVATE(c, obj, field);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(obj) );
return JS_TRUE;
}
}
static void node_finalize_ex(JSContext *c, JSObject *obj, Bool is_js_call)
{
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
JS_ObjectDestroyed(c, obj, ptr, is_js_call);
GF_ScriptPriv *priv;
if (! JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
- ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
n = * ((GF_Node **)ptr->field.far_ptr);
priv = JS_GetScriptStack(c);
char *fieldname;
GF_JSField *ptr;
if (! JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
- ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
/*this is the prototype*/
if (!ptr) {
const char *name;
SMJS_OBJ
if (! JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
- f = (GF_JSField *) JS_GetPrivate(c, obj);
+ f = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (!f) return JS_FALSE;
str[0] = 0;
GF_JSField *f;
SMJS_OBJ
if (! JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
- f = (GF_JSField *) JS_GetPrivate(c, obj);
+ f = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (!f) return JS_FALSE;
n = * ((GF_Node **)f->field.far_ptr);
/* Generic field destructor */
static void field_finalize(JSContext *c, JSObject *obj)
{
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
JS_ObjectDestroyed(c, obj, ptr, 1);
if (!ptr) return;
v->pixels = (u8 *) gf_malloc(sizeof(u8) * nbComp * w * h);
len = MIN(nbComp * w * h, pixels->count);
for (i=0; i<len; i++) v->pixels[i] = (u8) pixels->vals[i];
- JS_SetPrivate(c, obj, field);
+ SMJS_SET_PRIVATE(c, obj, field);
return field;
}
static JSBool SMJS_FUNCTION(SFImageConstructor)
w = JSVAL_TO_INT(argv[0]);
h = JSVAL_TO_INT(argv[1]);
nbComp = JSVAL_TO_INT(argv[2]);
- pixels = (MFInt32 *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[3])))->field.far_ptr;
+ pixels = (MFInt32 *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[3])))->field.far_ptr;
SFImage_Create(c, obj, w, h, nbComp, pixels);
return JS_TRUE;
}
static JSBool image_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
GF_ScriptPriv *priv = JS_GetScriptStack(c);
- GF_JSField *val = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *val = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
SFImage *sfi;
if (!val) return JS_FALSE;
sfi = (SFImage*)val->field.far_ptr;
case 3:
{
u32 i, len;
- JSObject *an_obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFInt32Class, 0, priv->js_obj);
+ JSObject *an_obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFInt32Class, priv->js_obj);
len = sfi->width*sfi->height*sfi->numComponents;
for (i=0; i<len; i++) {
jsval newVal = INT_TO_JSVAL(sfi->pixels[i]);
{
u32 ival;
Bool changed = 0;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
SFImage *sfi;
/*this is the prototype*/
MFInt32 *pixels;
u32 len, i;
if (!JSVAL_IS_OBJECT(*vp) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(*vp), &js_rt->MFInt32Class, NULL)) return JS_FALSE;
- pixels = (MFInt32 *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(*vp)))->field.far_ptr;
+ pixels = (MFInt32 *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(*vp)))->field.far_ptr;
if (sfi->pixels) gf_free(sfi->pixels);
len = sfi->width*sfi->height*sfi->numComponents;
sfi->pixels = (char *) gf_malloc(sizeof(char)*len);
field->field.fieldType = GF_SG_VRML_SFVEC2F;
v->x = x;
v->y = y;
- JS_SetPrivate(c, obj, field);
+ SMJS_SET_PRIVATE(c, obj, field);
return field;
}
static JSBool SMJS_FUNCTION(SFVec2fConstructor)
}
static JSBool vec2f_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
- GF_JSField *val = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *val = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (SMJS_ID_IS_INT(id)) {
switch (SMJS_ID_TO_INT(id)) {
jsdouble d;
Fixed v;
Bool changed = 0;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
/*this is the prototype*/
if (!ptr) {
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec2fClass, NULL))
return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec2f_Create(c, pNew, v1->x + v2->x, v1->y + v2->y);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec2fClass, NULL))
return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec2f_Create(c, pNew, v1->x - v2->x, v1->y - v2->y);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
SFVec2f *v1;
JSObject *pNew;
SMJS_OBJ
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec2f_Create(c, pNew, -v1->x , -v1->y );
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
SMJS_ARGS
SMJS_OBJ
if (argc<=0) return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, SMJS_GET_PARENT(c, obj));
JS_ValueToNumber(c, argv[0], &d );
v = FLT2FIX( d);
SFVec2f_Create(c, pNew, gf_mulfix(v1->x , v), gf_mulfix(v1->y, v) );
SMJS_ARGS
SMJS_OBJ
if (argc<=0) return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, SMJS_GET_PARENT(c, obj));
JS_ValueToNumber(c, argv[0], &d );
v = FLT2FIX(d);
SFVec2f_Create(c, pNew, gf_divfix(v1->x, v), gf_divfix(v1->y, v));
Double res;
SFVec2f *v1;
SMJS_OBJ
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
res = FIX2FLT(gf_v2d_len(v1));
SMJS_SET_RVAL( JS_MAKE_DOUBLE(c, res) );
return JS_TRUE;
Fixed res;
JSObject *pNew;
SMJS_OBJ
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
res = gf_v2d_len(v1);
- pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, JS_GetParent(c, obj));
+ pNew = JS_NewObject(c, &js_rt->SFVec2fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec2f_Create(c, pNew, gf_divfix(v1->x, res), gf_divfix(v1->y, res) );
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec2fClass, NULL))
return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
SMJS_SET_RVAL( JS_MAKE_DOUBLE(c, FIX2FLT( gf_mulfix(v1->x, v2->x) + gf_mulfix(v1->y, v2->y) ) ) );
return JS_TRUE;
}
v->x = x;
v->y = y;
v->z = z;
- JS_SetPrivate(c, obj, field);
+ SMJS_SET_PRIVATE(c, obj, field);
return field;
}
static JSBool SMJS_FUNCTION(SFVec3fConstructor)
}
static JSBool vec3f_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
- GF_JSField *val = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *val = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (SMJS_ID_IS_INT(id)) {
switch (SMJS_ID_TO_INT(id)) {
case 0: *vp = JS_MAKE_DOUBLE(c, FIX2FLT( ((SFVec3f*)val->field.far_ptr)->x) ); break;
jsdouble d;
Fixed v;
Bool changed = 0;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
/*this is the prototype*/
if (!ptr) {
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec3fClass, NULL))
return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec3f_Create(c, pNew, v1->x + v2->x, v1->y + v2->y, v1->z + v2->z);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec3fClass, NULL))
return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec3f_Create(c, pNew, v1->x - v2->x, v1->y - v2->y, v1->z - v2->z);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
SFVec3f *v1;
JSObject *pNew;
SMJS_OBJ
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec3f_Create(c, pNew, -v1->x , -v1->y , -v1->z );
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
SMJS_ARGS
if (argc<=0) return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
JS_ValueToNumber(c, argv[0], &d );
v = FLT2FIX(d);
SFVec3f_Create(c, pNew, gf_mulfix(v1->x, v), gf_mulfix(v1->y, v), gf_mulfix(v1->z, v) );
SMJS_OBJ
SMJS_ARGS
if (argc<=0) return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
JS_ValueToNumber(c, argv[0], &d );
v = FLT2FIX(d);
SFVec3f_Create(c, pNew, gf_divfix(v1->x, v), gf_divfix(v1->y, v), gf_divfix(v1->z, v));
Fixed res;
SFVec3f *v1;
SMJS_OBJ
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
res = gf_vec_len(*v1);
SMJS_SET_RVAL( JS_MAKE_DOUBLE(c, FIX2FLT(res) ) );
return JS_TRUE;
SFVec3f v1;
JSObject *pNew;
SMJS_OBJ
- v1 = * (SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
+ v1 = * (SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
gf_vec_norm(&v1);
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec3f_Create(c, pNew, v1.x, v1.y, v1.z);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec3fClass, NULL))
return JS_FALSE;
- v1 = *(SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = *(SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ v1 = *(SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = *(SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
SMJS_SET_RVAL( JS_MAKE_DOUBLE(c, FIX2FLT(gf_vec_dot(v1, v2)) ) );
return JS_TRUE;
}
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec3fClass, NULL))
return JS_FALSE;
- v1 = * (SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = * (SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ v1 = * (SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = * (SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
v3 = gf_vec_cross(v1, v2);
SFVec3f_Create(c, pNew, v3.x, v3.y, v3.z);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
v->y = y;
v->z = z;
v->q = q;
- JS_SetPrivate(c, obj, field);
+ SMJS_SET_PRIVATE(c, obj, field);
return field;
}
static JSBool SMJS_FUNCTION(SFRotationConstructor)
if (!JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;
an_obj = JSVAL_TO_OBJECT(argv[0]);
if (! JS_InstanceOf(c, an_obj, &js_rt->SFVec3fClass, NULL)) return JS_FALSE;
- v1 = * (SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, an_obj))->field.far_ptr;
+ v1 = * (SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, an_obj))->field.far_ptr;
if (JSVAL_IS_DOUBLE(argv[1])) {
JS_ValueToNumber(c, argv[1], &a);
SFRotation_Create(c, obj, v1.x, v1.y, v1.z, FLT2FIX(a));
if (!JSVAL_IS_OBJECT(argv[1])) return JS_FALSE;
an_obj = JSVAL_TO_OBJECT(argv[1]);
if (!JS_InstanceOf(c, an_obj, &js_rt->SFVec3fClass, NULL)) return JS_FALSE;
- v2 = * (SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, an_obj))->field.far_ptr;
+ v2 = * (SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, an_obj))->field.far_ptr;
l1 = gf_vec_len(v1);
l2 = gf_vec_len(v2);
dot = gf_divfix(gf_vec_dot(v1, v2), gf_mulfix(l1, l2) );
static JSBool rot_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
- GF_JSField *val = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *val = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (SMJS_ID_IS_INT(id)) {
switch (SMJS_ID_TO_INT(id)) {
case 0: *vp = JS_MAKE_DOUBLE(c, FIX2FLT( ((SFRotation*)val->field.far_ptr)->x)); break;
jsdouble d;
Fixed v;
Bool changed = 0;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
/*this is the prototype*/
if (!ptr) {
SFRotation r;
JSObject *pNew;
SMJS_OBJ
- r = * (SFRotation *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ r = * (SFRotation *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec3f_Create(c, pNew, r.x, r.y, r.z);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
SFRotation r;
JSObject *pNew;
SMJS_OBJ
- r = * (SFRotation *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- pNew = JS_NewObject(c, &js_rt->SFRotationClass, 0, JS_GetParent(c, obj));
+ r = * (SFRotation *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ pNew = JS_NewObject(c, &js_rt->SFRotationClass, 0, SMJS_GET_PARENT(c, obj));
SFRotation_Create(c, pNew, r.x, r.y, r.z, r.q-GF_PI);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFRotationClass, NULL))
return JS_FALSE;
- r1 = * (SFRotation *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- r2 = * (SFRotation *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ r1 = * (SFRotation *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ r2 = * (SFRotation *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
q1 = gf_quat_from_rotation(r1);
q2 = gf_quat_from_rotation(r2);
q1 = gf_quat_multiply(&q1, &q2);
r1 = gf_quat_to_rotation(&q1);
- pNew = JS_NewObject(c, &js_rt->SFRotationClass, 0, JS_GetParent(c, obj));
+ pNew = JS_NewObject(c, &js_rt->SFRotationClass, 0, SMJS_GET_PARENT(c, obj));
SFRotation_Create(c, pNew, r1.x, r1.y, r1.z, r1.q);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec3fClass, NULL))
return JS_FALSE;
- r = *(SFRotation *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v = *(SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ r = *(SFRotation *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v = *(SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
gf_mx_init(mx);
gf_mx_add_rotation(&mx, r.q, r.x, r.y, r.z);
gf_mx_apply_vec(&mx, &v);
- pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, JS_GetParent(c, obj));
+ pNew = JS_NewObject(c, &js_rt->SFVec3fClass, 0, SMJS_GET_PARENT(c, obj));
SFVec3f_Create(c, pNew, v.x, v.y, v.z);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
if (argc<=0 || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFVec3fClass, NULL))
return JS_FALSE;
- ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
r = (SFRotation *) ptr->field.far_ptr;
- v = *(SFVec3f *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ v = *(SFVec3f *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
r->x = v.x;
r->y = v.y;
if (!JSVAL_IS_DOUBLE(argv[1]) || !JSVAL_IS_OBJECT(argv[0]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[0]), &js_rt->SFRotationClass, NULL)) return JS_FALSE;
- v1 = *(SFRotation *) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
- v2 = *(SFRotation *) ((GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
+ v1 = *(SFRotation *) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
+ v2 = *(SFRotation *) ((GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0])))->field.far_ptr;
JS_ValueToNumber(c, argv[1], &d );
q1 = gf_quat_from_rotation(v1);
q2 = gf_quat_from_rotation(v2);
q1 = gf_quat_slerp(q1, q2, FLT2FIX( d));
res = gf_quat_to_rotation(&q1);
- pNew = JS_NewObject(c, &js_rt->SFRotationClass, 0, JS_GetParent(c, obj));
+ pNew = JS_NewObject(c, &js_rt->SFRotationClass, 0, SMJS_GET_PARENT(c, obj));
SFRotation_Create(c, pNew, res.x, res.y, res.z, res.q);
SMJS_SET_RVAL( OBJECT_TO_JSVAL(pNew) );
return JS_TRUE;
v->red = r;
v->green = g;
v->blue = b;
- JS_SetPrivate(c, obj, field);
+ SMJS_SET_PRIVATE(c, obj, field);
return field;
}
static JSBool SMJS_FUNCTION(SFColorConstructor)
}
static JSBool color_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp)
{
- GF_JSField *val = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *val = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (SMJS_ID_IS_INT(id)) {
switch (SMJS_ID_TO_INT(id)) {
case 0: *vp = JS_MAKE_DOUBLE(c, FIX2FLT( ((SFColor*)val->field.far_ptr)->red)); break;
jsdouble d;
Fixed v;
Bool changed = 0;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
/*this is the prototype*/
if (!ptr) {
if (! SMJS_ID_IS_STRING(id)) return JS_FALSE;
jsdouble h, s, v;
SMJS_OBJ
SMJS_ARGS
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (argc != 3) return JS_FALSE;
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
JS_ValueToNumber( c, argv[0], &h);
JS_ValueToNumber( c, argv[1], &s);
JS_ValueToNumber( c, argv[2], &v);
jsval vec[3];
JSObject *arr;
SMJS_OBJ
- v1 = ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
+ v1 = ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
hsv = *v1;
SFColor_toHSV(&hsv);
vec[0] = JS_MAKE_DOUBLE(c, FIX2FLT(hsv.red));
ptr = NewJSField(c); \
ptr->field.fieldType = _fieldType; \
setup_js_array(c, obj, ptr, (jsint) argc, argv); \
- JS_SetPrivate(c, obj, ptr); \
+ SMJS_SET_PRIVATE(c, obj, ptr); \
SMJS_SET_RVAL( OBJECT_TO_JSVAL(obj) ); \
return obj == 0 ? JS_FALSE : JS_TRUE; \
static void array_finalize_ex(JSContext *c, JSObject *obj, Bool is_js_call)
{
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
JS_ObjectDestroyed(c, obj, ptr, 1);
JSBool array_getElement(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *rval)
{
u32 i;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (SMJS_ID_IS_INT(id)) {
i = SMJS_ID_TO_INT(id);
if (ptr->field.fieldType==GF_SG_VRML_MFNODE) {
JSString *str;
char *str_val;
void *sf_slot;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
ind = SMJS_ID_TO_INT(id);
ret = JS_GetArrayLength(c, ptr->js_list, &len);
case GF_SG_VRML_MFVEC3F:
case GF_SG_VRML_MFCOLOR:
case GF_SG_VRML_MFROTATION:
- a_val = OBJECT_TO_JSVAL( JS_ConstructObject(c, the_sf_class, 0, obj) );
+ a_val = OBJECT_TO_JSVAL( SMJS_CONSTRUCT_OBJECT(c, the_sf_class, obj) );
break;
default:
a_val = INT_TO_JSVAL(0);
if (!ptr->owner) return JS_TRUE;
/*get new node*/
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(*rval));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(*rval));
new_n = *(GF_Node**)from->field.far_ptr;
#if 0
break;
case GF_SG_VRML_MFVEC2F:
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(*rval));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(*rval));
gf_sg_vrml_field_copy(& ((MFVec2f *)ptr->field.far_ptr)->vals[ind], from->field.far_ptr, from->field.fieldType);
break;
case GF_SG_VRML_MFVEC3F:
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(*rval));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(*rval));
gf_sg_vrml_field_copy(& ((MFVec3f *)ptr->field.far_ptr)->vals[ind], from->field.far_ptr, from->field.fieldType);
break;
case GF_SG_VRML_MFROTATION:
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(*rval));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(*rval));
gf_sg_vrml_field_copy(& ((MFRotation *)ptr->field.far_ptr)->vals[ind], from->field.far_ptr, from->field.fieldType);
break;
case GF_SG_VRML_MFCOLOR:
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(*rval));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(*rval));
gf_sg_vrml_field_copy(& ((MFColor *)ptr->field.far_ptr)->vals[ind], from->field.far_ptr, from->field.fieldType);
break;
}
u32 len, i, sftype;
JSBool ret;
JSClass *the_sf_class;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (!JSVAL_IS_INT(*val) || JSVAL_TO_INT(*val) < 0) return JS_FALSE;
len = JSVAL_TO_INT(*val);
for (i=0; i<len; i++) {
jsval a_val;
if (the_sf_class) {
- JSObject *an_obj = JS_ConstructObject(c, the_sf_class, 0, obj);
+ JSObject *an_obj = SMJS_CONSTRUCT_OBJECT(c, the_sf_class, obj);
a_val = OBJECT_TO_JSVAL(an_obj );
} else {
switch (sftype) {
{
JSBool ret;
jsuint len;
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (ptr->field.fieldType==GF_SG_VRML_MFNODE) {
len = gf_node_list_get_count(*(GF_ChildNodeItem **)ptr->field.far_ptr);
setup_js_array(c, obj, ptr, 0, 0);
JS_SetArrayLength(c, ptr->js_list, argc);
- JS_SetPrivate(c, obj, ptr);
+ SMJS_SET_PRIVATE(c, obj, ptr);
for (i=0; i<argc; i++) {
if (!JSVAL_IS_OBJECT(argv[i]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[i]), &js_rt->SFVec2fClass, NULL) ) {
- item = JS_ConstructObject(c, &js_rt->SFVec2fClass, 0, obj);
+ item = SMJS_CONSTRUCT_OBJECT(c, &js_rt->SFVec2fClass, obj);
val = OBJECT_TO_JSVAL(item);
JS_SetElement(c, ptr->js_list, i, &val);
} else {
ptr->field.fieldType = GF_SG_VRML_MFVEC3F;
setup_js_array(c, obj, ptr, 0, 0);
JS_SetArrayLength(c, ptr->js_list, argc);
- JS_SetPrivate(c, obj, ptr);
+ SMJS_SET_PRIVATE(c, obj, ptr);
for (i=0; i<argc; i++) {
if (!JSVAL_IS_OBJECT(argv[i]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[i]), &js_rt->SFVec3fClass, NULL) ) {
- item = JS_ConstructObject(c, &js_rt->SFVec3fClass, 0, obj);
+ item = SMJS_CONSTRUCT_OBJECT(c, &js_rt->SFVec3fClass, obj);
val = OBJECT_TO_JSVAL(item);
JS_SetElement(c, ptr->js_list, i, &val);
} else {
ptr->field.fieldType = GF_SG_VRML_MFROTATION;
setup_js_array(c, obj, ptr, 0, 0);
JS_SetArrayLength(c, ptr->js_list, argc);
- JS_SetPrivate(c, obj, ptr);
+ SMJS_SET_PRIVATE(c, obj, ptr);
for (i=0; i<argc; i++) {
if (!JSVAL_IS_OBJECT(argv[i]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[i]), &js_rt->SFRotationClass, NULL) ) {
- item = JS_ConstructObject(c, &js_rt->SFVec3fClass, 0, obj);
+ item = SMJS_CONSTRUCT_OBJECT(c, &js_rt->SFVec3fClass, obj);
val = OBJECT_TO_JSVAL(item);
JS_SetElement(c, ptr->js_list, i, &val);
} else {
ptr->field.fieldType = GF_SG_VRML_MFCOLOR;
setup_js_array(c, obj, ptr, 0, 0);
JS_SetArrayLength(c, ptr->js_list, argc);
- JS_SetPrivate(c, obj, ptr);
+ SMJS_SET_PRIVATE(c, obj, ptr);
for (i=0; i<argc; i++) {
if (!JSVAL_IS_OBJECT(argv[i]) || !JS_InstanceOf(c, JSVAL_TO_OBJECT(argv[i]), &js_rt->SFColorClass, NULL) ) {
- item = JS_ConstructObject(c, &js_rt->SFColorClass, 0, obj);
+ item = SMJS_CONSTRUCT_OBJECT(c, &js_rt->SFColorClass, obj);
val = OBJECT_TO_JSVAL(item);
JS_SetElement(c, ptr->js_list, i, &val);
} else {
GF_JSField *ptr;
SMJS_OBJ
if (! JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
- ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
node = * ((GF_Node **)ptr->field.far_ptr);
GF_JSField *ptr;
SMJS_OBJ
if (! JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) return JS_FALSE;
- ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
assert(ptr->field.fieldType==GF_SG_VRML_SFNODE);
node = * ((GF_Node **)ptr->field.far_ptr);
JS_DefineFunctions(sc->js_ctx, sc->js_obj, globalFunctions );
}
/*remember pointer to scene graph!!*/
- JS_SetPrivate(sc->js_ctx, sc->js_obj, script->sgprivate->scenegraph);
+ SMJS_SET_PRIVATE(sc->js_ctx, sc->js_obj, script->sgprivate->scenegraph);
JS_DefineProperty(sc->js_ctx, sc->js_obj, "FALSE", BOOLEAN_TO_JSVAL(JS_FALSE), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT );
case GF_SG_VRML_SFVEC2F:
{
if (JS_InstanceOf(c, obj, &js_rt->SFVec2fClass, NULL) ) {
- p = (GF_JSField *) JS_GetPrivate(c, obj);
+ p = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
gf_sg_vrml_field_copy(field->far_ptr, p->field.far_ptr, GF_SG_VRML_SFVEC2F);
Script_FieldChanged(c, owner, parent, field);
}
case GF_SG_VRML_SFVEC3F:
{
if (JS_InstanceOf(c, obj, &js_rt->SFVec3fClass, NULL) ) {
- p = (GF_JSField *) JS_GetPrivate(c, obj);
+ p = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
gf_sg_vrml_field_copy(field->far_ptr, p->field.far_ptr, GF_SG_VRML_SFVEC3F);
Script_FieldChanged(c, owner, parent, field);
}
case GF_SG_VRML_SFROTATION:
{
if ( JS_InstanceOf(c, obj, &js_rt->SFRotationClass, NULL) ) {
- p = (GF_JSField *) JS_GetPrivate(c, obj);
+ p = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
gf_sg_vrml_field_copy(field->far_ptr, p->field.far_ptr, GF_SG_VRML_SFROTATION);
Script_FieldChanged(c, owner, parent, field);
}
case GF_SG_VRML_SFCOLOR:
{
if (JS_InstanceOf(c, obj, &js_rt->SFColorClass, NULL) ) {
- p = (GF_JSField *) JS_GetPrivate(c, obj);
+ p = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
gf_sg_vrml_field_copy(field->far_ptr, p->field.far_ptr, GF_SG_VRML_SFCOLOR);
Script_FieldChanged(c, owner, parent, field);
}
if (JSVAL_IS_NULL(val)) {
Script_FieldChanged(c, owner, parent, field);
} else if (JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) {
- GF_Node *n = * (GF_Node**) ((GF_JSField *) JS_GetPrivate(c, obj))->field.far_ptr;
+ GF_Node *n = * (GF_Node**) ((GF_JSField *) SMJS_GET_PRIVATE(c, obj))->field.far_ptr;
* ((GF_Node **)field->far_ptr) = n;
gf_node_register(n, owner);
Script_FieldChanged(c, owner, parent, field);
case GF_SG_VRML_SFIMAGE:
{
if ( JS_InstanceOf(c, obj, &js_rt->SFImageClass, NULL) ) {
- p = (GF_JSField *) JS_GetPrivate(c, obj);
+ p = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
gf_sg_vrml_field_copy(field->far_ptr, p->field.far_ptr, GF_SG_VRML_SFIMAGE);
Script_FieldChanged(c, owner, parent, field);
}
) return;
- p = (GF_JSField *) JS_GetPrivate(c, obj);
+ p = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
JS_GetArrayLength(c, p->js_list, &len);
/*special handling for MF node, reset list first*/
if (!JSVAL_IS_OBJECT(item)) break;
node_obj = JSVAL_TO_OBJECT(item);
if ( !JS_InstanceOf(c, node_obj, &js_rt->SFNodeClass, NULL)) break;
- from = (GF_JSField *) JS_GetPrivate(c, node_obj);
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, node_obj);
child = * ((GF_Node**)from->field.far_ptr);
case GF_SG_VRML_MFVEC2F:
if ( JSVAL_IS_OBJECT(item) && JS_InstanceOf(c, JSVAL_TO_OBJECT(item), &js_rt->SFVec2fClass, NULL) ) {
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(item));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(item));
gf_sg_vrml_field_copy(& ((MFVec2f*)field->far_ptr)->vals[i], from->field.far_ptr, GF_SG_VRML_SFVEC2F);
}
break;
case GF_SG_VRML_MFVEC3F:
if ( JSVAL_IS_OBJECT(item) && JS_InstanceOf(c, JSVAL_TO_OBJECT(item), &js_rt->SFVec3fClass, NULL) ) {
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(item));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(item));
gf_sg_vrml_field_copy(& ((MFVec3f*)field->far_ptr)->vals[i], from->field.far_ptr, GF_SG_VRML_SFVEC3F);
}
break;
case GF_SG_VRML_MFROTATION:
if ( JSVAL_IS_OBJECT(item) && JS_InstanceOf(c, JSVAL_TO_OBJECT(item), &js_rt->SFRotationClass, NULL) ) {
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(item));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(item));
gf_sg_vrml_field_copy(& ((MFRotation*)field->far_ptr)->vals[i], from->field.far_ptr, GF_SG_VRML_SFROTATION);
}
break;
case GF_SG_VRML_MFCOLOR:
if ( JSVAL_IS_OBJECT(item) && JS_InstanceOf(c, JSVAL_TO_OBJECT(item), &js_rt->SFColorClass, NULL) ) {
- from = (GF_JSField *) JS_GetPrivate(c, JSVAL_TO_OBJECT(item));
+ from = (GF_JSField *) SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(item));
gf_sg_vrml_field_copy(& ((MFColor*)field->far_ptr)->vals[i], from->field.far_ptr, GF_SG_VRML_SFCOLOR);
}
break;
JSObject *an_obj;
JS_GetElement(priv->js_ctx, jsf->js_list, (jsint) j, &newVal);
an_obj = JSVAL_TO_OBJECT(newVal);
- if (an_obj) slot = JS_GetPrivate(priv->js_ctx, an_obj);
+ if (an_obj) slot = SMJS_GET_PRIVATE(priv->js_ctx, an_obj);
if (slot && (slot->node==f->node)) {
gf_list_add(temp_objs, an_obj);
break;
if (JS_SetArrayLength(priv->js_ctx, jsf->js_list, count) != JS_TRUE) return;
for (j=0; j<count; j++) {
JSObject *an_obj = gf_list_get(temp_objs, j);
- slot = JS_GetPrivate(priv->js_ctx, an_obj);
+ slot = SMJS_GET_PRIVATE(priv->js_ctx, an_obj);
newVal = OBJECT_TO_JSVAL(an_obj);
JS_SetElement(priv->js_ctx, jsf->js_list, (jsint) j, &newVal);
}
#define SETUP_MF_FIELD \
if (!obj) return JSVAL_NULL; \
- jsf = (GF_JSField *) JS_GetPrivate(priv->js_ctx, obj); \
+ jsf = (GF_JSField *) SMJS_GET_PRIVATE(priv->js_ctx, obj); \
jsf->owner = parent; \
if (parent) gf_node_get_field(parent, field->fieldIndex, &jsf->field); \
return JSVAL_NULL;
obj = node_get_binding(priv, *(GF_Node**) field->far_ptr, 0);
- jsf = JS_GetPrivate(priv->js_ctx, obj);
+ jsf = SMJS_GET_PRIVATE(priv->js_ctx, obj);
if (!jsf->owner)
jsf->owner = parent;
else
case GF_SG_VRML_MFBOOL:
{
MFBool *f = (MFBool *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFBoolClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFBoolClass, priv->js_obj);
SETUP_MF_FIELD
for (i = 0; i<f->count; i++) {
jsval newVal = BOOLEAN_TO_JSVAL(f->vals[i]);
case GF_SG_VRML_MFINT32:
{
MFInt32 *f = (MFInt32 *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFInt32Class, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFInt32Class, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
jsval newVal = INT_TO_JSVAL(f->vals[i]);
case GF_SG_VRML_MFFLOAT:
{
MFFloat *f = (MFFloat *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFFloatClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFFloatClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
jsval newVal = JS_MAKE_DOUBLE(priv->js_ctx, FIX2FLT(f->vals[i]));
case GF_SG_VRML_MFTIME:
{
MFTime *f = (MFTime *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFTimeClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFTimeClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
jsval newVal = JS_MAKE_DOUBLE(priv->js_ctx, f->vals[i]);
case GF_SG_VRML_MFSTRING:
{
MFString *f = (MFString *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFStringClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFStringClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
s = JS_NewStringCopyZ(priv->js_ctx, f->vals[i]);
case GF_SG_VRML_MFURL:
{
MFURL *f = (MFURL *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFUrlClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFUrlClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
if (f->vals[i].OD_ID > 0) {
case GF_SG_VRML_MFVEC2F:
{
MFVec2f *f = (MFVec2f *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFVec2fClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFVec2fClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
JSObject *pf = JS_NewObject(priv->js_ctx, &js_rt->SFVec2fClass, 0, obj);
case GF_SG_VRML_MFVEC3F:
{
MFVec3f *f = (MFVec3f *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFVec3fClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFVec3fClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
JSObject *pf = JS_NewObject(priv->js_ctx, &js_rt->SFVec3fClass, 0, obj);
case GF_SG_VRML_MFROTATION:
{
MFRotation *f = (MFRotation*) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFRotationClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFRotationClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
JSObject *pf = JS_NewObject(priv->js_ctx, &js_rt->SFRotationClass, 0, obj);
case GF_SG_VRML_MFCOLOR:
{
MFColor *f = (MFColor *) field->far_ptr;
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFColorClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFColorClass, priv->js_obj);
SETUP_MF_FIELD
for (i=0; i<f->count; i++) {
JSObject *pf = JS_NewObject(priv->js_ctx, &js_rt->SFColorClass, 0, obj);
{
u32 size;
GF_ChildNodeItem *f = * ((GF_ChildNodeItem **)field->far_ptr);
- obj = JS_ConstructObject(priv->js_ctx, &js_rt->MFNodeClass, 0, priv->js_obj);
+ obj = SMJS_CONSTRUCT_OBJECT(priv->js_ctx, &js_rt->MFNodeClass, priv->js_obj);
SETUP_MF_FIELD
size = gf_node_list_get_count(f);
gf_sg_proto_instanciate(proto_inst);
}
- slot = JS_GetPrivate(priv->js_ctx, pf);
+ slot = SMJS_GET_PRIVATE(priv->js_ctx, pf);
if (!slot->owner) slot->owner = parent;
newVal = OBJECT_TO_JSVAL(pf);
if (!obj) return JSVAL_NULL;
//store field associated with object if needed
if (jsf) {
- JS_SetPrivate(priv->js_ctx, obj, jsf);
+ SMJS_SET_PRIVATE(priv->js_ctx, obj, jsf);
/*if this is the obj corresponding to an existing field/node, store it and prevent GC on object*/
if (parent) {
jsval item;
JS_GetElement(jsf->js_ctx, jsf->js_list, (jsint) i, &item);
if (JSVAL_IS_OBJECT(item)) {
- GF_JSField *afield = JS_GetPrivate(jsf->js_ctx, JSVAL_TO_OBJECT(item));
+ GF_JSField *afield = SMJS_GET_PRIVATE(jsf->js_ctx, JSVAL_TO_OBJECT(item));
if (afield->owner != parent) continue;
if ( gf_list_find(parent->sgprivate->interact->js_binding->fields, afield) < 0) {
/*we don't walk through the list since unprotecting an element could trigger GC which in turn could modify this list content*/
JSObject *obj = gf_list_last(priv->js_cache);
gf_list_rem_last(priv->js_cache);
- jsf = (GF_JSField *) JS_GetPrivate(priv->js_ctx, obj);
+ jsf = (GF_JSField *) SMJS_GET_PRIVATE(priv->js_ctx, obj);
if (!jsf) continue;
/* !!! WARNING !!!
count = gf_list_count(priv->js_cache);
for (i=0; i<count; i++) {
JSObject *obj = gf_list_get(priv->js_cache, i);
- jsf = JS_GetPrivate(priv->js_ctx, obj);
+ jsf = SMJS_GET_PRIVATE(priv->js_ctx, obj);
if (jsf->node && (jsf->node==node)) {
jsf->node = NULL;
/*Ivica patch*/
jsval item;
JS_GetElement(jsf->js_ctx, jsf->js_list, (jsint) j, &item);
if (JSVAL_IS_OBJECT(item)) {
- GF_JSField *afield = JS_GetPrivate(jsf->js_ctx, JSVAL_TO_OBJECT(item));
+ GF_JSField *afield = SMJS_GET_PRIVATE(jsf->js_ctx, JSVAL_TO_OBJECT(item));
afield->owner = NULL;
}
}
GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[DOM Events] Executing script code from VRML handler\n"));
priv = JS_GetScriptStack(hdl->js_context);
- prev_event = JS_GetPrivate(priv->js_ctx, priv->event);
+ prev_event = SMJS_GET_PRIVATE(priv->js_ctx, priv->event);
/*break loops*/
if (prev_event && (prev_event->type==event->type) && (prev_event->target==event->target))
return;
prev_type = event->is_vrml;
event->is_vrml = 1;
- JS_SetPrivate(priv->js_ctx, priv->event, event);
+ SMJS_SET_PRIVATE(priv->js_ctx, priv->event, event);
- JS_SetPrivate(priv->js_ctx, evt, event);
+ SMJS_SET_PRIVATE(priv->js_ctx, evt, event);
argv[0] = OBJECT_TO_JSVAL(evt);
if (hdl->js_fun_val) {
}
event->is_vrml = prev_type;
- JS_SetPrivate(priv->js_ctx, priv->event, prev_event);
+ SMJS_SET_PRIVATE(priv->js_ctx, priv->event, prev_event);
gf_sg_lock_javascript(priv->js_ctx, 0);
{
#ifndef GPAC_DISABLE_VRML
if (js_rt && JS_InstanceOf(c, obj, &js_rt->SFNodeClass, NULL) ) {
- GF_JSField *ptr = (GF_JSField *) JS_GetPrivate(c, obj);
+ GF_JSField *ptr = (GF_JSField *) SMJS_GET_PRIVATE(c, obj);
if (ptr->field.fieldType==GF_SG_VRML_SFNODE) return * ((GF_Node **)ptr->field.far_ptr);
}
#endif
}
gf_odm_lock(cb->odm, 1);
- if (cu->TS < cb->input->TS)
- cu = cu;
-
-
if (codec_reordering) {
cb->input = cb->input->next;
} else {
e = ODM_ValidateOD(odm, &hasInline);
if (e) {
- gf_term_message(odm->term, odm->net_service->url, "MPEG-4 Service Error", e);
+ GF_Terminal *term = odm->term;
+ gf_term_message(term, odm->net_service->url, "MPEG-4 Service Error", e);
gf_odm_disconnect(odm, 1);
- gf_term_lock_net(odm->term, 0);
+ gf_term_lock_net(term, 0);
return;
}
}
if (odm->parentscene==odm->term->root_scene) {
gf_term_lock_net(odm->term, 0);
- gf_mx_v(odm->term->net_mx);
+
evt.type = GF_EVENT_STREAMLIST;
gf_term_send_event(odm->term,&evt);
if (ck) break;
- odm_par = odm->parentscene->root_od->parentscene ? odm->parentscene->root_od->parentscene->root_od : NULL;
+ odm_par = (odm_par->parentscene && odm_par->parentscene->root_od->parentscene ) ? odm_par->parentscene->root_od->parentscene->root_od : NULL;
}
}
if (ck)
goto clock_setup;
- GF_LOG(GF_LOG_ERROR, GF_LOG_MEDIA, ("[ODM] Cannot inherit timeline from parent scene for scene %s\n", odm->net_service->url));
+ GF_LOG(GF_LOG_WARNING, GF_LOG_MEDIA, ("[ODM] Cannot inherit timeline from parent scene for scene %s - new clock will be created\n", odm->net_service->url));
}
/*get clocks namespace (eg, parent scene)*/
ck = gf_clock_attach(ck_namespace, scene, clockID, esd->ESID, flag);
if (!ck) return GF_OUT_OF_MEM;
esd->OCRESID = ck->clockID;
+ /*special case for non-dynamic scenes forcing clock share of all subscene, we assign the
+ parent scene clock to the first clock created in the sunscenes*/
+ if (scene->root_od->parentscene && scene->root_od->parentscene->force_single_timeline && !scene->root_od->parentscene->dyn_ck)
+ scene->root_od->parentscene->dyn_ck = ck;
clock_setup:
/*create a channel for this stream*/
odm->parentscene = scene;
odm->term = scene->root_od->term;
root_od = scene->root_od;
+ if (scene->force_single_timeline) lock_timelines = 1;
url = mo->URLs.vals[0].url;
if (url) {
gf_term_lock_net(scene->root_od->term, 1);
+ /*we may have overriden the time lines in parent scene, thus all objects in this scene have the same clock*/
+ if (scene->root_od->parentscene && scene->root_od->parentscene->force_single_timeline)
+ lock_timelines = 1;
+
/*the first pass is needed to detect objects already inserted and registered with the given nodes, regardless of
the force_new_if_not_attached flag. This ty^pically occurs when a resource is first created then linked to an animation/inline*/
restart:
void gf_scene_generate_views(GF_Scene *scene, char *url)
{
+ char *url_search;
GF_Node *n1, *switcher;
#if USE_TEXTURES
GF_Node *n2;
#endif
GF_Event evt;
gf_sg_reset(scene->graph);
-
+
+ scene->force_single_timeline = 1;
n1 = is_create_node(scene->graph, TAG_MPEG4_OrderedGroup, NULL);
gf_sg_set_root_node(scene->graph, n1);
gf_node_register(n1, NULL);
gf_node_list_add_child( &((GF_ParentNode *)n1)->children, switcher);
((M_Switch*)switcher)->whichChoice = -2;
+ url_search = url;
while (1) {
- char *sep = strchr(url, ':');
+ char *sep = strchr(url_search, ':');
+ /*if :// or :\ is found, skip it*/
+ if (sep && ( ((sep[1] == '/') && (sep[2] == '/')) || (sep[1] == '\\') ) ) {
+ url_search = sep+1;
+ continue;
+ }
+
if (sep) sep[0] = 0;
#if USE_TEXTURES
/*create a shape and bitmap node*/
if (!sep) break;
sep[0] = ':';
url = sep+1;
+ url_search = url;
}
gf_sc_set_option(scene->root_od->term->compositor, GF_OPT_USE_OPENGL, 1);