Benjamin Otte
2007-Oct-19 12:54 UTC
[Swfdec] 8 commits - libswfdec/swfdec_movie_as_drawing.c libswfdec/swfdec_player.c libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h libswfdec/swfdec_sprite_movie.c
libswfdec/swfdec_movie_as_drawing.c | 1 libswfdec/swfdec_player.c | 2 + libswfdec/swfdec_resource.c | 65 ++++++++++++++++++++++++++---------- libswfdec/swfdec_resource.h | 3 + libswfdec/swfdec_sprite_movie.c | 2 + 5 files changed, 55 insertions(+), 18 deletions(-) New commits: commit f5e934199517482e91225a4107a7b94c4a8b2d8d Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 14:44:38 2007 +0200 add comment diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h index f97ddaf..c5fd4e2 100644 --- a/libswfdec/swfdec_resource.h +++ b/libswfdec/swfdec_resource.h @@ -44,7 +44,7 @@ struct _SwfdecResource gboolean initial; /* TRUE if this is the initial resource */ SwfdecLoader * loader; /* the loader providing data for the decoder */ - SwfdecDecoder * decoder; /* decoder that decoded all the stuff used by us */ + SwfdecDecoder * decoder; /* decoder in use or NULL if not yet created (only happens after loadMovie()) */ char * variables; /* extra variables to be set */ GHashTable * exports; /* string->SwfdecCharacter mapping of exported characters */ commit 8283af4ebc5efe8fd8d1072c37e604e988a50e2b Merge: eedca0f... b4c20d7... Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 14:41:13 2007 +0200 Merge branch 'master' of ssh://company at git.freedesktop.org/git/swfdec/swfdec commit eedca0f0078275f7d548295036a7ebb6422e755c Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 13:08:26 2007 +0200 add a comment diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index c0fa6a8..ca2d962 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -703,6 +703,7 @@ swfdec_sprite_movie_unload (SwfdecSpriteMovie *movie) g_return_if_fail (SWFDEC_IS_SPRITE_MOVIE (movie)); + /* This function does enough invalidating */ swfdec_sprite_movie_clear (SWFDEC_AS_OBJECT (movie)->context, SWFDEC_AS_OBJECT (movie), 0, NULL, &hack); movie->frame = 0; commit f80e5cd132a292d957d09f2805c34b4898290c73 Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 13:07:53 2007 +0200 invalidate the extents when clearing diff --git a/libswfdec/swfdec_movie_as_drawing.c b/libswfdec/swfdec_movie_as_drawing.c index d77ef99..6817459 100644 --- a/libswfdec/swfdec_movie_as_drawing.c +++ b/libswfdec/swfdec_movie_as_drawing.c @@ -244,6 +244,7 @@ swfdec_sprite_movie_clear (SwfdecAsContext *cx, SwfdecAsObject *object, if (movie->draws == NULL) return; swfdec_movie_invalidate (movie); + swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_EXTENTS); swfdec_rect_init_empty (&movie->draw_extents); g_slist_foreach (movie->draws, (GFunc) g_object_unref, NULL); g_slist_free (movie->draws); commit 702849414e776be0b60b2fda84802b6ae5c63f54 Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 12:55:35 2007 +0200 load the initial movie step-by-step, but all others only after EOF diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index 7352e06..d9be02e 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -88,9 +88,8 @@ swfdec_resource_loader_target_image (SwfdecResource *instance) } static void -swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader) +swfdec_resource_open (SwfdecResource *instance, SwfdecLoader *loader) { - SwfdecResource *instance = SWFDEC_RESOURCE (target); const char *query; query = swfdec_url_get_query (swfdec_loader_get_url (loader)); @@ -105,9 +104,19 @@ swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *lo } static void -swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader) +swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader) { SwfdecResource *instance = SWFDEC_RESOURCE (target); + + if (!instance->initial) + return; + + swfdec_resource_open (instance, loader); +} + +static void +swfdec_resource_parse (SwfdecResource *instance, SwfdecLoader *loader) +{ SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance->movie)->context); SwfdecDecoder *dec = instance->decoder; SwfdecDecoderClass *klass; @@ -134,11 +143,6 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l swfdec_loader_set_target (loader, NULL); return; } - /* HACK for flv playback */ - if (target != loader->target) { - swfdec_loader_target_parse (loader->target, loader); - return; - } } klass = SWFDEC_DECODER_GET_CLASS (dec); g_return_if_fail (klass->parse); @@ -171,11 +175,39 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l } static void +swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader) +{ + SwfdecResource *instance = SWFDEC_RESOURCE (target); + + if (!instance->initial) + return; + + swfdec_resource_parse (instance, loader); +} + +static void +swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader) +{ + SwfdecResource *resource = SWFDEC_RESOURCE (target); + SwfdecMovie *movie; + + if (resource->initial) + return; + + swfdec_resource_open (resource, loader); + swfdec_resource_parse (resource, loader); + /* FIXME: This someow initializes the first frame here. Is this ok? */ + movie = SWFDEC_MOVIE (resource->movie); + swfdec_movie_initialize (movie); +} + +static void swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface) { iface->get_player = swfdec_resource_loader_target_get_player; iface->open = swfdec_resource_loader_target_open; iface->parse = swfdec_resource_loader_target_parse; + iface->eof = swfdec_resource_loader_target_eof; } static void commit 4cd1b65aa19f1fc14d98941d569ce7659bce521f Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 12:55:13 2007 +0200 also reset the pointer to the next action diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index 91bfb2f..c0fa6a8 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -707,6 +707,7 @@ swfdec_sprite_movie_unload (SwfdecSpriteMovie *movie) SWFDEC_AS_OBJECT (movie), 0, NULL, &hack); movie->frame = 0; movie->n_frames = 0; + movie->next_action = 0; movie->sprite = NULL; } commit d2c22cde042a4bb363fb0e23ff707c3c68b73643 Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 09:49:41 2007 +0200 make SwfdecResource have an "initial" flag that is set for the first resource diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index 6e8323d..f6e7317 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -1919,6 +1919,7 @@ swfdec_player_set_loader_with_variables (SwfdecPlayer *player, SwfdecLoader *loa g_return_if_fail (SWFDEC_IS_LOADER (loader)); player->resource = swfdec_resource_new (loader, variables); + player->resource->initial = TRUE; movie = swfdec_movie_new (player, -16384, NULL, player->resource, NULL, SWFDEC_AS_STR__level0); movie->name = SWFDEC_AS_STR_EMPTY; g_object_unref (loader); diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index b8c0256..7352e06 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -58,10 +58,12 @@ swfdec_resource_check_rights (SwfdecResource *resource) SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (resource); SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (resource->decoder); - if (dec->use_network && sec->sandbox == SWFDEC_SANDBOX_LOCAL_FILE) - sec->sandbox = SWFDEC_SANDBOX_LOCAL_NETWORK; - SWFDEC_INFO ("enabling local-with-network sandbox for %s", - swfdec_url_get_url (swfdec_loader_get_url (resource->loader))); + if (resource->initial) { + if (dec->use_network && sec->sandbox == SWFDEC_SANDBOX_LOCAL_FILE) + sec->sandbox = SWFDEC_SANDBOX_LOCAL_NETWORK; + SWFDEC_INFO ("enabling local-with-network sandbox for %s", + swfdec_url_get_url (swfdec_loader_get_url (resource->loader))); + } } static void @@ -73,14 +75,11 @@ swfdec_resource_loader_target_image (SwfdecResource *instance) return; if (SWFDEC_IS_SWF_DECODER (instance->decoder)) { - SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (movie)->context); SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder); + movie->sprite = dec->main_sprite; swfdec_movie_invalidate (SWFDEC_MOVIE (movie)); - - /* if first instance */ - if (player->resource == instance) - swfdec_resource_check_rights (instance); + swfdec_resource_check_rights (instance); } else if (SWFDEC_IS_FLV_DECODER (instance->decoder)) { /* nothing to do, please move along */ } else { diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h index 8143d01..f97ddaf 100644 --- a/libswfdec/swfdec_resource.h +++ b/libswfdec/swfdec_resource.h @@ -41,6 +41,7 @@ struct _SwfdecResource SwfdecSpriteMovie * movie; /* the movie responsible for creating this instance */ guint parse_frame; /* next frame to parse */ + gboolean initial; /* TRUE if this is the initial resource */ SwfdecLoader * loader; /* the loader providing data for the decoder */ SwfdecDecoder * decoder; /* decoder that decoded all the stuff used by us */ commit 0e38784c09bbfc9343e1b00a49b30b49f687f8ff Author: Benjamin Otte <otte at gnome.org> Date: Fri Oct 19 09:43:39 2007 +0200 fix memleak: unref loader diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index cb149f4..6e8323d 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -1921,6 +1921,7 @@ swfdec_player_set_loader_with_variables (SwfdecPlayer *player, SwfdecLoader *loa player->resource = swfdec_resource_new (loader, variables); movie = swfdec_movie_new (player, -16384, NULL, player->resource, NULL, SWFDEC_AS_STR__level0); movie->name = SWFDEC_AS_STR_EMPTY; + g_object_unref (loader); } /**
Seemingly Similar Threads
- 7 commits - libswfdec/swfdec_movie.c libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h libswfdec/swfdec_sprite_movie_as.c test/trace
- libswfdec/swfdec_load_object.c libswfdec/swfdec_movie.c libswfdec/swfdec_player.c libswfdec/swfdec_player_internal.h libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h
- 7 commits - doc/swfdec-sections.txt libswfdec-gtk/swfdec_gtk_widget.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_decoder.c libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_movie_asprops.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_player.c
- 36 commits - doc/swfdec-sections.txt libswfdec/Makefile.am libswfdec/swfdec_amf.c libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_strings.c libswfdec/swfdec_buffer.c libswfdec/swfdec_buffer.h
- 5 commits - libswfdec/swfdec_net_stream.c libswfdec/swfdec_player.c libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h player/swfdec_slow_loader.c test/trace