[Swfdec] 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 libswfdec/swfdec_player.h libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_sprite_movie.h test/image
Benjamin Otte
company at kemper.freedesktop.org
Wed Nov 7 13:20:17 PST 2007
doc/swfdec-sections.txt | 2
libswfdec-gtk/swfdec_gtk_widget.c | 7 +-
libswfdec/swfdec_as_strings.c | 3 +
libswfdec/swfdec_decoder.c | 2
libswfdec/swfdec_flv_decoder.c | 57 ----------------------
libswfdec/swfdec_movie_asprops.c | 31 ++++++------
libswfdec/swfdec_net_stream.c | 7 --
libswfdec/swfdec_player.c | 30 ++++++++++-
libswfdec/swfdec_player.h | 6 +-
libswfdec/swfdec_resource.c | 97 ++++++++++++++++++++++++++------------
libswfdec/swfdec_resource.h | 9 +++
libswfdec/swfdec_sprite_movie.c | 34 ++++++++++---
libswfdec/swfdec_sprite_movie.h | 1
test/image/image.c | 4 -
14 files changed, 165 insertions(+), 125 deletions(-)
New commits:
commit bcf54fadaac5c67aa56852e97762890ad3ef74c9
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Nov 7 19:53:50 2007 +0100
/swfdec_player_get_image_size/swfdec_player_get_default_size/
That name has annoyed me long enough now
diff --git a/doc/swfdec-sections.txt b/doc/swfdec-sections.txt
index 1b61f67..0916f16 100644
--- a/doc/swfdec-sections.txt
+++ b/doc/swfdec-sections.txt
@@ -80,7 +80,7 @@ swfdec_player_set_loader
swfdec_player_set_loader_with_variables
swfdec_player_is_initialized
swfdec_player_get_rate
-swfdec_player_get_image_size
+swfdec_player_get_default_size
swfdec_player_get_size
swfdec_player_set_size
swfdec_player_get_next_event
diff --git a/libswfdec-gtk/swfdec_gtk_widget.c b/libswfdec-gtk/swfdec_gtk_widget.c
index 895d5a3..8d617fd 100644
--- a/libswfdec-gtk/swfdec_gtk_widget.c
+++ b/libswfdec-gtk/swfdec_gtk_widget.c
@@ -330,8 +330,11 @@ swfdec_gtk_widget_size_request (GtkWidget *gtkwidget, GtkRequisition *req)
if (priv->player == NULL) {
req->width = req->height = 0;
} else {
- swfdec_player_get_image_size (priv->player,
- &req->width, &req->height);
+ guint w, h;
+ swfdec_player_get_default_size (priv->player, &w, &h);
+ /* FIXME: set some sane upper limit here? */
+ req->width = MIN (w, G_MAXINT);
+ req->height = MIN (h, G_MAXINT);
}
}
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index dd15962..3d36451 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -2320,7 +2320,7 @@ swfdec_player_get_rate (SwfdecPlayer *player)
}
/**
- * swfdec_player_get_image_size:
+ * swfdec_player_get_default_size:
* @player: a #SwfdecPlayer
* @width: integer to store the width in or %NULL
* @height: integer to store the height in or %NULL
@@ -2329,7 +2329,7 @@ swfdec_player_get_rate (SwfdecPlayer *player)
* with the size. Otherwise @width and @height are set to 0.
**/
void
-swfdec_player_get_image_size (SwfdecPlayer *player, int *width, int *height)
+swfdec_player_get_default_size (SwfdecPlayer *player, guint *width, guint *height)
{
g_return_if_fail (SWFDEC_IS_PLAYER (player));
diff --git a/libswfdec/swfdec_player.h b/libswfdec/swfdec_player.h
index 6a0bb2b..d28fce5 100644
--- a/libswfdec/swfdec_player.h
+++ b/libswfdec/swfdec_player.h
@@ -79,9 +79,9 @@ void swfdec_player_set_loader_with_variables
gboolean swfdec_player_is_initialized (SwfdecPlayer * player);
glong swfdec_player_get_next_event (SwfdecPlayer * player);
double swfdec_player_get_rate (SwfdecPlayer * player);
-void swfdec_player_get_image_size (SwfdecPlayer * player,
- int * width,
- int * height);
+void swfdec_player_get_default_size (SwfdecPlayer * player,
+ guint * width,
+ guint * height);
void swfdec_player_get_size (SwfdecPlayer * player,
int * width,
int * height);
diff --git a/test/image/image.c b/test/image/image.c
index e50c9c6..405cfa7 100644
--- a/test/image/image.c
+++ b/test/image/image.c
@@ -155,7 +155,7 @@ run_test (const char *filename)
SwfdecLoader *loader;
SwfdecPlayer *player = NULL;
guint i, msecs;
- int w, h;
+ guint w, h;
cairo_surface_t *surface;
cairo_t *cr;
@@ -174,7 +174,7 @@ run_test (const char *filename)
msecs = swfdec_player_get_next_event (player);
swfdec_player_advance (player, msecs);
}
- swfdec_player_get_image_size (player, &w, &h);
+ swfdec_player_get_default_size (player, &w, &h);
if (w == 0 || h == 0) {
g_print (" ERROR: width and height not set\n");
goto error;
commit 9bb3e01a2b2ac248146bcefc497df43e3c38728f
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Nov 7 19:46:55 2007 +0100
add "default-width", "default-height" and "rate" properties
This is so we can g_object_notify() about them when they change
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 37b6f56..dd15962 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -600,6 +600,9 @@ enum {
PROP_0,
PROP_CACHE_SIZE,
PROP_INITIALIZED,
+ PROP_DEFAULT_WIDTH,
+ PROP_DEFAULT_HEIGHT,
+ PROP_RATE,
PROP_MOUSE_CURSOR,
PROP_NEXT_EVENT,
PROP_BACKGROUND_COLOR,
@@ -683,6 +686,15 @@ swfdec_player_get_property (GObject *object, guint param_id, GValue *value,
case PROP_INITIALIZED:
g_value_set_boolean (value, swfdec_player_is_initialized (player));
break;
+ case PROP_DEFAULT_WIDTH:
+ g_value_set_uint (value, player->width);
+ break;
+ case PROP_DEFAULT_HEIGHT:
+ g_value_set_uint (value, player->height);
+ break;
+ case PROP_RATE:
+ g_value_set_double (value, player->rate / 256.0);
+ break;
case PROP_MOUSE_CURSOR:
g_value_set_enum (value, player->mouse_cursor);
break;
@@ -1408,6 +1420,15 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
g_object_class_install_property (object_class, PROP_INITIALIZED,
g_param_spec_boolean ("initialized", "initialized", "TRUE when the player has initialized its basic values",
FALSE, G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_DEFAULT_WIDTH,
+ g_param_spec_uint ("default-width", "default width", "default width of the movie",
+ 0, G_MAXUINT, 0, G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_DEFAULT_HEIGHT,
+ g_param_spec_uint ("default-height", "default height", "default height of the movie",
+ 0, G_MAXUINT, 0, G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_RATE,
+ g_param_spec_double ("rate", "rate", "rate in frames per second",
+ 0.0, 256.0, 0.0, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_MOUSE_CURSOR,
g_param_spec_enum ("mouse-cursor", "mouse cursor", "how the mouse pointer should be presented",
SWFDEC_TYPE_MOUSE_CURSOR, SWFDEC_MOUSE_CURSOR_NONE, G_PARAM_READABLE));
@@ -1875,7 +1896,7 @@ swfdec_player_initialize (SwfdecPlayer *player, guint version,
swfdec_as_object_set_constructor (player->roots->data, player->MovieClip);
}
}
- SWFDEC_INFO ("initializing player to size %ux%u", width, height);
+ SWFDEC_INFO ("initializing player to size %ux%u and rate %u/256", width, height, rate);
player->rate = rate;
player->width = width;
player->height = height;
@@ -1889,6 +1910,9 @@ swfdec_player_initialize (SwfdecPlayer *player, guint version,
&player->iterate_timeout, player->iterate_timeout.timestamp, player->time);
}
g_object_notify (G_OBJECT (player), "initialized");
+ g_object_notify (G_OBJECT (player), "default-width");
+ g_object_notify (G_OBJECT (player), "default-height");
+ g_object_notify (G_OBJECT (player), "rate");
swfdec_player_update_scale (player);
}
commit 4c115fe9eb41911d99a9e922ba4f10803c10a64b
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Nov 7 19:38:51 2007 +0100
initial implementation of onLoadError.
diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c
index 4326235..2879324 100644
--- a/libswfdec/swfdec_as_strings.c
+++ b/libswfdec/swfdec_as_strings.c
@@ -429,5 +429,8 @@ const char swfdec_as_strings[] =
SWFDEC_AS_CONSTANT_STRING ("onLoadError")
SWFDEC_AS_CONSTANT_STRING ("onLoadInit")
SWFDEC_AS_CONSTANT_STRING ("onLoadProgress")
+ SWFDEC_AS_CONSTANT_STRING ("URLNotFound")
+ SWFDEC_AS_CONSTANT_STRING ("IllegalRequest")
+ SWFDEC_AS_CONSTANT_STRING ("LoadNeverCompleted")
/* add more here */
;
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 3f2af12..d6b5703 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -104,11 +104,13 @@ swfdec_resource_loader_target_image (SwfdecResource *instance)
/* NB: name must be GC'ed */
static void
-swfdec_resource_emit_signal (SwfdecResource *resource, const char *name, SwfdecAsValue *args, guint n_args)
+swfdec_resource_emit_signal (SwfdecResource *resource, const char *name, gboolean progress,
+ SwfdecAsValue *args, guint n_args)
{
SwfdecAsContext *cx;
SwfdecAsObject *movie;
- SwfdecAsValue vals[n_args + 2];
+ guint skip = progress ? 4 : 2;
+ SwfdecAsValue vals[n_args + skip];
if (resource->clip_loader == NULL)
return;
@@ -123,10 +125,37 @@ swfdec_resource_emit_signal (SwfdecResource *resource, const char *name, SwfdecA
SWFDEC_AS_VALUE_SET_STRING (&vals[0], name);
SWFDEC_AS_VALUE_SET_OBJECT (&vals[1], movie);
+ if (progress) {
+ SwfdecResource *res;
+
+ if (SWFDEC_IS_MOVIE (movie))
+ res = swfdec_movie_get_own_resource (SWFDEC_MOVIE (movie));
+ else
+ res = NULL;
+ if (res && res->decoder) {
+ SwfdecDecoder *dec = res->decoder;
+ SWFDEC_AS_VALUE_SET_INT (&vals[2], dec->bytes_loaded);
+ SWFDEC_AS_VALUE_SET_INT (&vals[3], dec->bytes_total);
+ } else {
+ SWFDEC_AS_VALUE_SET_INT (&vals[2], 0);
+ SWFDEC_AS_VALUE_SET_INT (&vals[3], 0);
+ }
+ }
if (n_args)
- memcpy (&vals[2], args, sizeof (SwfdecAsValue) * n_args);
+ memcpy (&vals[skip], args, sizeof (SwfdecAsValue) * n_args);
swfdec_as_object_call (SWFDEC_AS_OBJECT (resource->clip_loader), SWFDEC_AS_STR_broadcastMessage,
- n_args + 2, vals, NULL);
+ n_args + skip, vals, NULL);
+}
+
+static void
+swfdec_resource_emit_error (SwfdecResource *resource, const char *message)
+{
+ SwfdecAsValue vals[2];
+
+ SWFDEC_AS_VALUE_SET_STRING (&vals[0], message);
+ SWFDEC_AS_VALUE_SET_INT (&vals[1], 0);
+
+ swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadError, FALSE, vals, 2);
}
static void
@@ -144,7 +173,8 @@ swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *lo
SWFDEC_INFO ("set manual movie variables: %s", instance->variables);
swfdec_movie_set_variables (SWFDEC_MOVIE (instance->movie), instance->variables);
}
- swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadStart, NULL, 0);
+ swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadStart, FALSE, NULL, 0);
+ instance->state = SWFDEC_RESOURCE_OPENED;
}
static void
@@ -153,7 +183,6 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
SwfdecResource *instance = SWFDEC_RESOURCE (target);
SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance->movie)->context);
SwfdecBuffer *buffer;
- SwfdecAsValue vals[2];
SwfdecDecoder *dec = instance->decoder;
SwfdecDecoderClass *klass;
SwfdecStatus status;
@@ -212,9 +241,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
}
if (status & SWFDEC_STATUS_IMAGE)
swfdec_resource_loader_target_image (instance);
- SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded);
- SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total);
- swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, vals, 2);
+ swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, TRUE, NULL, 0);
if (status & SWFDEC_STATUS_EOF)
return;
}
@@ -223,21 +250,36 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
static void
swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
{
- SwfdecResource *instance = SWFDEC_RESOURCE (target);
- SwfdecAsValue vals[2];
- SwfdecDecoder *dec = instance->decoder;
+ SwfdecAsValue val;
+ SwfdecResource *resource = SWFDEC_RESOURCE (target);
- if (dec == NULL) {
- SWFDEC_FIXME ("What do we signal if we have no decoder?");
- SWFDEC_AS_VALUE_SET_INT (&vals[0], 0);
- SWFDEC_AS_VALUE_SET_INT (&vals[1], 0);
- } else {
- SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded);
- SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total);
+ swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadProgress, TRUE, NULL, 0);
+ SWFDEC_AS_VALUE_SET_INT (&val, 0); /* FIXME */
+ swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadComplete, FALSE, &val, 1);
+ resource->state = SWFDEC_RESOURCE_COMPLETE;
+}
+
+static void
+swfdec_resource_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+{
+ SwfdecResource *resource = SWFDEC_RESOURCE (target);
+ const char *message;
+
+ switch (resource->state) {
+ case SWFDEC_RESOURCE_REQUESTED:
+ message = SWFDEC_AS_STR_URLNotFound;
+ break;
+ case SWFDEC_RESOURCE_OPENED:
+ message = SWFDEC_AS_STR_LoadNeverCompleted;
+ break;
+ case SWFDEC_RESOURCE_NEW:
+ case SWFDEC_RESOURCE_COMPLETE:
+ case SWFDEC_RESOURCE_DONE:
+ g_assert_not_reached ();
+ message = SWFDEC_AS_STR_EMPTY;
+ break;
}
- swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, vals, 2);
- SWFDEC_AS_VALUE_SET_INT (&vals[0], 0); /* FIXME */
- swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadComplete, vals, 1);
+ swfdec_resource_emit_error (resource, message);
}
static void
@@ -246,6 +288,7 @@ 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->error = swfdec_resource_loader_target_error;
iface->eof = swfdec_resource_loader_target_eof;
}
@@ -302,6 +345,7 @@ swfdec_resource_set_loader (SwfdecResource *resource, SwfdecLoader *loader)
resource->loader = g_object_ref (loader);
swfdec_flash_security_set_url (SWFDEC_FLASH_SECURITY (resource),
swfdec_loader_get_url (loader));
+ resource->state = SWFDEC_RESOURCE_REQUESTED;
}
SwfdecResource *
@@ -378,6 +422,7 @@ swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer re
if (loader == NULL) {
/* *** Security Sandbox Violation *** */
+ swfdec_resource_emit_error (resource, SWFDEC_AS_STR_IllegalRequest);
return;
}
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index ea3192e..b75d77d 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -35,6 +35,14 @@ typedef struct _SwfdecResourceClass SwfdecResourceClass;
#define SWFDEC_RESOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_RESOURCE, SwfdecResource))
#define SWFDEC_RESOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_RESOURCE, SwfdecResourceClass))
+typedef enum {
+ SWFDEC_RESOURCE_NEW = 0, /* no loader set yet, only the call to _load() was done */
+ SWFDEC_RESOURCE_REQUESTED, /* the URL has been requested, the request was ok, ->loader is set */
+ SWFDEC_RESOURCE_OPENED, /* onLoadStart has been called */
+ SWFDEC_RESOURCE_COMPLETE, /* onLoadComplete has been called */
+ SWFDEC_RESOURCE_DONE /* onLoadInit has been called, clip_loader is unset */
+} SwfdecResourceState;
+
struct _SwfdecResource
{
SwfdecFlashSecurity flash_security;
@@ -50,6 +58,7 @@ struct _SwfdecResource
GHashTable * export_names; /* SwfdecCharacter->string mapping of exported characters */
/* only used while loading */
+ SwfdecResourceState state; /* state we're in (for determining callbacks */
char * target; /* target path we use for signalling */
SwfdecMovieClipLoader *clip_loader; /* loader that gets notified about load events */
};
commit 11cb40668238084379c80f8d25d269d649a5d790
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Nov 7 13:33:34 2007 +0100
add swfdec_sprite_movie_get_frames_total() and use it
diff --git a/libswfdec/swfdec_movie_asprops.c b/libswfdec/swfdec_movie_asprops.c
index 35fa280..6456aa9 100644
--- a/libswfdec/swfdec_movie_asprops.c
+++ b/libswfdec/swfdec_movie_asprops.c
@@ -166,25 +166,12 @@ mc_framesloaded (SwfdecMovie *mov, SwfdecAsValue *rval)
}
static void
-mc_totalframes (SwfdecMovie *movie, SwfdecAsValue *rval)
+mc_totalframes (SwfdecMovie *mov, SwfdecAsValue *rval)
{
- SwfdecResource *resource;
- SwfdecDecoder *dec;
- int frames;
-
- g_assert (SWFDEC_IS_SPRITE_MOVIE (movie));
+ SwfdecSpriteMovie *movie = SWFDEC_SPRITE_MOVIE (mov);
- resource = swfdec_movie_get_own_resource (SWFDEC_MOVIE (movie));
- if (resource == NULL) {
- frames = 1;
- } else {
- dec = resource->decoder;
- if (dec == NULL)
- frames = 0;
- else
- frames = dec->frames_total;
- }
- SWFDEC_AS_VALUE_SET_INT (rval, frames);
+ SWFDEC_AS_VALUE_SET_INT (rval,
+ swfdec_sprite_movie_get_frames_total (movie));
}
static void
diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c
index 264484b..89d30b4 100644
--- a/libswfdec/swfdec_sprite_movie.c
+++ b/libswfdec/swfdec_sprite_movie.c
@@ -855,3 +855,20 @@ swfdec_sprite_movie_get_frames_loaded (SwfdecSpriteMovie *movie)
return dec->frames_loaded - 1;
return dec->frames_total;
}
+
+int
+swfdec_sprite_movie_get_frames_total (SwfdecSpriteMovie *movie)
+{
+ SwfdecResource *resource;
+ SwfdecDecoder *dec;
+
+ g_return_val_if_fail (SWFDEC_IS_SPRITE_MOVIE (movie), 0);
+
+ resource = swfdec_movie_get_own_resource (SWFDEC_MOVIE (movie));
+ if (resource == NULL)
+ return 1;
+ dec = resource->decoder;
+ if (dec == NULL)
+ return 0;
+ return dec->frames_total;
+}
diff --git a/libswfdec/swfdec_sprite_movie.h b/libswfdec/swfdec_sprite_movie.h
index 0b7158c..093154d 100644
--- a/libswfdec/swfdec_sprite_movie.h
+++ b/libswfdec/swfdec_sprite_movie.h
@@ -65,6 +65,7 @@ struct _SwfdecSpriteMovieClass
GType swfdec_sprite_movie_get_type (void);
int swfdec_sprite_movie_get_frames_loaded (SwfdecSpriteMovie * movie);
+int swfdec_sprite_movie_get_frames_total (SwfdecSpriteMovie * movie);
void swfdec_sprite_movie_goto (SwfdecSpriteMovie * movie,
guint goto_frame);
commit 96dabf98373731d3579fcdefea9a3b80a1d38c5b
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Nov 7 13:27:32 2007 +0100
remove commented out and non-working code for native FLV playback
The code had too many hacks and special cases, and that's one thing I don't like.
Especially ot for an add-on feature.
If we ever introduce native FLV playback again, we should do this via a special
SWF file that works as the player and only add special code to set the decoder
stream on that SWF.
diff --git a/libswfdec/swfdec_decoder.c b/libswfdec/swfdec_decoder.c
index 6a98981..b17cb98 100644
--- a/libswfdec/swfdec_decoder.c
+++ b/libswfdec/swfdec_decoder.c
@@ -58,10 +58,12 @@ swfdec_decoder_new (SwfdecPlayer *player, const SwfdecBuffer *buffer)
data[1] == 'W' &&
data[2] == 'S') {
retval = g_object_new (SWFDEC_TYPE_SWF_DECODER, NULL);
+#if 0
} else if (data[0] == 'F' &&
data[1] == 'L' &&
data[2] == 'V') {
retval = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL);
+#endif
} else {
retval = NULL;
}
diff --git a/libswfdec/swfdec_flv_decoder.c b/libswfdec/swfdec_flv_decoder.c
index 4ba427e..81e7e36 100644
--- a/libswfdec/swfdec_flv_decoder.c
+++ b/libswfdec/swfdec_flv_decoder.c
@@ -594,27 +594,6 @@ swfdec_flv_decoder_get_data (SwfdecFlvDecoder *flv, guint timestamp, guint *real
return tag->buffer;
}
-/*** HACK ***/
-
-/* This is a hack to allow native FLV playback IN SwfdecPlayer */
-
-#include "swfdec_loadertarget.h"
-#include "swfdec_net_stream.h"
-#include "swfdec_sprite.h"
-#include "swfdec_video_movie.h"
-
-#if 0
-static void
-notify_initialized (SwfdecPlayer *player, GParamSpec *pspec, SwfdecVideoMovie *movie)
-{
- movie->video->width = player->width;
- movie->video->height = player->height;
-
- swfdec_movie_queue_update (SWFDEC_MOVIE (movie), SWFDEC_MOVIE_INVALID_MATRIX);
- swfdec_movie_invalidate (SWFDEC_MOVIE (movie));
-}
-#endif
-
gboolean
swfdec_flv_decoder_is_eof (SwfdecFlvDecoder *flv)
{
@@ -631,39 +610,3 @@ swfdec_flv_decoder_eof (SwfdecFlvDecoder *flv)
flv->state = SWFDEC_STATE_EOF;
}
-SwfdecMovie *
-swfdec_flv_decoder_add_movie (SwfdecFlvDecoder *flv, SwfdecMovie *parent)
-{
- //g_assert_not_reached ();
- return NULL;
-#if 0
- SwfdecContent *content = swfdec_content_new (0);
- SwfdecMovie *movie;
- SwfdecVideo *video;
- SwfdecConnection *conn;
- SwfdecNetStream *stream;
-
- /* set up the video movie */
- video = g_object_new (SWFDEC_TYPE_VIDEO, NULL);
- video->width = G_MAXUINT;
- video->height = G_MAXUINT;
- content->graphic = SWFDEC_GRAPHIC (video);
- content->free = TRUE;
- movie = swfdec_movie_new (parent, content);
- g_object_weak_ref (G_OBJECT (movie), (GWeakNotify) g_object_unref, video);
- g_signal_connect (SWFDEC_ROOT_MOVIE (parent)->player, "notify::initialized",
- G_CALLBACK (notify_initialized), movie);
- /* set up the playback stream */
- conn = swfdec_connection_new (SWFDEC_ROOT_MOVIE (parent)->player->jscx);
- stream = swfdec_net_stream_new (SWFDEC_ROOT_MOVIE (parent)->player, conn);
- swfdec_net_stream_set_loader (stream, SWFDEC_ROOT_MOVIE (parent)->loader);
- stream->flvdecoder = flv;
- swfdec_video_movie_set_input (SWFDEC_VIDEO_MOVIE (movie), &stream->input);
- swfdec_net_stream_set_playing (stream, TRUE);
- g_object_unref (conn);
- g_object_unref (stream);
-
- return movie;
-#endif
-}
-
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 9cfefea..0d719f0 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -284,13 +284,6 @@ swfdec_net_stream_loader_target_parse (SwfdecLoaderTarget *target,
status |= klass->parse (SWFDEC_DECODER (stream->flvdecoder), buffer);
} while ((status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_NEEDBITS | SWFDEC_STATUS_EOF)) == 0);
- if (status & SWFDEC_STATUS_INIT) {
- /* HACK for native flv playback */
- swfdec_player_initialize (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context), 7,
- SWFDEC_DECODER (stream->flvdecoder)->rate,
- SWFDEC_DECODER (stream->flvdecoder)->width,
- SWFDEC_DECODER (stream->flvdecoder)->height);
- }
if (status & SWFDEC_STATUS_IMAGE)
swfdec_net_stream_loader_target_recheck (stream);
}
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 260c57d..3f2af12 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -33,7 +33,6 @@
#include "swfdec_debug.h"
#include "swfdec_decoder.h"
#include "swfdec_flash_security.h"
-#include "swfdec_flv_decoder.h"
#include "swfdec_loader_internal.h"
#include "swfdec_loadertarget.h"
#include "swfdec_movie_clip_loader.h"
@@ -98,8 +97,6 @@ swfdec_resource_loader_target_image (SwfdecResource *instance)
movie->n_frames = movie->sprite->n_frames;
swfdec_movie_invalidate (SWFDEC_MOVIE (movie));
swfdec_resource_check_rights (instance);
- } else if (SWFDEC_IS_FLV_DECODER (instance->decoder)) {
- /* nothing to do, please move along */
} else {
g_assert_not_reached ();
}
@@ -174,10 +171,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
return;
}
- if (SWFDEC_IS_FLV_DECODER (dec)) {
- swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_FLV);
- swfdec_flv_decoder_add_movie (SWFDEC_FLV_DECODER (dec), SWFDEC_MOVIE (instance->movie));
- } else if (SWFDEC_IS_SWF_DECODER (dec)) {
+ if (SWFDEC_IS_SWF_DECODER (dec)) {
swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_SWF);
instance->decoder = dec;
} else {
commit 546be3822d7756028146bc2dbe0c6c077c795dfc
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Nov 7 13:23:58 2007 +0100
fix computation of _framesloaded property
diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c
index 1249aaf..264484b 100644
--- a/libswfdec/swfdec_sprite_movie.c
+++ b/libswfdec/swfdec_sprite_movie.c
@@ -840,15 +840,18 @@ swfdec_sprite_movie_unload (SwfdecSpriteMovie *movie)
int
swfdec_sprite_movie_get_frames_loaded (SwfdecSpriteMovie *movie)
{
- SwfdecSprite *sprite;
+ SwfdecResource *resource;
+ SwfdecDecoder *dec;
g_return_val_if_fail (SWFDEC_IS_SPRITE_MOVIE (movie), 0);
- sprite = movie->sprite;
- if (sprite == 0)
- return 0;
- if (sprite->parse_frame == sprite->n_frames)
- return sprite->n_frames;
-
- return sprite->parse_frame - 1;
+ resource = swfdec_movie_get_own_resource (SWFDEC_MOVIE (movie));
+ if (resource == NULL)
+ return 1;
+ dec = resource->decoder;
+ if (dec == NULL)
+ return -1;
+ if (dec->frames_loaded < dec->frames_total)
+ return dec->frames_loaded - 1;
+ return dec->frames_total;
}
commit 26330325fa76c32fbbff3609103863a4c6e73832
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Nov 7 13:23:44 2007 +0100
fix values for _totalframes property
diff --git a/libswfdec/swfdec_movie_asprops.c b/libswfdec/swfdec_movie_asprops.c
index f704f79..35fa280 100644
--- a/libswfdec/swfdec_movie_asprops.c
+++ b/libswfdec/swfdec_movie_asprops.c
@@ -29,6 +29,7 @@
#include "swfdec_as_strings.h"
#include "swfdec_bits.h"
#include "swfdec_debug.h"
+#include "swfdec_decoder.h"
#include "swfdec_player_internal.h"
#include "swfdec_sprite.h"
#include "swfdec_sprite_movie.h"
@@ -137,38 +138,53 @@ mc_yscale_set (SwfdecMovie *movie, const SwfdecAsValue *val)
}
static void
-mc_currentframe (SwfdecMovie *movie, SwfdecAsValue *rval)
+mc_name_get (SwfdecMovie *movie, SwfdecAsValue *rval)
{
- g_assert (SWFDEC_IS_SPRITE_MOVIE (movie));
- SWFDEC_AS_VALUE_SET_NUMBER (rval, SWFDEC_SPRITE_MOVIE (movie)->frame);
+ SWFDEC_AS_VALUE_SET_STRING (rval, movie->name);
}
static void
-mc_framesloaded (SwfdecMovie *mov, SwfdecAsValue *rval)
+mc_name_set (SwfdecMovie *movie, const SwfdecAsValue *val)
{
- SwfdecSpriteMovie *movie = SWFDEC_SPRITE_MOVIE (mov);
-
- SWFDEC_AS_VALUE_SET_INT (rval,
- swfdec_sprite_movie_get_frames_loaded (movie));
+ movie->name = swfdec_as_value_to_string (SWFDEC_AS_OBJECT (movie)->context, val);
}
static void
-mc_name_get (SwfdecMovie *movie, SwfdecAsValue *rval)
+mc_currentframe (SwfdecMovie *movie, SwfdecAsValue *rval)
{
- SWFDEC_AS_VALUE_SET_STRING (rval, movie->name);
+ g_assert (SWFDEC_IS_SPRITE_MOVIE (movie));
+ SWFDEC_AS_VALUE_SET_NUMBER (rval, SWFDEC_SPRITE_MOVIE (movie)->frame);
}
static void
-mc_name_set (SwfdecMovie *movie, const SwfdecAsValue *val)
+mc_framesloaded (SwfdecMovie *mov, SwfdecAsValue *rval)
{
- movie->name = swfdec_as_value_to_string (SWFDEC_AS_OBJECT (movie)->context, val);
+ SwfdecSpriteMovie *movie = SWFDEC_SPRITE_MOVIE (mov);
+
+ SWFDEC_AS_VALUE_SET_INT (rval,
+ swfdec_sprite_movie_get_frames_loaded (movie));
}
static void
mc_totalframes (SwfdecMovie *movie, SwfdecAsValue *rval)
{
+ SwfdecResource *resource;
+ SwfdecDecoder *dec;
+ int frames;
+
g_assert (SWFDEC_IS_SPRITE_MOVIE (movie));
- SWFDEC_AS_VALUE_SET_INT (rval, SWFDEC_SPRITE_MOVIE (movie)->n_frames);
+
+ resource = swfdec_movie_get_own_resource (SWFDEC_MOVIE (movie));
+ if (resource == NULL) {
+ frames = 1;
+ } else {
+ dec = resource->decoder;
+ if (dec == NULL)
+ frames = 0;
+ else
+ frames = dec->frames_total;
+ }
+ SWFDEC_AS_VALUE_SET_INT (rval, frames);
}
static void
More information about the Swfdec
mailing list