[Swfdec] 11 commits - libswfdec/swfdec_color.c libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_movie.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_net_stream.h libswfdec/swfdec_pattern.c libswfdec/swfdec_script.c NEWS test/trace

Benjamin Otte company at kemper.freedesktop.org
Thu Mar 22 08:48:44 PDT 2007


 NEWS                                             |   13 +
 libswfdec/swfdec_color.c                         |    2 
 libswfdec/swfdec_flv_decoder.c                   |    8 -
 libswfdec/swfdec_js_net_stream.c                 |   16 ++
 libswfdec/swfdec_movie.c                         |    2 
 libswfdec/swfdec_net_stream.c                    |   47 ++++++
 libswfdec/swfdec_net_stream.h                    |    2 
 libswfdec/swfdec_pattern.c                       |    2 
 libswfdec/swfdec_script.c                        |   29 ++-
 test/trace/Makefile.am                           |    8 +
 test/trace/divide-7.swf                          |binary
 test/trace/divide-7.swf.trace                    |  169 +++++++++++++++++++++++
 test/trace/divide.as                             |    9 +
 test/trace/doaction-after-placeobject.swf        |binary
 test/trace/doaction-after-placeobject.swf.trace  |    3 
 test/trace/doaction-before-placeobject.c         |   38 +++++
 test/trace/doaction-before-placeobject.swf       |binary
 test/trace/doaction-before-placeobject.swf.trace |    3 
 test/trace/object-math-7.swf.trace               |    4 
 test/trace/undefined2-7.swf.trace                |    2 
 20 files changed, 337 insertions(+), 20 deletions(-)

New commits:
diff-tree 78f8f60164ab0703da6ad2ade859b41ef1602d98 (from 61b98c071a73378f4095ca33648ab0959e80ef6d)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 16:46:31 2007 +0100

    update NEWS

diff --git a/NEWS b/NEWS
index e3cecde..d31b5d2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,17 @@
 
+ 0.4.3 ("Your tube")
+
+This release can play Youtube video. While this alone is enough for a 
+release, this was needed to make it possible:
+- add lots of new features to the script interpreter, in particular 
+  support for inheritance and the Object.registerClass function.
+- rework the streaming and implement the NetStream, NetConnection and
+  XML script objects partially
+- support passing variables to movies
+- improvements to the JPEG decoder
+- improvements to the debugging framework and the debugger
+- support some more Flash 8 tags (in particular DefineFont3)
+
  0.4.2 ("Two completely different numbers")
 
 The main change for this release is changing script execution from 
diff-tree 61b98c071a73378f4095ca33648ab0959e80ef6d (from 2e1567e05b0be7c6fbdb8a11ddd39d0532e955f0)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 16:12:49 2007 +0100

    remove the audio stream on EOS

diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 2b249f4..99363f9 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -157,6 +157,14 @@ swfdec_net_stream_timeout (SwfdecTimeout
     stream->timeout.timestamp += SWFDEC_MSECS_TO_TICKS (stream->next_time - stream->current_time);
     stream->timeout.callback = swfdec_net_stream_timeout;
     swfdec_player_add_timeout (stream->player, &stream->timeout);
+  } else {
+    if (stream->audio) {
+      /* FIXME: just unref and let it take care of removing itself? */
+      SWFDEC_LOG ("stopping audio due to EOS");
+      swfdec_audio_remove (stream->audio);
+      g_object_unref (stream->audio);
+      stream->audio = NULL;
+    }
   }
 }
 
diff-tree 2e1567e05b0be7c6fbdb8a11ddd39d0532e955f0 (from 1c8355cf179bd07ae8b9929d2ff8cd9018e7e8cf)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 16:11:08 2007 +0100

    implement NetStream.seek

diff --git a/libswfdec/swfdec_js_net_stream.c b/libswfdec/swfdec_js_net_stream.c
index a977ea8..873f673 100644
--- a/libswfdec/swfdec_js_net_stream.c
+++ b/libswfdec/swfdec_js_net_stream.c
@@ -80,9 +80,25 @@ swfdec_js_net_stream_set_buffer_time (JS
   return JS_TRUE;
 }
 
+static JSBool
+swfdec_js_net_stream_seek (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+{
+  SwfdecNetStream *stream;
+  double d;
+
+  stream = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_NET_STREAM);
+  if (stream == NULL)
+    return JS_TRUE;
+  if (!JS_ValueToNumber (cx, argv[0], &d))
+    return JS_FALSE;
+  swfdec_net_stream_seek (stream, d);
+  return JS_TRUE;
+}
+
 static JSFunctionSpec net_stream_methods[] = {
   { "pause",		swfdec_js_net_stream_pause,		0, 0, 0 },
   { "play",		swfdec_js_net_stream_play,		1, 0, 0 },
+  { "seek",		swfdec_js_net_stream_seek,		1, 0, 0 },
   { "setBufferTime",  	swfdec_js_net_stream_set_buffer_time,	1, 0, 0 },
   { NULL }
 };
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 2bc6b23..2b249f4 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -21,6 +21,7 @@
 #include "config.h"
 #endif
 
+#include <math.h>
 #include "swfdec_net_stream.h"
 #include "swfdec_amf.h"
 #include "swfdec_audio_flv.h"
@@ -174,6 +175,7 @@ swfdec_net_stream_update_playing (Swfdec
     stream->timeout.timestamp = stream->player->time + SWFDEC_MSECS_TO_TICKS (stream->next_time - stream->current_time);
     swfdec_player_add_timeout (stream->player, &stream->timeout);
     if (stream->flvdecoder->audio) {
+      g_assert (stream->audio == NULL);
       SWFDEC_LOG ("starting audio");
       stream->audio = swfdec_audio_flv_new (stream->player, 
 	  stream->flvdecoder, stream->current_time);
@@ -447,3 +449,40 @@ swfdec_net_stream_get_buffer_time (Swfde
   return (double) stream->buffer_time / 1000.0;
 }
 
+void
+swfdec_net_stream_seek (SwfdecNetStream *stream, double secs)
+{
+  guint first, last, msecs;
+
+  g_return_if_fail (SWFDEC_IS_NET_STREAM (stream));
+
+  if (stream->flvdecoder == NULL)
+    return;
+  if (!finite (secs) || secs < 0) {
+    SWFDEC_ERROR ("seeking to %g doesn't work", secs);
+    return;
+  }
+  if (!swfdec_flv_decoder_get_video_info (stream->flvdecoder, &first, &last)) {
+    SWFDEC_ERROR ("FIXME: implement seeking in audio only NetStream");
+    return;
+  }
+  msecs = secs * 1000;
+  msecs += first;
+  if (msecs > last)
+    msecs = last;
+  swfdec_flv_decoder_get_video (stream->flvdecoder, msecs, TRUE, NULL, &msecs, NULL);
+  swfdec_net_stream_video_goto (stream, msecs);
+  /* FIXME: this needs to be implemented correctly, but requires changes to audio handling:
+   * - creating a new audio stream will cause attachAudio scripts to lose information 
+   * - implementing seek on audio stream requires a SwfdecAudio::changed signal so audio
+   *   backends can react correctly.
+   */
+  if (stream->audio) {
+    SWFDEC_WARNING ("FIXME: restarting audio after seek");
+    swfdec_audio_remove (stream->audio);
+    g_object_unref (stream->audio);
+    stream->audio = swfdec_audio_flv_new (stream->player, 
+	stream->flvdecoder, stream->current_time);
+  }
+}
+
diff --git a/libswfdec/swfdec_net_stream.h b/libswfdec/swfdec_net_stream.h
index c36c45a..7973b5f 100644
--- a/libswfdec/swfdec_net_stream.h
+++ b/libswfdec/swfdec_net_stream.h
@@ -89,6 +89,8 @@ gboolean		swfdec_net_stream_get_playing	
 void			swfdec_net_stream_set_buffer_time (SwfdecNetStream *	stream,
 							 double			secs);
 double			swfdec_net_stream_get_buffer_time (SwfdecNetStream *	stream);
+void			swfdec_net_stream_seek		(SwfdecNetStream *	stream,
+							 double			secs);
 
 
 G_END_DECLS
diff-tree 1c8355cf179bd07ae8b9929d2ff8cd9018e7e8cf (from 5170c8201388e47cb1f7712f77aba4bac4f4f1ec)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 16:09:55 2007 +0100

    implement seeking to keyframes

diff --git a/libswfdec/swfdec_flv_decoder.c b/libswfdec/swfdec_flv_decoder.c
index 7615225..807447e 100644
--- a/libswfdec/swfdec_flv_decoder.c
+++ b/libswfdec/swfdec_flv_decoder.c
@@ -479,13 +479,19 @@ swfdec_flv_decoder_get_video (SwfdecFlvD
   offset = g_array_index (flv->video, SwfdecFlvVideoTag, 0).timestamp;
   timestamp += offset;
   id = swfdec_flv_decoder_find_video (flv, timestamp);
+  tag = &g_array_index (flv->video, SwfdecFlvVideoTag, id);
+  if (keyframe) {
+    while (id > 0 && tag->frame_type != 1) {
+      id--;
+      tag--;
+    }
+  }
   if (next_timestamp) {
     if (id + 1 >= flv->video->len)
       *next_timestamp = 0;
     else
       *next_timestamp = g_array_index (flv->video, SwfdecFlvVideoTag, id + 1).timestamp - offset;
   }
-  tag = &g_array_index (flv->video, SwfdecFlvVideoTag, id);
   if (real_timestamp)
     *real_timestamp = tag->timestamp - offset;
   if (format)
diff-tree 5170c8201388e47cb1f7712f77aba4bac4f4f1ec (from 6283f02130ba03c957c7680a24d61aba28f592d3)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 16:08:29 2007 +0100

    non-invertible matrix is only INFO
    
    It's normal when someone set width or height to 0

diff --git a/libswfdec/swfdec_color.c b/libswfdec/swfdec_color.c
index c4fa52e..a3e3077 100644
--- a/libswfdec/swfdec_color.c
+++ b/libswfdec/swfdec_color.c
@@ -198,7 +198,7 @@ swfdec_matrix_ensure_invertible (cairo_m
   
   *inverse = *matrix;
   while (cairo_matrix_invert (inverse)) {
-    SWFDEC_WARNING ("matrix not invertible, adding epsilon to smallest member");
+    SWFDEC_INFO ("matrix not invertible, adding epsilon to smallest member");
     /* add epsilon at point closest to zero */
 #define EPSILON (1.0 / SWFDEC_FIXED_SCALE_FACTOR)
     if (ABS (matrix->xx) <= ABS (matrix->xy) && 
diff-tree 6283f02130ba03c957c7680a24d61aba28f592d3 (from 5f43dccbfd326b8df79249e5c6677a53d961d97e)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 13:45:20 2007 +0100

    if an image failed to decode, don't render it

diff --git a/libswfdec/swfdec_pattern.c b/libswfdec/swfdec_pattern.c
index 863271e..f2d665a 100644
--- a/libswfdec/swfdec_pattern.c
+++ b/libswfdec/swfdec_pattern.c
@@ -267,6 +267,8 @@ swfdec_image_pattern_paint (SwfdecPatter
   cairo_surface_t *surface;
   
   surface = swfdec_image_create_surface_transformed (image->image, trans);
+  if (surface == NULL)
+    return;
   cairo_append_path (cr, (cairo_path_t *) path);
   pattern = cairo_pattern_create_for_surface (surface);
   cairo_surface_destroy (surface);
diff-tree 5f43dccbfd326b8df79249e5c6677a53d961d97e (from 21dc65d52d4f3fcb5801e0a4e6d6702aab67ecd8)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 13:45:00 2007 +0100

    clarify the g_warning: It's a cairo error

diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 17e2217..3317fb2 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -644,7 +644,7 @@ swfdec_movie_render (SwfdecMovie *movie,
   }
 #endif
   if (cairo_status (cr) != CAIRO_STATUS_SUCCESS) {
-    g_warning ("%s", cairo_status_to_string (cairo_status (cr)));
+    g_warning ("error rendering with cairo: %s", cairo_status_to_string (cairo_status (cr)));
   }
   cairo_restore (cr);
 }
diff-tree 21dc65d52d4f3fcb5801e0a4e6d6702aab67ecd8 (from 531ca50cda5bbe981109c0900b6a807080438df9)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 13:27:17 2007 +0100

    Fix division code

diff --git a/libswfdec/swfdec_script.c b/libswfdec/swfdec_script.c
index d96ec0f..a9f16e0 100644
--- a/libswfdec/swfdec_script.c
+++ b/libswfdec/swfdec_script.c
@@ -283,6 +283,10 @@ swfdec_value_to_number_7 (JSContext *cx,
   if (JSVAL_IS_OBJECT (val)) {
     *d = *cx->runtime->jsNaN;
     return JS_TRUE;
+  } else if (JSVAL_IS_STRING (val) &&
+      JS_GetStringLength (JSVAL_TO_STRING (val)) == 0) {
+    *d = *cx->runtime->jsNaN;
+    return JS_TRUE;
   } else {
     return JS_ValueToNumber (cx, val, d);
   }
@@ -973,20 +977,17 @@ swfdec_action_binary (JSContext *cx, gui
       l = l * r;
       break;
     case 0x0d:
-      if (isnan (r))
-	r = 0;
-      if (r == 0 && ((SwfdecScript *) cx->fp->swf)->version < 5) {
-	JSString *str = JS_InternString (cx, "#ERROR#");
-	if (str == NULL)
-	  return JS_FALSE;
-	cx->fp->sp[-1] = STRING_TO_JSVAL (str);
-	return JS_TRUE;
-      } else if (((SwfdecScript *) cx->fp->swf)->version >= 7 &&
-	  r == 0) {
-	cx->fp->sp[-1] = DOUBLE_TO_JSVAL (r < 0 ? 
-	    cx->runtime->jsNegativeInfinity :
-	    cx->runtime->jsPositiveInfinity);
-	return JS_TRUE;
+      if (((SwfdecScript *) cx->fp->swf)->version < 5) {
+	if (r == 0) {
+	  JSString *str = JS_InternString (cx, "#ERROR#");
+	  if (str == NULL)
+	    return JS_FALSE;
+	  cx->fp->sp[-1] = STRING_TO_JSVAL (str);
+	  return JS_TRUE;
+	}
+      } else if (((SwfdecScript *) cx->fp->swf)->version < 7) {
+	if (isnan (r))
+	  r = 0;
       }
       l = l / r;
       break;
diff-tree 531ca50cda5bbe981109c0900b6a807080438df9 (from 88a6be304daace619eccd9fe6dc5a002f94afd90)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 13:26:50 2007 +0100

    add a new test for division
    
    I have versions for flash 5 and 6 locally, but those don't pass yet.

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index b5d0d58..9f66866 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -58,6 +58,9 @@ EXTRA_DIST = \
 	countdown.swf.trace \
 	currentframe.swf \
 	currentframe.swf.trace \
+	divide.as \
+	divide-7.swf \
+	divide-7.swf.trace \
 	doaction-after-placeobject.swf.trace \
 	doaction-after-placeobject.swf \
 	doaction-before-placeobject.c \
diff --git a/test/trace/divide-7.swf b/test/trace/divide-7.swf
new file mode 100644
index 0000000..1750c74
Binary files /dev/null and b/test/trace/divide-7.swf differ
diff --git a/test/trace/divide-7.swf.trace b/test/trace/divide-7.swf.trace
new file mode 100644
index 0000000..90fc8c4
--- /dev/null
+++ b/test/trace/divide-7.swf.trace
@@ -0,0 +1,169 @@
+0 (number) / 0 (number) = NaN
+0 (number) / undefined (undefined) = NaN
+0 (number) / null (null) = NaN
+0 (number) / 1 (number) = 0
+0 (number) / -1 (number) = 0
+0 (number) / 0 (number) = NaN
+0 (number) / [object Object] (object) = NaN
+0 (number) / _level0 (movieclip) = NaN
+0 (number) / [type Function] (function) = NaN
+0 (number) / 1 (string) = 0
+0 (number) / 0 (string) = NaN
+0 (number) /  (string) = NaN
+0 (number) / foo (string) = NaN
+undefined (undefined) / 0 (number) = NaN
+undefined (undefined) / undefined (undefined) = NaN
+undefined (undefined) / null (null) = NaN
+undefined (undefined) / 1 (number) = NaN
+undefined (undefined) / -1 (number) = NaN
+undefined (undefined) / 0 (number) = NaN
+undefined (undefined) / [object Object] (object) = NaN
+undefined (undefined) / _level0 (movieclip) = NaN
+undefined (undefined) / [type Function] (function) = NaN
+undefined (undefined) / 1 (string) = NaN
+undefined (undefined) / 0 (string) = NaN
+undefined (undefined) /  (string) = NaN
+undefined (undefined) / foo (string) = NaN
+null (null) / 0 (number) = NaN
+null (null) / undefined (undefined) = NaN
+null (null) / null (null) = NaN
+null (null) / 1 (number) = NaN
+null (null) / -1 (number) = NaN
+null (null) / 0 (number) = NaN
+null (null) / [object Object] (object) = NaN
+null (null) / _level0 (movieclip) = NaN
+null (null) / [type Function] (function) = NaN
+null (null) / 1 (string) = NaN
+null (null) / 0 (string) = NaN
+null (null) /  (string) = NaN
+null (null) / foo (string) = NaN
+1 (number) / 0 (number) = Infinity
+1 (number) / undefined (undefined) = NaN
+1 (number) / null (null) = NaN
+1 (number) / 1 (number) = 1
+1 (number) / -1 (number) = -1
+1 (number) / 0 (number) = Infinity
+1 (number) / [object Object] (object) = NaN
+1 (number) / _level0 (movieclip) = NaN
+1 (number) / [type Function] (function) = NaN
+1 (number) / 1 (string) = 1
+1 (number) / 0 (string) = Infinity
+1 (number) /  (string) = NaN
+1 (number) / foo (string) = NaN
+-1 (number) / 0 (number) = -Infinity
+-1 (number) / undefined (undefined) = NaN
+-1 (number) / null (null) = NaN
+-1 (number) / 1 (number) = -1
+-1 (number) / -1 (number) = 1
+-1 (number) / 0 (number) = -Infinity
+-1 (number) / [object Object] (object) = NaN
+-1 (number) / _level0 (movieclip) = NaN
+-1 (number) / [type Function] (function) = NaN
+-1 (number) / 1 (string) = -1
+-1 (number) / 0 (string) = -Infinity
+-1 (number) /  (string) = NaN
+-1 (number) / foo (string) = NaN
+0 (number) / 0 (number) = NaN
+0 (number) / undefined (undefined) = NaN
+0 (number) / null (null) = NaN
+0 (number) / 1 (number) = 0
+0 (number) / -1 (number) = 0
+0 (number) / 0 (number) = NaN
+0 (number) / [object Object] (object) = NaN
+0 (number) / _level0 (movieclip) = NaN
+0 (number) / [type Function] (function) = NaN
+0 (number) / 1 (string) = 0
+0 (number) / 0 (string) = NaN
+0 (number) /  (string) = NaN
+0 (number) / foo (string) = NaN
+[object Object] (object) / 0 (number) = NaN
+[object Object] (object) / undefined (undefined) = NaN
+[object Object] (object) / null (null) = NaN
+[object Object] (object) / 1 (number) = NaN
+[object Object] (object) / -1 (number) = NaN
+[object Object] (object) / 0 (number) = NaN
+[object Object] (object) / [object Object] (object) = NaN
+[object Object] (object) / _level0 (movieclip) = NaN
+[object Object] (object) / [type Function] (function) = NaN
+[object Object] (object) / 1 (string) = NaN
+[object Object] (object) / 0 (string) = NaN
+[object Object] (object) /  (string) = NaN
+[object Object] (object) / foo (string) = NaN
+_level0 (movieclip) / 0 (number) = NaN
+_level0 (movieclip) / undefined (undefined) = NaN
+_level0 (movieclip) / null (null) = NaN
+_level0 (movieclip) / 1 (number) = NaN
+_level0 (movieclip) / -1 (number) = NaN
+_level0 (movieclip) / 0 (number) = NaN
+_level0 (movieclip) / [object Object] (object) = NaN
+_level0 (movieclip) / _level0 (movieclip) = NaN
+_level0 (movieclip) / [type Function] (function) = NaN
+_level0 (movieclip) / 1 (string) = NaN
+_level0 (movieclip) / 0 (string) = NaN
+_level0 (movieclip) /  (string) = NaN
+_level0 (movieclip) / foo (string) = NaN
+[type Function] (function) / 0 (number) = NaN
+[type Function] (function) / undefined (undefined) = NaN
+[type Function] (function) / null (null) = NaN
+[type Function] (function) / 1 (number) = NaN
+[type Function] (function) / -1 (number) = NaN
+[type Function] (function) / 0 (number) = NaN
+[type Function] (function) / [object Object] (object) = NaN
+[type Function] (function) / _level0 (movieclip) = NaN
+[type Function] (function) / [type Function] (function) = NaN
+[type Function] (function) / 1 (string) = NaN
+[type Function] (function) / 0 (string) = NaN
+[type Function] (function) /  (string) = NaN
+[type Function] (function) / foo (string) = NaN
+1 (string) / 0 (number) = Infinity
+1 (string) / undefined (undefined) = NaN
+1 (string) / null (null) = NaN
+1 (string) / 1 (number) = 1
+1 (string) / -1 (number) = -1
+1 (string) / 0 (number) = Infinity
+1 (string) / [object Object] (object) = NaN
+1 (string) / _level0 (movieclip) = NaN
+1 (string) / [type Function] (function) = NaN
+1 (string) / 1 (string) = 1
+1 (string) / 0 (string) = Infinity
+1 (string) /  (string) = NaN
+1 (string) / foo (string) = NaN
+0 (string) / 0 (number) = NaN
+0 (string) / undefined (undefined) = NaN
+0 (string) / null (null) = NaN
+0 (string) / 1 (number) = 0
+0 (string) / -1 (number) = 0
+0 (string) / 0 (number) = NaN
+0 (string) / [object Object] (object) = NaN
+0 (string) / _level0 (movieclip) = NaN
+0 (string) / [type Function] (function) = NaN
+0 (string) / 1 (string) = 0
+0 (string) / 0 (string) = NaN
+0 (string) /  (string) = NaN
+0 (string) / foo (string) = NaN
+ (string) / 0 (number) = NaN
+ (string) / undefined (undefined) = NaN
+ (string) / null (null) = NaN
+ (string) / 1 (number) = NaN
+ (string) / -1 (number) = NaN
+ (string) / 0 (number) = NaN
+ (string) / [object Object] (object) = NaN
+ (string) / _level0 (movieclip) = NaN
+ (string) / [type Function] (function) = NaN
+ (string) / 1 (string) = NaN
+ (string) / 0 (string) = NaN
+ (string) /  (string) = NaN
+ (string) / foo (string) = NaN
+foo (string) / 0 (number) = NaN
+foo (string) / undefined (undefined) = NaN
+foo (string) / null (null) = NaN
+foo (string) / 1 (number) = NaN
+foo (string) / -1 (number) = NaN
+foo (string) / 0 (number) = NaN
+foo (string) / [object Object] (object) = NaN
+foo (string) / _level0 (movieclip) = NaN
+foo (string) / [type Function] (function) = NaN
+foo (string) / 1 (string) = NaN
+foo (string) / 0 (string) = NaN
+foo (string) /  (string) = NaN
+foo (string) / foo (string) = NaN
diff --git a/test/trace/divide.as b/test/trace/divide.as
new file mode 100644
index 0000000..b42cbc6
--- /dev/null
+++ b/test/trace/divide.as
@@ -0,0 +1,9 @@
+// makeswf -v 7 -s 200x150 -r 1 -o movie2.swf movie2.as
+
+array = [ 0, undefined, null, 1, -1, -0, new Object (), this, getDepth, "1", "0", "", "foo" ];
+
+for (i = 0; i < array.length; i++) {
+  for (j = 0; j < array.length; j++) {
+    trace (array[i] + " (" + typeof (array[i]) + ") / " + array[j] + " (" + typeof (array[j]) + ") = " + (array[i] / array[j]));
+  };
+};
diff-tree 88a6be304daace619eccd9fe6dc5a002f94afd90 (from 225136e318d59ab6721e7ec006c8fa23d3f296b8)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 13:20:39 2007 +0100

    update expected results for 2 tests
    
    See http://swfdec.freedesktop.org/wiki/FlashConsistency for details.

diff --git a/test/trace/object-math-7.swf.trace b/test/trace/object-math-7.swf.trace
index 751247d..9f5483e 100755
--- a/test/trace/object-math-7.swf.trace
+++ b/test/trace/object-math-7.swf.trace
@@ -11,7 +11,7 @@ NaN
 NaN
 NaN
 NaN
-Infinity
 NaN
 NaN
-Infinity
+NaN
+NaN
diff --git a/test/trace/undefined2-7.swf.trace b/test/trace/undefined2-7.swf.trace
index 5ee1318..8cea3bf 100755
--- a/test/trace/undefined2-7.swf.trace
+++ b/test/trace/undefined2-7.swf.trace
@@ -10,4 +10,4 @@ NaN
 NaN
 NaN
 NaN
-Infinity
+NaN
diff-tree 225136e318d59ab6721e7ec006c8fa23d3f296b8 (from 13171a49b02675d44bc54c91ec872e173cfcefd6)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Mar 22 12:29:07 2007 +0100

    add tests to make sure DoAction and PlaceObject triggered actions
    happen in the order those tags appear.

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 3a7fd4c..b5d0d58 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -58,6 +58,11 @@ EXTRA_DIST = \
 	countdown.swf.trace \
 	currentframe.swf \
 	currentframe.swf.trace \
+	doaction-after-placeobject.swf.trace \
+	doaction-after-placeobject.swf \
+	doaction-before-placeobject.c \
+	doaction-before-placeobject.swf \
+	doaction-before-placeobject.swf.trace \
 	double.swf \
 	event-order.swf \
 	empty-stack.as \
diff --git a/test/trace/doaction-after-placeobject.swf b/test/trace/doaction-after-placeobject.swf
new file mode 100644
index 0000000..c7a486c
Binary files /dev/null and b/test/trace/doaction-after-placeobject.swf differ
diff --git a/test/trace/doaction-after-placeobject.swf.trace b/test/trace/doaction-after-placeobject.swf.trace
new file mode 100644
index 0000000..9bb7d8b
--- /dev/null
+++ b/test/trace/doaction-after-placeobject.swf.trace
@@ -0,0 +1,3 @@
+clipEvent (load)
+_level0.m
+Frame 0
diff --git a/test/trace/doaction-before-placeobject.c b/test/trace/doaction-before-placeobject.c
new file mode 100644
index 0000000..be09e2e
--- /dev/null
+++ b/test/trace/doaction-before-placeobject.c
@@ -0,0 +1,38 @@
+/* gcc `pkg-config --libs --cflags libming` doaction-before-placeobject.c -o doaction-before-placeobject && ./doaction-before-placeobject
+ */
+
+#include <ming.h>
+
+/* The file doaction-after-placeobject.swf was created from 
+ * doaction-before-placeobject.swf by manually swapping the DoAction and
+ * PlaceObject2 tags in the file with a hex editor
+ */
+int
+main (int argc, char **argv)
+{
+  SWFMovie movie;
+  SWFMovieClip clip;
+  SWFDisplayItem item;
+
+  if (Ming_init ())
+    return 1;
+  Ming_useSWFVersion (7);
+
+  movie = newSWFMovie();
+  SWFMovie_setRate (movie, 1);
+  SWFMovie_setDimension (movie, 200, 150);
+
+  clip = newSWFMovieClip ();
+  item = SWFMovie_add (movie, (SWFBlock) clip);
+  SWFDisplayItem_setName (item, "m");
+  SWFDisplayItem_addAction (item, compileSWFActionCode (""
+      "  trace (\"clipEvent (load)\");"
+      "  trace (this);"
+      ""), SWFACTION_ONLOAD);
+  SWFMovie_add (movie, (SWFBlock) compileSWFActionCode (""
+      "trace (\"Frame 0\");"
+      ""));
+
+  SWFMovie_save (movie, "doaction-before-placeobject.swf");
+  return 0;
+}
diff --git a/test/trace/doaction-before-placeobject.swf b/test/trace/doaction-before-placeobject.swf
new file mode 100644
index 0000000..fbdcbf5
Binary files /dev/null and b/test/trace/doaction-before-placeobject.swf differ
diff --git a/test/trace/doaction-before-placeobject.swf.trace b/test/trace/doaction-before-placeobject.swf.trace
new file mode 100644
index 0000000..39396d0
--- /dev/null
+++ b/test/trace/doaction-before-placeobject.swf.trace
@@ -0,0 +1,3 @@
+Frame 0
+clipEvent (load)
+_level0.m


More information about the Swfdec mailing list