Benjamin Otte
2007-Jun-27 11:34 UTC
[Swfdec] Branch 'as' - 3 commits - libswfdec/Makefile.am libswfdec/swfdec_as_interpret.c libswfdec/swfdec_js_video.c libswfdec/swfdec_player.c libswfdec/swfdec_player_internal.h libswfdec/swfdec_video_movie_as.c libswfdec/swfdec_video_movie.c
libswfdec/Makefile.am | 2 +- libswfdec/swfdec_as_interpret.c | 13 +++++-------- libswfdec/swfdec_player.c | 9 +++------ libswfdec/swfdec_player_internal.h | 1 + libswfdec/swfdec_video_movie.c | 13 ++++++++++++- libswfdec/swfdec_video_movie_as.c | 7 ++++--- 6 files changed, 26 insertions(+), 19 deletions(-) New commits: diff-tree ffe888d4c04af436959d7279bc4e5a8fae6d0acf (from 9bae6b7c4a6fad458140df74ac4d43d4a5491813) Author: Benjamin Otte <otte at gnome.org> Date: Wed Jun 27 13:30:54 2007 +0200 fix NewMethod action diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c index b4bcc4f..376f41f 100644 --- a/libswfdec/swfdec_as_interpret.c +++ b/libswfdec/swfdec_as_interpret.c @@ -1365,16 +1365,13 @@ swfdec_action_new_method (SwfdecAsContex constructor = swfdec_as_stack_pop (cx->frame->stack); n_args = swfdec_as_value_to_integer (cx, swfdec_as_stack_peek (cx->frame->stack, 1)); n_args = MIN (swfdec_as_stack_get_size (cx->frame->stack) - 1, n_args); - if (!SWFDEC_AS_VALUE_IS_OBJECT (constructor) || - !SWFDEC_IS_AS_FUNCTION (fun = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (constructor))) { - SWFDEC_WARNING ("%s is not a constructor", name); - goto fail; - } if (name != SWFDEC_AS_STR_EMPTY) { - if (SWFDEC_AS_VALUE_IS_OBJECT (constructor)) { - swfdec_as_object_get_variable (SWFDEC_AS_VALUE_GET_OBJECT (constructor), - name, constructor); + if (!SWFDEC_AS_VALUE_IS_OBJECT (constructor)) { + SWFDEC_WARNING ("NewMethod called without an object to get variable %s from", name); + goto fail; } + swfdec_as_object_get_variable (SWFDEC_AS_VALUE_GET_OBJECT (constructor), + name, constructor); } if (!SWFDEC_AS_VALUE_IS_OBJECT (constructor) || !SWFDEC_IS_AS_FUNCTION (fun = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (constructor))) { diff-tree 9bae6b7c4a6fad458140df74ac4d43d4a5491813 (from 3973025c435f045ee78444a20926cd5448b34a2c) Author: Benjamin Otte <otte at gnome.org> Date: Wed Jun 27 13:30:36 2007 +0200 various fixes for attachMovie - video movies get officially registered as Video objects now - swfdec_video_movie_set_input takes NULL as an argument just fine diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index aa7de2f..554d22b 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -791,6 +791,7 @@ swfdec_player_mark (SwfdecAsContext *con swfdec_listener_mark (player->mouse_listener); swfdec_listener_mark (player->key_listener); swfdec_as_object_mark (player->MovieClip); + swfdec_as_object_mark (player->Video); for (walk = player->roots; walk; walk = walk->next) { swfdec_as_object_mark (walk->data); } @@ -1070,6 +1071,7 @@ extern void swfdec_movie_color_init_cont extern void swfdec_net_connection_init_context (SwfdecPlayer *player, guint version); extern void swfdec_net_stream_init_context (SwfdecPlayer *player, guint version); extern void swfdec_sprite_movie_init_context (SwfdecPlayer *player, guint version); +extern void swfdec_video_movie_init_context (SwfdecPlayer *player, guint version); extern void swfdec_xml_init_context (SwfdecPlayer *player, guint version); /** * swfdec_player_initialize: @@ -1102,6 +1104,7 @@ swfdec_player_initialize (SwfdecPlayer * swfdec_player_init_global (player, version); swfdec_mouse_init_context (player, version); swfdec_sprite_movie_init_context (player, version); + swfdec_video_movie_init_context (player, version); swfdec_movie_color_init_context (player, version); swfdec_net_connection_init_context (player, version); swfdec_net_stream_init_context (player, version); @@ -1394,12 +1397,6 @@ swfdec_player_advance (SwfdecPlayer *pla g_return_if_fail (SWFDEC_IS_PLAYER (player)); g_return_if_fail (msecs > 0); -#if 0 - while (TRUE) - swfdec_js_run (player, "i = new Object(); i.foo = 7", NULL); - //swfdec_js_run (player, "s=\"/A/B:foo\"; t=s.indexOf (\":\"); if (t) t=s.substring(0,s.indexOf (\":\")); else t=s;", NULL); -#endif - frames = SWFDEC_TICKS_TO_SAMPLES (player->time + SWFDEC_MSECS_TO_TICKS (msecs)) - SWFDEC_TICKS_TO_SAMPLES (player->time); g_signal_emit (player, signals[ADVANCE], 0, msecs, frames); diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h index 6ef00b3..473871a 100644 --- a/libswfdec/swfdec_player_internal.h +++ b/libswfdec/swfdec_player_internal.h @@ -59,6 +59,7 @@ struct _SwfdecPlayer SwfdecListener * mouse_listener; /* emitting mouse events */ SwfdecListener * key_listener; /* emitting keyboard events */ SwfdecAsObject * MovieClip; /* MovieClip object */ + SwfdecAsObject * Video; /* Video object */ /* rendering */ SwfdecRect invalid; /* area that needs a rredraw */ diff --git a/libswfdec/swfdec_video_movie.c b/libswfdec/swfdec_video_movie.c index 0f90dbc..60676e0 100644 --- a/libswfdec/swfdec_video_movie.c +++ b/libswfdec/swfdec_video_movie.c @@ -22,6 +22,7 @@ #endif #include "swfdec_video_movie.h" +#include "swfdec_player_internal.h" G_DEFINE_TYPE (SwfdecVideoMovie, swfdec_video_movie, SWFDEC_TYPE_MOVIE) @@ -95,6 +96,14 @@ swfdec_video_movie_iterate_end (SwfdecMo } static void +swfdec_video_movie_init_movie (SwfdecMovie *movie) +{ + SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (movie)->context); + + swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->Video, FALSE); +} + +static void swfdec_video_movie_class_init (SwfdecVideoMovieClass * g_class) { GObjectClass *object_class = G_OBJECT_CLASS (g_class); @@ -104,6 +113,7 @@ swfdec_video_movie_class_init (SwfdecVid movie_class->update_extents = swfdec_video_movie_update_extents; movie_class->render = swfdec_video_movie_render; + movie_class->init_movie = swfdec_video_movie_init_movie; movie_class->iterate_end = swfdec_video_movie_iterate_end; } @@ -116,10 +126,11 @@ void swfdec_video_movie_set_input (SwfdecVideoMovie *movie, SwfdecVideoMovieInput *input) { g_return_if_fail (SWFDEC_IS_VIDEO_MOVIE (movie)); - g_return_if_fail (input != NULL); swfdec_video_movie_unset_input (movie); movie->input = input; + if (input == NULL) + return; if (input->connect) input->connect (input, movie); } diff --git a/libswfdec/swfdec_video_movie_as.c b/libswfdec/swfdec_video_movie_as.c index 76d978b..ad45317 100644 --- a/libswfdec/swfdec_video_movie_as.c +++ b/libswfdec/swfdec_video_movie_as.c @@ -63,14 +63,15 @@ swfdec_video_movie_init_context (SwfdecP SWFDEC_AS_STR_Video, 0, NULL, 0)); if (video == NULL) return; + player->Video = video; proto = swfdec_as_object_new (context); - /* set the right properties on the NetStream object */ + /* set the right properties on the Video object */ SWFDEC_AS_VALUE_SET_OBJECT (&val, proto); swfdec_as_object_set_variable (video, SWFDEC_AS_STR_prototype, &val); - /* set the right properties on the NetStream.prototype object */ + /* set the right properties on the Video.prototype object */ SWFDEC_AS_VALUE_SET_OBJECT (&val, video); swfdec_as_object_set_variable (proto, SWFDEC_AS_STR_constructor, &val); - swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachMovie, SWFDEC_TYPE_VIDEO_MOVIE, + swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachVideo, SWFDEC_TYPE_VIDEO_MOVIE, swfdec_video_attach_video, 1); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_clear, SWFDEC_TYPE_VIDEO_MOVIE, swfdec_video_clear, 0); diff-tree 3973025c435f045ee78444a20926cd5448b34a2c (from 6926ffebd79fd8fb3ab853c39f071925fc8066bd) Author: Benjamin Otte <otte at gnome.org> Date: Wed Jun 27 10:39:01 2007 +0200 rename swfdec_js_video.c -> swfdec_video_movie_as.c diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am index 14e50fb..62363b3 100644 --- a/libswfdec/Makefile.am +++ b/libswfdec/Makefile.am @@ -70,7 +70,6 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES swfdec_html_parser.c \ swfdec_image.c \ swfdec_interval.c \ - swfdec_js_video.c \ swfdec_listener.c \ swfdec_loader.c \ swfdec_loadertarget.c \ @@ -102,6 +101,7 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES swfdec_utils.c \ swfdec_video.c \ swfdec_video_movie.c \ + swfdec_video_movie_as.c \ swfdec_xml.c \ swfdec_xml_as.c diff --git a/libswfdec/swfdec_js_video.c b/libswfdec/swfdec_js_video.c deleted file mode 100644 index 76d978b..0000000 --- a/libswfdec/swfdec_js_video.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Swfdec - * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "swfdec_video.h" -#include "swfdec_debug.h" -#include "swfdec_net_stream.h" -#include "swfdec_player_internal.h" - -static void -swfdec_video_attach_video (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) -{ - SwfdecVideoMovie *video = SWFDEC_VIDEO_MOVIE (obj); - SwfdecNetStream *stream; - - if (!SWFDEC_AS_VALUE_IS_OBJECT (&argv[0]) || - !SWFDEC_IS_NET_STREAM (stream = (SwfdecNetStream *) SWFDEC_AS_VALUE_GET_OBJECT (&argv[0]))) { - SWFDEC_WARNING ("calling attachVideo without a NetStraem object"); - swfdec_video_movie_set_input (video, NULL); - return; - } - swfdec_video_movie_set_input (video, &stream->input); -} - -static void -swfdec_video_clear (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) -{ - SwfdecVideoMovie *video = SWFDEC_VIDEO_MOVIE (obj); - - swfdec_video_movie_clear (video); -} - -void -swfdec_video_movie_init_context (SwfdecPlayer *player, guint version) -{ - SwfdecAsContext *context; - SwfdecAsObject *video, *proto; - SwfdecAsValue val; - - g_return_if_fail (SWFDEC_IS_PLAYER (player)); - - context = SWFDEC_AS_CONTEXT (player); - video = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global, - SWFDEC_AS_STR_Video, 0, NULL, 0)); - if (video == NULL) - return; - proto = swfdec_as_object_new (context); - /* set the right properties on the NetStream object */ - SWFDEC_AS_VALUE_SET_OBJECT (&val, proto); - swfdec_as_object_set_variable (video, SWFDEC_AS_STR_prototype, &val); - /* set the right properties on the NetStream.prototype object */ - SWFDEC_AS_VALUE_SET_OBJECT (&val, video); - swfdec_as_object_set_variable (proto, SWFDEC_AS_STR_constructor, &val); - swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachMovie, SWFDEC_TYPE_VIDEO_MOVIE, - swfdec_video_attach_video, 1); - swfdec_as_object_add_function (proto, SWFDEC_AS_STR_clear, SWFDEC_TYPE_VIDEO_MOVIE, - swfdec_video_clear, 0); -} - diff --git a/libswfdec/swfdec_video_movie_as.c b/libswfdec/swfdec_video_movie_as.c new file mode 100644 index 0000000..76d978b --- /dev/null +++ b/libswfdec/swfdec_video_movie_as.c @@ -0,0 +1,78 @@ +/* Swfdec + * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "swfdec_video.h" +#include "swfdec_debug.h" +#include "swfdec_net_stream.h" +#include "swfdec_player_internal.h" + +static void +swfdec_video_attach_video (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ + SwfdecVideoMovie *video = SWFDEC_VIDEO_MOVIE (obj); + SwfdecNetStream *stream; + + if (!SWFDEC_AS_VALUE_IS_OBJECT (&argv[0]) || + !SWFDEC_IS_NET_STREAM (stream = (SwfdecNetStream *) SWFDEC_AS_VALUE_GET_OBJECT (&argv[0]))) { + SWFDEC_WARNING ("calling attachVideo without a NetStraem object"); + swfdec_video_movie_set_input (video, NULL); + return; + } + swfdec_video_movie_set_input (video, &stream->input); +} + +static void +swfdec_video_clear (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ + SwfdecVideoMovie *video = SWFDEC_VIDEO_MOVIE (obj); + + swfdec_video_movie_clear (video); +} + +void +swfdec_video_movie_init_context (SwfdecPlayer *player, guint version) +{ + SwfdecAsContext *context; + SwfdecAsObject *video, *proto; + SwfdecAsValue val; + + g_return_if_fail (SWFDEC_IS_PLAYER (player)); + + context = SWFDEC_AS_CONTEXT (player); + video = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global, + SWFDEC_AS_STR_Video, 0, NULL, 0)); + if (video == NULL) + return; + proto = swfdec_as_object_new (context); + /* set the right properties on the NetStream object */ + SWFDEC_AS_VALUE_SET_OBJECT (&val, proto); + swfdec_as_object_set_variable (video, SWFDEC_AS_STR_prototype, &val); + /* set the right properties on the NetStream.prototype object */ + SWFDEC_AS_VALUE_SET_OBJECT (&val, video); + swfdec_as_object_set_variable (proto, SWFDEC_AS_STR_constructor, &val); + swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachMovie, SWFDEC_TYPE_VIDEO_MOVIE, + swfdec_video_attach_video, 1); + swfdec_as_object_add_function (proto, SWFDEC_AS_STR_clear, SWFDEC_TYPE_VIDEO_MOVIE, + swfdec_video_clear, 0); +} +
Possibly Parallel Threads
- 12 commits - libswfdec/Makefile.am libswfdec/swfdec_audio_flv.c libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_js.c libswfdec/swfdec_js.h libswfdec/swfdec_js_video.c libswfdec/swfdec_loader.c libswfdec/swfdec_loader_internal.h
- Branch 'as' - 16 commits - configure.ac libswfdec/Makefile.am libswfdec/swfdec_as_context.c libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame.h libswfdec/swfdec_as_function.c libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_script_function.c
- 4 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_video_movie_as.c test/trace
- 9 commits - libswfdec/swfdec_as_context.c libswfdec/swfdec_as_internal.h libswfdec/swfdec_as_interpret.c libswfdec/swfdec_movie.c libswfdec/swfdec_player.c libswfdec/swfdec_video_movie_as.c
- 5 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_as_boolean.c libswfdec/swfdec_as_function.c libswfdec/swfdec_as_math.c libswfdec/swfdec_as_number.c libswfdec/swfdec_as_script_function.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h