Benjamin Otte
2008-Jun-15 12:28 UTC
[Swfdec-commits] 14 commits - configure.ac swfdec/.gitignore swfdec-gtk/swfdec_gtk_loader.c swfdec-gtk/swfdec_playback_alsa.c swfdec/Makefile.am swfdec/swfdec_asnative.h swfdec/swfdec_as_string.c swfdec/swfdec_audio.c swfdec/swfdec_audio_load.c swfdec/swfdec_audio_load.h swfdec/swfdec_audio_stream.c swfdec/swfdec_audio_stream.h swfdec/swfdec_audio_swf_stream.c swfdec/swfdec.h swfdec/swfdec_loader.h swfdec/swfdec_load_sound.c swfdec/swfdec_load_sound.h swfdec/swfdec_net_stream_as.c swfdec/swfdec_net_stream.c swfdec/swfdec_net_stream.h swfdec/swfdec_player_as.c swfdec/swfdec_player_internal.h swfdec/swfdec_policy_file.c swfdec/swfdec_policy_file.h swfdec/swfdec_sandbox.h swfdec/swfdec_sound_object.c swfdec/swfdec_sound_object.h swfdec/swfdec_types.h test/trace vivified/code
configure.ac | 3 swfdec-gtk/swfdec_gtk_loader.c | 6 swfdec-gtk/swfdec_playback_alsa.c | 10 swfdec/.gitignore | 2 swfdec/Makefile.am | 13 swfdec/swfdec.h | 1 swfdec/swfdec_as_string.c | 10 swfdec/swfdec_asnative.h | 32 ++ swfdec/swfdec_audio.c | 12 swfdec/swfdec_audio_load.c | 93 ++++++ swfdec/swfdec_audio_load.h | 58 +++ swfdec/swfdec_audio_stream.c | 27 + swfdec/swfdec_audio_stream.h | 1 swfdec/swfdec_audio_swf_stream.c | 19 - swfdec/swfdec_load_sound.c | 356 +++++++++++++++++++++++ swfdec/swfdec_load_sound.h | 63 ++++ swfdec/swfdec_loader.h | 2 swfdec/swfdec_net_stream.c | 52 --- swfdec/swfdec_net_stream.h | 1 swfdec/swfdec_net_stream_as.c | 2 swfdec/swfdec_player_as.c | 4 swfdec/swfdec_player_internal.h | 5 swfdec/swfdec_policy_file.c | 57 +++ swfdec/swfdec_policy_file.h | 2 swfdec/swfdec_sandbox.h | 3 swfdec/swfdec_sound_object.c | 17 + swfdec/swfdec_sound_object.h | 4 swfdec/swfdec_types.h | 1 test/trace/Makefile.am | 9 test/trace/String-split-count-values-5.swf |binary test/trace/String-split-count-values-5.swf.trace | 133 ++++++++ test/trace/String-split-count-values-6.swf |binary test/trace/String-split-count-values-6.swf.trace | 134 ++++++++ test/trace/String-split-count-values-7.swf |binary test/trace/String-split-count-values-7.swf.trace | 134 ++++++++ test/trace/String-split-count-values-8.swf |binary test/trace/String-split-count-values-8.swf.trace | 134 ++++++++ test/trace/String-split-count-values.as | 11 vivified/code/vivi_code_function_call.c | 4 39 files changed, 1319 insertions(+), 96 deletions(-) New commits: commit 260038b28e98aa5bf9a29335a57e8218f92a2406 Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 21:46:04 2008 +0200 add test for recent fix diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 00226b2..587e6f0 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -3305,6 +3305,15 @@ EXTRA_DIST = \ string-split-6.swf.trace \ string-split-7.swf \ string-split-7.swf.trace \ + String-split-count-values-5.swf \ + String-split-count-values-5.swf.trace \ + String-split-count-values-6.swf \ + String-split-count-values-6.swf.trace \ + String-split-count-values-7.swf \ + String-split-count-values-7.swf.trace \ + String-split-count-values-8.swf \ + String-split-count-values-8.swf.trace \ + String-split-count-values.as \ string-split-empty.as \ string-split-empty-5.swf \ string-split-empty-5.swf.trace \ diff --git a/test/trace/String-split-count-values-5.swf b/test/trace/String-split-count-values-5.swf new file mode 100644 index 0000000..6375c6d Binary files /dev/null and b/test/trace/String-split-count-values-5.swf differ diff --git a/test/trace/String-split-count-values-5.swf.trace b/test/trace/String-split-count-values-5.swf.trace new file mode 100644 index 0000000..214a170 --- /dev/null +++ b/test/trace/String-split-count-values-5.swf.trace @@ -0,0 +1,133 @@ +valueOf called +toString called +toString called with +valueOf called with +0: valueOf! +1: valueOf! +2: valueOf! +3: valueOf! +4: valueOf! +5: valueOf! +6: valueOf! +7: valueOf! +8: valueOf! +9: valueOf! +10: valueOf! +11: valueOf! +12: valueOf! +13: valueOf! +14: valueOf! +15: valueOf! +16: valueOf! +17: valueOf! +18: valueOf! +19: valueOf! +20: valueOf! +21: valueOf! +22: valueOf! +22: toString! +23: valueOf! +23: toString! +24: valueOf! +24: toString! +25: valueOf! +26: valueOf! +26: toString! +27: valueOf! +27: toString! +28: valueOf! +28: toString! +29: valueOf! +29: toString! +(0) (undefined) - 12345 +(1) null (null) - +(2) true (boolean) - 12345 +(3) false (boolean) - +(4) 0 (number) - +(5) 1 (number) - 12345 +(6) 0.5 (number) - +(7) -1 (number) - +(8) -0.5 (number) - +(9) Infinity (number) - +(10) -Infinity (number) - +(11) NaN (number) - +(12) (string) - +(13) 0 (string) - +(14) -0 (string) - +(15) 0.0 (string) - +(16) 1 (string) - 12345 +(17) Hello World! (string) - +(18) true (string) - +(19) _level0 (string) - +(20) ???????????? (string) - +(21) _level0 (movieclip) - +(22) [object Object] (object) - +(23) 1035840244000 (object) - 12345 +(24) (object) - +(25) (undefined) - 12345 +valueOf called +(26) [type Object] (object) - +(27) [type Object] (object) - +valueOf called with +(28) [object Object] (object) - +(29) (object) - +0: valueOf! +(30) (object) - +1: valueOf! +(31) null (object) - +2: valueOf! +(32) true (object) - 12345 +3: valueOf! +(33) false (object) - +4: valueOf! +(34) 0 (object) - +5: valueOf! +(35) 1 (object) - 12345 +6: valueOf! +(36) 0.5 (object) - +7: valueOf! +(37) -1 (object) - +8: valueOf! +(38) -0.5 (object) - +9: valueOf! +(39) Infinity (object) - +10: valueOf! +(40) -Infinity (object) - +11: valueOf! +(41) NaN (object) - +12: valueOf! +(42) (object) - +13: valueOf! +(43) 0 (object) - +14: valueOf! +(44) -0 (object) - +15: valueOf! +(45) 0.0 (object) - +16: valueOf! +(46) 1 (object) - 12345 +17: valueOf! +(47) Hello World! (object) - +18: valueOf! +(48) true (object) - +19: valueOf! +(49) _level0 (object) - +20: valueOf! +(50) ???????????? (object) - +21: valueOf! +(51) _level0 (object) - +22: valueOf! +(52) [type Object] (object) - +23: valueOf! +(53) [type Object] (object) - +24: valueOf! +(54) [type Object] (object) - +25: valueOf! +(55) (object) - +26: valueOf! +(56) [type Object] (object) - +27: valueOf! +(57) [type Object] (object) - +28: valueOf! +(58) [type Object] (object) - +29: valueOf! +(59) [type Object] (object) - diff --git a/test/trace/String-split-count-values-6.swf b/test/trace/String-split-count-values-6.swf new file mode 100644 index 0000000..cac9d41 Binary files /dev/null and b/test/trace/String-split-count-values-6.swf differ diff --git a/test/trace/String-split-count-values-6.swf.trace b/test/trace/String-split-count-values-6.swf.trace new file mode 100644 index 0000000..57ca73f --- /dev/null +++ b/test/trace/String-split-count-values-6.swf.trace @@ -0,0 +1,134 @@ +valueOf called +toString called +toString called with +valueOf called with +0: valueOf! +1: valueOf! +2: valueOf! +3: valueOf! +4: valueOf! +5: valueOf! +6: valueOf! +7: valueOf! +8: valueOf! +9: valueOf! +10: valueOf! +11: valueOf! +12: valueOf! +13: valueOf! +14: valueOf! +15: valueOf! +16: valueOf! +17: valueOf! +18: valueOf! +19: valueOf! +20: valueOf! +21: valueOf! +22: valueOf! +22: toString! +23: valueOf! +23: toString! +24: valueOf! +24: toString! +25: valueOf! +25: toString! +26: valueOf! +26: toString! +27: valueOf! +27: toString! +28: valueOf! +28: toString! +29: valueOf! +29: toString! +(0) (undefined) - 1,45 +(1) null (null) - +(2) true (boolean) - 1 +(3) false (boolean) - +(4) 0 (number) - +(5) 1 (number) - 1 +(6) 0.5 (number) - +(7) -1 (number) - +(8) -0.5 (number) - +(9) Infinity (number) - +(10) -Infinity (number) - +(11) NaN (number) - +(12) (string) - +(13) 0 (string) - +(14) -0 (string) - +(15) 0.0 (string) - +(16) 1 (string) - 1 +(17) Hello World! (string) - +(18) true (string) - +(19) _level0 (string) - +(20) ?????? (string) - +(21) _level0 (movieclip) - +(22) [object Object] (object) - +(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object) - 1,45 +(24) (object) - +(25) [type Function] (function) - +valueOf called +(26) [type Object] (object) - +(27) [type Object] (object) - +valueOf called with +(28) [object Object] (object) - +(29) (object) - +0: valueOf! +(30) (object) - +1: valueOf! +(31) null (object) - +2: valueOf! +(32) true (object) - 1 +3: valueOf! +(33) false (object) - +4: valueOf! +(34) 0 (object) - +5: valueOf! +(35) 1 (object) - 1 +6: valueOf! +(36) 0.5 (object) - +7: valueOf! +(37) -1 (object) - +8: valueOf! +(38) -0.5 (object) - +9: valueOf! +(39) Infinity (object) - +10: valueOf! +(40) -Infinity (object) - +11: valueOf! +(41) NaN (object) - +12: valueOf! +(42) (object) - +13: valueOf! +(43) 0 (object) - +14: valueOf! +(44) -0 (object) - +15: valueOf! +(45) 0.0 (object) - +16: valueOf! +(46) 1 (object) - 1 +17: valueOf! +(47) Hello World! (object) - +18: valueOf! +(48) true (object) - +19: valueOf! +(49) _level0 (object) - +20: valueOf! +(50) ?????? (object) - +21: valueOf! +(51) _level0 (object) - +22: valueOf! +(52) [type Object] (object) - +23: valueOf! +(53) [type Object] (object) - +24: valueOf! +(54) [type Object] (object) - +25: valueOf! +(55) [type Object] (object) - +26: valueOf! +(56) [type Object] (object) - +27: valueOf! +(57) [type Object] (object) - +28: valueOf! +(58) [type Object] (object) - +29: valueOf! +(59) [type Object] (object) - diff --git a/test/trace/String-split-count-values-7.swf b/test/trace/String-split-count-values-7.swf new file mode 100644 index 0000000..55c2f50 Binary files /dev/null and b/test/trace/String-split-count-values-7.swf differ diff --git a/test/trace/String-split-count-values-7.swf.trace b/test/trace/String-split-count-values-7.swf.trace new file mode 100644 index 0000000..bbbae34 --- /dev/null +++ b/test/trace/String-split-count-values-7.swf.trace @@ -0,0 +1,134 @@ +valueOf called +toString called +toString called with +valueOf called with +0: valueOf! +1: valueOf! +2: valueOf! +3: valueOf! +4: valueOf! +5: valueOf! +6: valueOf! +7: valueOf! +8: valueOf! +9: valueOf! +10: valueOf! +11: valueOf! +12: valueOf! +13: valueOf! +14: valueOf! +15: valueOf! +16: valueOf! +17: valueOf! +18: valueOf! +19: valueOf! +20: valueOf! +21: valueOf! +22: valueOf! +22: toString! +23: valueOf! +23: toString! +24: valueOf! +24: toString! +25: valueOf! +25: toString! +26: valueOf! +26: toString! +27: valueOf! +27: toString! +28: valueOf! +28: toString! +29: valueOf! +29: toString! +(0) undefined (undefined) - 1,45 +(1) null (null) - +(2) true (boolean) - 1 +(3) false (boolean) - +(4) 0 (number) - +(5) 1 (number) - 1 +(6) 0.5 (number) - +(7) -1 (number) - +(8) -0.5 (number) - +(9) Infinity (number) - +(10) -Infinity (number) - +(11) NaN (number) - +(12) (string) - +(13) 0 (string) - +(14) -0 (string) - +(15) 0.0 (string) - +(16) 1 (string) - 1 +(17) Hello World! (string) - +(18) true (string) - +(19) _level0 (string) - +(20) ?????? (string) - +(21) _level0 (movieclip) - +(22) [object Object] (object) - +(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object) - 1,45 +(24) (object) - +(25) [type Function] (function) - +valueOf called +(26) [type Object] (object) - +(27) [type Object] (object) - +valueOf called with +(28) [object Object] (object) - +(29) undefined (object) - +0: valueOf! +(30) undefined (object) - +1: valueOf! +(31) null (object) - +2: valueOf! +(32) true (object) - 1 +3: valueOf! +(33) false (object) - +4: valueOf! +(34) 0 (object) - +5: valueOf! +(35) 1 (object) - 1 +6: valueOf! +(36) 0.5 (object) - +7: valueOf! +(37) -1 (object) - +8: valueOf! +(38) -0.5 (object) - +9: valueOf! +(39) Infinity (object) - +10: valueOf! +(40) -Infinity (object) - +11: valueOf! +(41) NaN (object) - +12: valueOf! +(42) (object) - +13: valueOf! +(43) 0 (object) - +14: valueOf! +(44) -0 (object) - +15: valueOf! +(45) 0.0 (object) - +16: valueOf! +(46) 1 (object) - 1 +17: valueOf! +(47) Hello World! (object) - +18: valueOf! +(48) true (object) - +19: valueOf! +(49) _level0 (object) - +20: valueOf! +(50) ?????? (object) - +21: valueOf! +(51) _level0 (object) - +22: valueOf! +(52) [type Object] (object) - +23: valueOf! +(53) [type Object] (object) - +24: valueOf! +(54) [type Object] (object) - +25: valueOf! +(55) [type Object] (object) - +26: valueOf! +(56) [type Object] (object) - +27: valueOf! +(57) [type Object] (object) - +28: valueOf! +(58) [type Object] (object) - +29: valueOf! +(59) [type Object] (object) - diff --git a/test/trace/String-split-count-values-8.swf b/test/trace/String-split-count-values-8.swf new file mode 100644 index 0000000..91ea844 Binary files /dev/null and b/test/trace/String-split-count-values-8.swf differ diff --git a/test/trace/String-split-count-values-8.swf.trace b/test/trace/String-split-count-values-8.swf.trace new file mode 100644 index 0000000..bbbae34 --- /dev/null +++ b/test/trace/String-split-count-values-8.swf.trace @@ -0,0 +1,134 @@ +valueOf called +toString called +toString called with +valueOf called with +0: valueOf! +1: valueOf! +2: valueOf! +3: valueOf! +4: valueOf! +5: valueOf! +6: valueOf! +7: valueOf! +8: valueOf! +9: valueOf! +10: valueOf! +11: valueOf! +12: valueOf! +13: valueOf! +14: valueOf! +15: valueOf! +16: valueOf! +17: valueOf! +18: valueOf! +19: valueOf! +20: valueOf! +21: valueOf! +22: valueOf! +22: toString! +23: valueOf! +23: toString! +24: valueOf! +24: toString! +25: valueOf! +25: toString! +26: valueOf! +26: toString! +27: valueOf! +27: toString! +28: valueOf! +28: toString! +29: valueOf! +29: toString! +(0) undefined (undefined) - 1,45 +(1) null (null) - +(2) true (boolean) - 1 +(3) false (boolean) - +(4) 0 (number) - +(5) 1 (number) - 1 +(6) 0.5 (number) - +(7) -1 (number) - +(8) -0.5 (number) - +(9) Infinity (number) - +(10) -Infinity (number) - +(11) NaN (number) - +(12) (string) - +(13) 0 (string) - +(14) -0 (string) - +(15) 0.0 (string) - +(16) 1 (string) - 1 +(17) Hello World! (string) - +(18) true (string) - +(19) _level0 (string) - +(20) ?????? (string) - +(21) _level0 (movieclip) - +(22) [object Object] (object) - +(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object) - 1,45 +(24) (object) - +(25) [type Function] (function) - +valueOf called +(26) [type Object] (object) - +(27) [type Object] (object) - +valueOf called with +(28) [object Object] (object) - +(29) undefined (object) - +0: valueOf! +(30) undefined (object) - +1: valueOf! +(31) null (object) - +2: valueOf! +(32) true (object) - 1 +3: valueOf! +(33) false (object) - +4: valueOf! +(34) 0 (object) - +5: valueOf! +(35) 1 (object) - 1 +6: valueOf! +(36) 0.5 (object) - +7: valueOf! +(37) -1 (object) - +8: valueOf! +(38) -0.5 (object) - +9: valueOf! +(39) Infinity (object) - +10: valueOf! +(40) -Infinity (object) - +11: valueOf! +(41) NaN (object) - +12: valueOf! +(42) (object) - +13: valueOf! +(43) 0 (object) - +14: valueOf! +(44) -0 (object) - +15: valueOf! +(45) 0.0 (object) - +16: valueOf! +(46) 1 (object) - 1 +17: valueOf! +(47) Hello World! (object) - +18: valueOf! +(48) true (object) - +19: valueOf! +(49) _level0 (object) - +20: valueOf! +(50) ?????? (object) - +21: valueOf! +(51) _level0 (object) - +22: valueOf! +(52) [type Object] (object) - +23: valueOf! +(53) [type Object] (object) - +24: valueOf! +(54) [type Object] (object) - +25: valueOf! +(55) [type Object] (object) - +26: valueOf! +(56) [type Object] (object) - +27: valueOf! +(57) [type Object] (object) - +28: valueOf! +(58) [type Object] (object) - +29: valueOf! +(59) [type Object] (object) - diff --git a/test/trace/String-split-count-values.as b/test/trace/String-split-count-values.as new file mode 100644 index 0000000..f15ac2d --- /dev/null +++ b/test/trace/String-split-count-values.as @@ -0,0 +1,11 @@ +// makeswf -v 7 -s 200x150 -r 1 -o String-split-count-values.swf String-split-count-values.as + +#include "values.as" + +s = "12345"; + +for (i = 0; i < values.length; i++) { + trace (names[i] + " - " + s.split ("23", values[i])); +}; + +getURL ("fscommand:quit", ""); commit 85d56338542df488af47674ea102cb1ab225225e Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 21:43:51 2008 +0200 fix String.split(x, undefined) to return the proper value diff --git a/swfdec/swfdec_as_string.c b/swfdec/swfdec_as_string.c index 3468e37..16c5d6d 100644 --- a/swfdec/swfdec_as_string.c +++ b/swfdec/swfdec_as_string.c @@ -370,7 +370,7 @@ swfdec_as_string_split_5 (SwfdecAsContext *cx, SwfdecAsObject *object, swfdec_as_array_push (arr, &val); return; } - if (argc > 1) { + if (argc > 1 && !SWFDEC_AS_VALUE_IS_UNDEFINED (&argv[1])) { swfdec_as_value_to_string (cx, &argv[0]); count = swfdec_as_value_to_integer (cx, &argv[1]); } else { @@ -392,8 +392,7 @@ swfdec_as_string_split_5 (SwfdecAsContext *cx, SwfdecAsObject *object, } SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (cx, g_strndup (str, end - str))); swfdec_as_array_push (arr, &val); - if (count) - count--; + count--; str = end + 1; } } @@ -428,7 +427,7 @@ swfdec_as_string_split_6 (SwfdecAsContext *cx, SwfdecAsObject *object, swfdec_as_array_push (arr, &val); return; } - if (argc > 1) + if (argc > 1 && !SWFDEC_AS_VALUE_IS_UNDEFINED (&argv[1])) count = swfdec_as_value_to_integer (cx, &argv[1]); else count = G_MAXINT; @@ -451,8 +450,7 @@ swfdec_as_string_split_6 (SwfdecAsContext *cx, SwfdecAsObject *object, } SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (cx, g_strndup (str, end - str))); swfdec_as_array_push (arr, &val); - if (count) - count--; + count--; str = end + len; } } commit 7aff0246ace6fc420c42fddbfb27cebe13e5cd5c Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 20:46:47 2008 +0200 fix argument order diff --git a/vivified/code/vivi_code_function_call.c b/vivified/code/vivi_code_function_call.c index 5f93d29..2c7b6e7 100644 --- a/vivified/code/vivi_code_function_call.c +++ b/vivified/code/vivi_code_function_call.c @@ -139,11 +139,11 @@ vivi_code_function_call_compile_value (ViviCodeValue *value, vivi_code_compiler_compile_value (compiler, count); g_object_unref (count); - vivi_code_compiler_compile_value (compiler, call->name); - if (call->value) vivi_code_compiler_compile_value (compiler, call->value); + vivi_code_compiler_compile_value (compiler, call->name); + if (call->construct) { if (call->value) { code = vivi_code_asm_new_method_new (); commit 92b2d2f15dc237c5f830250994363fc61f048336 Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 14:03:24 2008 +0200 implement Sound.loadSound() diff --git a/swfdec/Makefile.am b/swfdec/Makefile.am index 7d39e60..a4ea245 100644 --- a/swfdec/Makefile.am +++ b/swfdec/Makefile.am @@ -38,6 +38,7 @@ libswfdec_source_files = \ swfdec_audio_decoder_uncompressed.c \ $(CODEC_FILES) \ swfdec_audio_event.c \ + swfdec_audio_load.c \ swfdec_audio_flv.c \ swfdec_audio_stream.c \ swfdec_audio_swf_stream.c \ @@ -93,6 +94,7 @@ libswfdec_source_files = \ swfdec_key_as.c \ swfdec_load_object.c \ swfdec_load_object_as.c \ + swfdec_load_sound.c \ swfdec_loader.c \ swfdec_loadvars_as.c \ swfdec_local_connection.c \ @@ -237,6 +239,7 @@ noinst_HEADERS = \ swfdec_audio_decoder_uncompressed.h \ swfdec_audio_event.h \ swfdec_audio_flv.h \ + swfdec_audio_load.h \ swfdec_audio_stream.h \ swfdec_audio_swf_stream.h \ swfdec_bits.h \ @@ -271,6 +274,7 @@ noinst_HEADERS = \ swfdec_internal.h \ swfdec_interval.h \ swfdec_load_object.h \ + swfdec_load_sound.h \ swfdec_loader_internal.h \ swfdec_marshal.h \ swfdec_morph_movie.h \ diff --git a/swfdec/swfdec_audio_load.c b/swfdec/swfdec_audio_load.c new file mode 100644 index 0000000..d63da2d --- /dev/null +++ b/swfdec/swfdec_audio_load.c @@ -0,0 +1,93 @@ +/* Swfdec + * Copyright (C) 2008 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 <string.h> +#include "swfdec_audio_load.h" +#include "swfdec_debug.h" +#include "swfdec_sprite.h" +#include "swfdec_tag.h" + + +G_DEFINE_TYPE (SwfdecAudioLoad, swfdec_audio_load, SWFDEC_TYPE_AUDIO_STREAM) + +static void +swfdec_audio_load_dispose (GObject *object) +{ + SwfdecAudioLoad *stream = SWFDEC_AUDIO_LOAD (object); + + if (stream->load != NULL) { + g_object_unref (stream->load); + stream->load = NULL; + } + + G_OBJECT_CLASS (swfdec_audio_load_parent_class)->dispose (object); +} + +static SwfdecBuffer * +swfdec_audio_load_pull (SwfdecAudioStream *audio) +{ + SwfdecAudioLoad *stream = SWFDEC_AUDIO_LOAD (audio); + + if (stream->frame >= stream->load->frames->len) { + if (stream->load->stream == NULL) + swfdec_audio_stream_done (audio); + return NULL; + } + + return swfdec_buffer_ref (g_ptr_array_index (stream->load->frames, stream->frame++)); +} + +static void +swfdec_audio_load_class_init (SwfdecAudioLoadClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + SwfdecAudioStreamClass *stream_class = SWFDEC_AUDIO_STREAM_CLASS (klass); + + object_class->dispose = swfdec_audio_load_dispose; + + stream_class->pull = swfdec_audio_load_pull; +} + +static void +swfdec_audio_load_init (SwfdecAudioLoad *stream) +{ +} + +SwfdecAudio * +swfdec_audio_load_new (SwfdecPlayer *player, SwfdecLoadSound *load) +{ + SwfdecAudioLoad *stream; + + g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); + g_return_val_if_fail (SWFDEC_IS_LOAD_SOUND (load), NULL); + + stream = g_object_new (SWFDEC_TYPE_AUDIO_LOAD, NULL); + stream->load = g_object_ref (load); + swfdec_audio_stream_use_decoder (SWFDEC_AUDIO_STREAM (stream), + SWFDEC_AUDIO_CODEC_MP3, swfdec_audio_format_new (44100, TRUE, 2)); + + swfdec_audio_add (SWFDEC_AUDIO (stream), player); + + return SWFDEC_AUDIO (stream); +} + diff --git a/swfdec/swfdec_audio_load.h b/swfdec/swfdec_audio_load.h new file mode 100644 index 0000000..56bf5be --- /dev/null +++ b/swfdec/swfdec_audio_load.h @@ -0,0 +1,58 @@ +/* Swfdec + * Copyright (C) 2008 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 + */ + +#ifndef _SWFDEC_AUDIO_LOAD_H_ +#define _SWFDEC_AUDIO_LOAD_H_ + +#include <swfdec/swfdec_audio_stream.h> +#include <swfdec/swfdec_load_sound.h> + +G_BEGIN_DECLS + +typedef struct _SwfdecAudioLoad SwfdecAudioLoad; +typedef struct _SwfdecAudioLoadClass SwfdecAudioLoadClass; + +#define SWFDEC_TYPE_AUDIO_LOAD (swfdec_audio_load_get_type()) +#define SWFDEC_IS_AUDIO_LOAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_AUDIO_LOAD)) +#define SWFDEC_IS_AUDIO_LOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_AUDIO_LOAD)) +#define SWFDEC_AUDIO_LOAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_AUDIO_LOAD, SwfdecAudioLoad)) +#define SWFDEC_AUDIO_LOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_AUDIO_LOAD, SwfdecAudioLoadClass)) +#define SWFDEC_AUDIO_LOAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_AUDIO_LOAD, SwfdecAudioLoadClass)) + +struct _SwfdecAudioLoad +{ + SwfdecAudioStream stream; + + SwfdecLoadSound * load; /* sound we play back */ + guint frame; /* next frame to push */ +}; + +struct _SwfdecAudioLoadClass +{ + SwfdecAudioStreamClass stream_class; +}; + +GType swfdec_audio_load_get_type (void); + +SwfdecAudio * swfdec_audio_load_new (SwfdecPlayer * player, + SwfdecLoadSound * load); + + +G_END_DECLS +#endif diff --git a/swfdec/swfdec_load_sound.c b/swfdec/swfdec_load_sound.c new file mode 100644 index 0000000..6369232 --- /dev/null +++ b/swfdec/swfdec_load_sound.c @@ -0,0 +1,356 @@ +/* Swfdec + * Copyright (C) 2003, 2008 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_load_sound.h" +#include "swfdec_as_strings.h" +#include "swfdec_audio_decoder.h" +#include "swfdec_bits.h" +#include "swfdec_buffer.h" +#include "swfdec_debug.h" +#include "swfdec_loader_internal.h" +#include "swfdec_player_internal.h" +#include "swfdec_sandbox.h" +#include "swfdec_stream_target.h" + +/*** SWFDEC_STREAM_TARGET ***/ + +static SwfdecPlayer * +swfdec_load_sound_stream_target_get_player (SwfdecStreamTarget *target) +{ + return SWFDEC_PLAYER (SWFDEC_LOAD_SOUND (target)->target->context); +} + +static gboolean +swfdec_load_sound_mp3_parse_id3v2 (SwfdecLoadSound *sound, SwfdecBufferQueue *queue) +{ + SwfdecBuffer *buffer; + SwfdecBits bits; + guint size; + gboolean footer; + + buffer = swfdec_buffer_queue_peek (queue, 10); + if (buffer == NULL) + return FALSE; + swfdec_bits_init (&bits, buffer); + if (swfdec_bits_get_u8 (&bits) != ''I'' || + swfdec_bits_get_u8 (&bits) != ''D'' || + swfdec_bits_get_u8 (&bits) != ''3'') + goto error; + /* version = */ swfdec_bits_get_u16 (&bits); + /* flags = */ swfdec_bits_getbits (&bits, 3); + footer = swfdec_bits_getbit (&bits); + /* reserved = */ swfdec_bits_getbits (&bits, 4); + size = swfdec_bits_get_bu32 (&bits); + if (size & 0x80808080) + goto error; + size = ((size & 0xFF000000) >> 3) | + ((size & 0xFF0000) >> 2) | + ((size & 0xFF00) >> 1) | (size & 0xFF); + swfdec_buffer_unref (buffer); + + buffer = swfdec_buffer_queue_pull (queue, 10 + size + (footer ? 10 : 0)); + if (buffer == NULL) + return FALSE; + SWFDEC_FIXME ("implement ID3v2 parsing"); + SWFDEC_LOG ("%u bytes ID3v2", buffer->length); + swfdec_buffer_unref (buffer); + return TRUE; + +error: + swfdec_buffer_unref (buffer); + swfdec_buffer_queue_flush (queue, 1); + return TRUE; +} + +static gboolean +swfdec_load_sound_mp3_parse_id3v1 (SwfdecLoadSound *sound, SwfdecBufferQueue *queue) +{ + SwfdecBuffer *buffer; + + buffer = swfdec_buffer_queue_pull (queue, 128); + if (buffer == NULL) + return FALSE; + + if (buffer->data[0] != ''T'' || + buffer->data[1] != ''A'' || + buffer->data[2] != ''G'') { + swfdec_buffer_unref (buffer); + swfdec_buffer_queue_flush (queue, 1); + return TRUE; + } + SWFDEC_FIXME ("implement ID3v1 parsing"); + swfdec_buffer_unref (buffer); + return TRUE; +} + +static gboolean +swfdec_load_sound_mp3_parse_frame (SwfdecLoadSound *sound, SwfdecBufferQueue *queue) +{ + static const guint mp3types_bitrates[2][3][16] = { + { {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, }, + {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, }, + {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, }}, + { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, }, + {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, }, + {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, }} + }; + static const guint mp3types_freqs[3][3] = { + { 11025, 12000, 8000 }, + { 22050, 24000, 16000 }, + { 44100, 48000, 32000 } + }; + + SwfdecBuffer *buffer; + SwfdecBits bits; + guint version, layer, bitrate, samplerate, length, channels; + + buffer = swfdec_buffer_queue_peek (queue, 4); + if (buffer == NULL) + return FALSE; + + swfdec_bits_init (&bits, buffer); + if (swfdec_bits_getbits (&bits, 11) != 0x7FF) + goto error; + + version = swfdec_bits_getbits (&bits, 2); + if (version == 1) + goto error; + layer = 4 - swfdec_bits_getbits (&bits, 2); + if (layer == 4) + goto error; + /* has_crc = */ swfdec_bits_getbit (&bits); + bitrate = swfdec_bits_getbits (&bits, 4); + if (bitrate == 0 || bitrate == 15) { + if (bitrate == 0) { + SWFDEC_FIXME ("need to support free frame length?"); + } + goto error; + } + samplerate = swfdec_bits_getbits (&bits, 2); + if (samplerate == 3) + goto error; + length = swfdec_bits_getbits (&bits, 1); + /* unused = */ swfdec_bits_getbits (&bits, 1); + channels = swfdec_bits_getbits (&bits, 2) == 3 ? 1 : 2; + + samplerate = mp3types_freqs[version > 0 ? version - 1 : 0][samplerate]; + bitrate = mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][bitrate]; + if (layer == 1) { + length = ((12000 * bitrate / samplerate) + length) * 4; + } else { + length += ((layer == 3 && version != 3) ? 72000 : 144000) + * bitrate / samplerate; + } + swfdec_buffer_unref (buffer); + + SWFDEC_LOG ("adding %u bytes mp3 frame", length); + buffer = swfdec_buffer_queue_pull (queue, length); + if (buffer == NULL) + return FALSE; + + g_ptr_array_add (sound->frames, buffer); + return TRUE; + +error: + swfdec_buffer_unref (buffer); + swfdec_buffer_queue_flush (queue, 1); + return TRUE; +} + +static gboolean +swfdec_load_sound_stream_target_parse (SwfdecStreamTarget *target, + SwfdecStream *stream) +{ + SwfdecLoadSound *sound = SWFDEC_LOAD_SOUND (target); + SwfdecBufferQueue *queue; + SwfdecBuffer *buffer; + guint i; + gboolean go_on = TRUE; + + /* decode MP3 into frames, ID3 tags and crap */ + queue = swfdec_stream_get_queue (stream); + do { + /* sync */ + buffer = swfdec_buffer_queue_peek_buffer (queue); + if (buffer == NULL) + break; + for (i = 0; i < buffer->length; i++) { + if (buffer->data[i] == ''I'' || buffer->data[i] == ''T'' || buffer->data[i] == 0xFF) + break; + } + if (i) { + SWFDEC_LOG ("sync: flushing %u bytes", i); + } + swfdec_buffer_queue_flush (queue, i); + if (i == buffer->length) { + swfdec_buffer_unref (buffer); + continue; + } + /* parse data */ + switch (buffer->data[i]) { + case ''I'': + /* ID3v2 */ + go_on = swfdec_load_sound_mp3_parse_id3v2 (sound, queue); + break; + case ''T'': + /* ID3v1 */ + go_on = swfdec_load_sound_mp3_parse_id3v1 (sound, queue); + break; + case 0xFF: + /* MP3 frame */ + go_on = swfdec_load_sound_mp3_parse_frame (sound, queue); + break; + default: + /* skip - and yes, the continue refers to the for loop */ + continue; + } + swfdec_buffer_unref (buffer); + } while (go_on); + return FALSE; +} + +static void +swfdec_load_sound_stream_target_error (SwfdecStreamTarget *target, + SwfdecStream *stream) +{ + SwfdecLoadSound *sound = SWFDEC_LOAD_SOUND (target); + SwfdecAsValue val; + + SWFDEC_AS_VALUE_SET_BOOLEAN (&val, FALSE); + swfdec_sandbox_use (sound->sandbox); + swfdec_as_object_call (sound->target, SWFDEC_AS_STR_onLoad, 1, &val, NULL); + swfdec_sandbox_unuse (sound->sandbox); + + swfdec_stream_set_target (stream, NULL); + g_object_unref (stream); + sound->stream = NULL; +} + +static void +swfdec_load_sound_stream_target_close (SwfdecStreamTarget *target, + SwfdecStream *stream) +{ + SwfdecLoadSound *sound = SWFDEC_LOAD_SOUND (target); + SwfdecAsValue val; + + swfdec_stream_set_target (stream, NULL); + g_object_unref (stream); + sound->stream = NULL; + + SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE); + swfdec_sandbox_use (sound->sandbox); + swfdec_as_object_call (sound->target, SWFDEC_AS_STR_onLoad, 1, &val, NULL); + swfdec_sandbox_unuse (sound->sandbox); +} + +static void +swfdec_load_sound_stream_target_init (SwfdecStreamTargetInterface *iface) +{ + iface->get_player = swfdec_load_sound_stream_target_get_player; + iface->parse = swfdec_load_sound_stream_target_parse; + iface->close = swfdec_load_sound_stream_target_close; + iface->error = swfdec_load_sound_stream_target_error; +} + +/*** SWFDEC_LOAD_SOUND ***/ + +G_DEFINE_TYPE_WITH_CODE (SwfdecLoadSound, swfdec_load_sound, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_load_sound_stream_target_init)) + +static void +swfdec_load_sound_dispose (GObject *object) +{ + SwfdecLoadSound *sound = SWFDEC_LOAD_SOUND (object); + + g_ptr_array_foreach (sound->frames, (GFunc) swfdec_buffer_unref, NULL); + g_ptr_array_free (sound->frames, TRUE); + if (sound->stream) { + swfdec_stream_set_target (sound->stream, NULL); + g_object_unref (sound->stream); + sound->stream = NULL; + } + g_free (sound->url); + + G_OBJECT_CLASS (swfdec_load_sound_parent_class)->dispose (object); +} + +static void +swfdec_load_sound_class_init (SwfdecLoadSoundClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = swfdec_load_sound_dispose; +} + +static void +swfdec_load_sound_init (SwfdecLoadSound *sound) +{ + sound->frames = g_ptr_array_new (); +} + +static void +swfdec_load_sound_load (SwfdecPlayer *player, gboolean allow, gpointer data) +{ + SwfdecLoadSound *sound = data; + + if (!allow) { + SwfdecAsValue val; + + SWFDEC_WARNING ("SECURITY: no access to %s from Sound.loadSound", + sound->url); + SWFDEC_AS_VALUE_SET_BOOLEAN (&val, FALSE); + return; + } + + sound->stream = SWFDEC_STREAM (swfdec_player_load (player, sound->url, NULL)); + swfdec_stream_set_target (sound->stream, SWFDEC_STREAM_TARGET (sound)); +} + +SwfdecLoadSound * +swfdec_load_sound_new (SwfdecAsObject *target, const char *url) +{ + SwfdecLoadSound *sound; + char *missing; + + g_return_val_if_fail (SWFDEC_IS_AS_OBJECT (target), NULL); + g_return_val_if_fail (url != NULL, NULL); + + sound = g_object_new (SWFDEC_TYPE_LOAD_SOUND, NULL); + sound->target = target; + sound->sandbox = SWFDEC_SANDBOX (target->context->global); + sound->url = g_strdup (url); + swfdec_player_load_default (SWFDEC_PLAYER (target->context), url, + swfdec_load_sound_load, sound); + /* tell missing plugins stuff we want MP3 */ + missing = NULL; + swfdec_audio_decoder_prepare (SWFDEC_AUDIO_CODEC_MP3, + swfdec_audio_format_new (44100, 2, TRUE), &missing); + if (missing) { + swfdec_player_add_missing_plugin (SWFDEC_PLAYER (target->context), + missing); + g_free (missing); + } + + return sound; +} + diff --git a/swfdec/swfdec_load_sound.h b/swfdec/swfdec_load_sound.h new file mode 100644 index 0000000..f5e7e97 --- /dev/null +++ b/swfdec/swfdec_load_sound.h @@ -0,0 +1,63 @@ +/* Swfdec + * Copyright (C) 2008 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 + */ + +#ifndef _SWFDEC_LOAD_SOUND_H_ +#define _SWFDEC_LOAD_SOUND_H_ + +#include <swfdec/swfdec_as_object.h> +#include <swfdec/swfdec_stream.h> +#include <swfdec/swfdec_types.h> + +G_BEGIN_DECLS + + +typedef struct _SwfdecLoadSound SwfdecLoadSound; +typedef struct _SwfdecLoadSoundClass SwfdecLoadSoundClass; + +#define SWFDEC_TYPE_LOAD_SOUND (swfdec_load_sound_get_type()) +#define SWFDEC_IS_LOAD_SOUND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_LOAD_SOUND)) +#define SWFDEC_IS_LOAD_SOUND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_LOAD_SOUND)) +#define SWFDEC_LOAD_SOUND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_LOAD_SOUND, SwfdecLoadSound)) +#define SWFDEC_LOAD_SOUND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_LOAD_SOUND, SwfdecLoadSoundClass)) +#define SWFDEC_LOAD_SOUND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_LOAD_SOUND, SwfdecLoadSoundClass)) + +struct _SwfdecLoadSound +{ + GObject object; + + SwfdecAsObject * target; /* target using us that we emit events on, a SwfdecSoundObject */ + SwfdecSandbox * sandbox; /* sandbox we use for emission of events */ + char * url; /* URL we are loading - FIXME: make the security stuff hand us a loader */ + SwfdecStream * stream; /* stream we''re parsing or NULL when done parsing */ + GPtrArray * frames; /* buffers pointing to the frames of this file */ +}; + +struct _SwfdecLoadSoundClass +{ + GObjectClass object_class; +}; + +GType swfdec_load_sound_get_type (void); + +SwfdecLoadSound * swfdec_load_sound_new (SwfdecAsObject * target, + const char * url); + + +G_END_DECLS +#endif diff --git a/swfdec/swfdec_sound_object.c b/swfdec/swfdec_sound_object.c index b689c61..2f0fd45 100644 --- a/swfdec/swfdec_sound_object.c +++ b/swfdec/swfdec_sound_object.c @@ -29,6 +29,7 @@ #include "swfdec_as_object.h" #include "swfdec_as_strings.h" #include "swfdec_audio_event.h" +#include "swfdec_audio_load.h" #include "swfdec_debug.h" #include "swfdec_internal.h" #include "swfdec_player_internal.h" @@ -58,6 +59,10 @@ swfdec_sound_object_dispose (GObject *object) g_object_unref (sound->attached); sound->attached = NULL; } + if (sound->load) { + g_object_unref (sound->load); + sound->load = NULL; + } G_OBJECT_CLASS (swfdec_sound_object_parent_class)->dispose (object); } @@ -285,7 +290,17 @@ void swfdec_sound_object_loadSound (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - SWFDEC_STUB ("Sound.loadSound"); + SwfdecSoundObject *sound; + const char *url; + gboolean stream; + + SWFDEC_AS_CHECK (SWFDEC_TYPE_SOUND_OBJECT, &sound, "sb", &url, &stream); + + if (sound->load) + g_object_unref (sound->load); + sound->load = swfdec_load_sound_new (object, url); + if (stream) + sound->audio = swfdec_audio_load_new (SWFDEC_PLAYER (cx), sound->load); } SWFDEC_AS_NATIVE (500, 14, swfdec_sound_object_getBytesLoaded) diff --git a/swfdec/swfdec_sound_object.h b/swfdec/swfdec_sound_object.h index ec057b6..c053057 100644 --- a/swfdec/swfdec_sound_object.h +++ b/swfdec/swfdec_sound_object.h @@ -20,6 +20,8 @@ #ifndef _SWFDEC_SOUND_OBJECT_H_ #define _SWFDEC_SOUND_OBJECT_H_ +#include <swfdec/swfdec_audio.h> +#include <swfdec/swfdec_load_sound.h> #include <swfdec/swfdec_movie.h> G_BEGIN_DECLS @@ -41,6 +43,8 @@ struct _SwfdecSoundObject { SwfdecMovie * target; /* target movie or NULL on constructing error */ gboolean global; /* TRUE if handling global sound */ SwfdecSound * attached; /* sound that was attached */ + SwfdecLoadSound * load; /* sound that is/was loaded using loadSound */ + SwfdecAudio * audio; /* audio stream we started */ }; struct _SwfdecSoundObjectClass { commit 9d283a4cd7e31ee9cf99839db483455adf5bb60d Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 14:02:59 2008 +0200 don''t remove audio when buffering and no audio was available diff --git a/swfdec/swfdec_audio_stream.c b/swfdec/swfdec_audio_stream.c index acdef91..62bff62 100644 --- a/swfdec/swfdec_audio_stream.c +++ b/swfdec/swfdec_audio_stream.c @@ -120,24 +120,25 @@ swfdec_audio_stream_render (SwfdecAudio *audio, gint16* dest, return rendered - start; } -static void +static gboolean swfdec_audio_stream_check_buffering (SwfdecAudioStream *stream) { SwfdecAudioStreamClass *klass; SwfdecBuffer *buffer; - if (!stream->buffering) - return; + if (!stream->buffering || stream->done) + return FALSE; - klass = SWFDEC_AUDIO_STREAM_CLASS (stream); + klass = SWFDEC_AUDIO_STREAM_GET_CLASS (stream); buffer = klass->pull (stream); if (buffer == NULL) - return; + return FALSE; swfdec_audio_decoder_push (stream->decoder, buffer); swfdec_buffer_unref (buffer); stream->buffering = FALSE; g_signal_emit_by_name (stream, "new-data"); + return stream->queue_size == 0; } static gsize @@ -147,7 +148,8 @@ swfdec_audio_stream_iterate (SwfdecAudio *audio, gsize remove) SwfdecBuffer *buffer; gsize samples, cur_samples; - swfdec_audio_stream_check_buffering (stream); + if (swfdec_audio_stream_check_buffering (stream)) + return G_MAXUINT; swfdec_audio_stream_require (stream, remove); samples = MIN (remove, stream->queue_size); commit 732a5412513384ccc3fbee03bd16a33e17531359 Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 10:52:32 2008 +0200 remove -Wlogical-op from warning flags gcc emits lots of useless warnings there, see the added comment. diff --git a/configure.ac b/configure.ac index ca54cec..588089f 100644 --- a/configure.ac +++ b/configure.ac @@ -20,7 +20,8 @@ AC_CONFIG_MACRO_DIR([m4]) dnl decide on error flags dnl if we support them, we set them unconditionally dnl FIXME: I want this but stupid headers don''t let me: -Wshadow -AS_COMPILER_FLAGS(GLOBAL_CFLAGS, "-Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wold-style-definition -Wdeclaration-after-statement -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-enum -Wswitch-default -Winit-self -Wmissing-include-dirs -Wundef -Waddress -Wlogical-op -Waggregate-return -Wmissing-format-attribute -Wno-multichar -Wnested-externs") +dnl FIXME: readd -Wlogical-op when http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36513 is solved +AS_COMPILER_FLAGS(GLOBAL_CFLAGS, "-Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wold-style-definition -Wdeclaration-after-statement -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-enum -Wswitch-default -Winit-self -Wmissing-include-dirs -Wundef -Waddress -Waggregate-return -Wmissing-format-attribute -Wno-multichar -Wnested-externs") dnl if we''re in nano >= 1, add -Werror if supported if test x$SWFDEC_CVS = xyes ; then AS_COMPILER_FLAGS(GLOBAL_CFLAGS, "-Werror") commit 7875841e5ba9a53ce70b18d2625174c05c13e803 Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 10:52:11 2008 +0200 implement new-data signal diff --git a/swfdec-gtk/swfdec_playback_alsa.c b/swfdec-gtk/swfdec_playback_alsa.c index 84cf7e1..f4711e9 100644 --- a/swfdec-gtk/swfdec_playback_alsa.c +++ b/swfdec-gtk/swfdec_playback_alsa.c @@ -259,6 +259,12 @@ swfdec_playback_stream_changed (SwfdecAudio *audio, Stream *stream) } static void +swfdec_playback_stream_new_data (SwfdecAudio *audio, Stream *stream) +{ + swfdec_playback_stream_install_handlers (stream); +} + +static void swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio) { Stream *stream; @@ -325,6 +331,8 @@ swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio) sound->streams = g_list_prepend (sound->streams, stream); g_signal_connect (stream->audio, "changed", G_CALLBACK (swfdec_playback_stream_changed), stream); + g_signal_connect (stream->audio, "new-data", + G_CALLBACK (swfdec_playback_stream_new_data), stream); swfdec_playback_stream_start (stream); return; @@ -341,6 +349,8 @@ swfdec_playback_stream_close (Stream *stream) stream->sound->streams = g_list_remove (stream->sound->streams, stream); g_signal_handlers_disconnect_by_func (stream->audio, swfdec_playback_stream_changed, stream); + g_signal_handlers_disconnect_by_func (stream->audio, + swfdec_playback_stream_new_data, stream); g_object_unref (stream->audio); g_free (stream); } commit 840c59b5b1c7ce65599dd65bc5f1e47788ad1c01 Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 10:51:25 2008 +0200 allow buffering of audio streams and emit "new-data" signal when new data arrives diff --git a/swfdec/swfdec_audio.c b/swfdec/swfdec_audio.c index 6a7b1b2..b74d05f 100644 --- a/swfdec/swfdec_audio.c +++ b/swfdec/swfdec_audio.c @@ -60,6 +60,7 @@ G_DEFINE_ABSTRACT_TYPE (SwfdecAudio, swfdec_audio, G_TYPE_OBJECT) enum { CHANGED, + NEW_DATA, LAST_SIGNAL }; @@ -92,6 +93,17 @@ swfdec_audio_class_init (SwfdecAudioClass *klass) signals[CHANGED] = g_signal_new ("changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + /** + * SwfdecAudio::new-data: + * @audio: the #SwfdecAudio affected + * + * This signal is emitted whenever new data was loaded into @audio. You want + * to listen to this signal when swfdec_audio_render() previously returned + * less samples than you wanted to render. + */ + signals[NEW_DATA] = g_signal_new ("new-data", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); object_class->dispose = swfdec_audio_dispose; } diff --git a/swfdec/swfdec_audio_stream.c b/swfdec/swfdec_audio_stream.c index b69174b..acdef91 100644 --- a/swfdec/swfdec_audio_stream.c +++ b/swfdec/swfdec_audio_stream.c @@ -68,8 +68,10 @@ swfdec_audio_stream_require (SwfdecAudioStream *stream, guint n_samples) } /* otherwise get a new buffer from the decoder */ buffer = klass->pull (stream); - if (buffer == NULL) + if (buffer == NULL) { + stream->buffering = TRUE; break; + } swfdec_audio_decoder_push (stream->decoder, buffer); swfdec_buffer_unref (buffer); } @@ -118,6 +120,26 @@ swfdec_audio_stream_render (SwfdecAudio *audio, gint16* dest, return rendered - start; } +static void +swfdec_audio_stream_check_buffering (SwfdecAudioStream *stream) +{ + SwfdecAudioStreamClass *klass; + SwfdecBuffer *buffer; + + if (!stream->buffering) + return; + + klass = SWFDEC_AUDIO_STREAM_CLASS (stream); + buffer = klass->pull (stream); + if (buffer == NULL) + return; + + swfdec_audio_decoder_push (stream->decoder, buffer); + swfdec_buffer_unref (buffer); + stream->buffering = FALSE; + g_signal_emit_by_name (stream, "new-data"); +} + static gsize swfdec_audio_stream_iterate (SwfdecAudio *audio, gsize remove) { @@ -125,6 +147,7 @@ swfdec_audio_stream_iterate (SwfdecAudio *audio, gsize remove) SwfdecBuffer *buffer; gsize samples, cur_samples; + swfdec_audio_stream_check_buffering (stream); swfdec_audio_stream_require (stream, remove); samples = MIN (remove, stream->queue_size); diff --git a/swfdec/swfdec_audio_stream.h b/swfdec/swfdec_audio_stream.h index 824d477..92d2984 100644 --- a/swfdec/swfdec_audio_stream.h +++ b/swfdec/swfdec_audio_stream.h @@ -45,6 +45,7 @@ struct _SwfdecAudioStream GQueue * queue; /* all the samples we''ve decoded so far */ gsize queue_size; /* size of queue in samples */ gboolean done; /* no more data will arrive */ + gboolean buffering; /* pull vfunc returned NULL */ }; struct _SwfdecAudioStreamClass commit 3dc519878fc24ad568ecd94f1426bd296bd891d9 Author: Benjamin Otte <otte at gnome.org> Date: Fri Jun 13 10:16:50 2008 +0200 remove debugging code Everybody knows how I debug by now, if you consider how much code I''ve scattered everywhere... diff --git a/swfdec/swfdec_audio_swf_stream.c b/swfdec/swfdec_audio_swf_stream.c index eec2e5c..9a38753 100644 --- a/swfdec/swfdec_audio_swf_stream.c +++ b/swfdec/swfdec_audio_swf_stream.c @@ -159,24 +159,6 @@ swfdec_audio_swf_stream_init (SwfdecAudioSwfStream *stream) { } -static void -check (SwfdecAudio *audio) -{ - guint length = 20000; - gint16 *data = g_new (gint16, 2 * length); - gint16 *compare = g_new (gint16, 2 * length); - guint i; - - swfdec_audio_render (audio, compare, 0, length); - for (i = 1; i < length; i++) { - swfdec_audio_render (audio, data, i, length - i); - g_assert (memcmp (data, compare + 2 * i, (length - i) * 4) == 0); - } - - g_free (data); - g_free (compare); -} - SwfdecAudio * swfdec_audio_swf_stream_new (SwfdecPlayer *player, SwfdecSprite *sprite, guint id) @@ -210,7 +192,6 @@ swfdec_audio_swf_stream_new (SwfdecPlayer *player, SwfdecSprite *sprite, found: swfdec_audio_add (SWFDEC_AUDIO (stream), player); - check (SWFDEC_AUDIO (stream)); return SWFDEC_AUDIO (stream); } commit b30bf3f7ee637ad113e726d26722c1235f15674b Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 12 21:27:27 2008 +0200 include swfdec_as_array.h diff --git a/swfdec/swfdec.h b/swfdec/swfdec.h index 2dec954..cc3ea1f 100644 --- a/swfdec/swfdec.h +++ b/swfdec/swfdec.h @@ -22,6 +22,7 @@ #ifndef __SWFDEC_H__ #define __SWFDEC_H__ +#include <swfdec/swfdec_as_array.h> #include <swfdec/swfdec_as_context.h> #include <swfdec/swfdec_as_debugger.h> #include <swfdec/swfdec_as_frame.h> commit 431c0250eaf5b26c506da4d0f3983e1f4ecaeb52 Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 12 21:26:39 2008 +0200 put the native function table into its own source file Avoids duplicate declarations with the next change diff --git a/swfdec/.gitignore b/swfdec/.gitignore index 9f923f0..bf881cd 100644 --- a/swfdec/.gitignore +++ b/swfdec/.gitignore @@ -12,7 +12,7 @@ Makefile.in *.loT swfdec_as_strings.h -swfdec_asnative.h +swfdec_asnative.c swfdec_enums.[ch] swfdec_marshal.[ch] diff --git a/swfdec/Makefile.am b/swfdec/Makefile.am index 8b78fdf..7d39e60 100644 --- a/swfdec/Makefile.am +++ b/swfdec/Makefile.am @@ -168,6 +168,7 @@ libswfdec_source_files = \ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES = \ $(libswfdec_source_files) \ + swfdec_asnative.c \ swfdec_enums.c \ swfdec_marshal.c @@ -321,7 +322,7 @@ EXTRA_DIST = \ swfdec_marshal.list BUILT_SOURCES = \ - swfdec_asnative.h \ + swfdec_asnative.c \ swfdec_as_strings.h \ swfdec_enums.c \ swfdec_enums.h \ @@ -331,7 +332,7 @@ BUILT_SOURCES = \ CLEANFILES = \ $(BUILT_SOURCES) -swfdec_asnative.h: $(libswfdec_source_files) +swfdec_asnative.c: $(libswfdec_source_files) (cd $(srcdir) \ && echo "#include \"swfdec_as_types.h\"" \ && echo "#define SWFDEC_AS_NATIVE(x,y,func) void func (SwfdecAsContext *cx, \\" \ @@ -343,7 +344,7 @@ swfdec_asnative.h: $(libswfdec_source_files) && echo "#undef SWFDEC_AS_NATIVE" \ && echo "#define SWFDEC_AS_NATIVE(x,y,func) SWFDEC_AS_CONSTRUCTOR(x,y,func,NULL)" \ && echo "#define SWFDEC_AS_CONSTRUCTOR(x,y,func,type) { x, y, func, G_STRINGIFY (func), type }," \ - && echo "static const struct { guint x, y; SwfdecAsNative func; const char *name; GType (* get_type) (void); } native_funcs[] = {" \ + && echo "const struct { guint x, y; SwfdecAsNative func; const char *name; GType (* get_type) (void); } native_funcs[] = {" \ && grep -he "^SWFDEC_AS_CONSTRUCTOR" $(libswfdec_source_files) \ && grep -he "^SWFDEC_AS_NATIVE" $(libswfdec_source_files) \ && echo " { 0, 0, NULL }" \ @@ -351,7 +352,7 @@ swfdec_asnative.h: $(libswfdec_source_files) && echo "#undef SWFDEC_AS_CONSTRUCTOR" \ && echo "#undef SWFDEC_AS_NATIVE" \ ) >> xgen-san \ - && (cmp -s xgen-san swfdec_asnative.h || cp xgen-san swfdec_asnative.h) \ + && (cmp -s xgen-san swfdec_asnative.c || cp xgen-san swfdec_asnative.c) \ && rm -f xgen-san swfdec_marshal.h: swfdec_marshal.list Makefile diff --git a/swfdec/swfdec_asnative.h b/swfdec/swfdec_asnative.h new file mode 100644 index 0000000..3ca29ff --- /dev/null +++ b/swfdec/swfdec_asnative.h @@ -0,0 +1,32 @@ +/* Swfdec + * Copyright (C) 2008 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 + */ + +#ifndef _SWFDEC_ASNATIVE_H_ +#define _SWFDEC_ASNATIVE_H_ + +#include <swfdec/swfdec_as_native_function.h> + +extern const struct { + guint x, y; + SwfdecAsNative func; + const char *name; + GType (* get_type) (void); +} native_funcs[]; + +#endif diff --git a/swfdec/swfdec_player_as.c b/swfdec/swfdec_player_as.c index d4d8dd5..de9744a 100644 --- a/swfdec/swfdec_player_as.c +++ b/swfdec/swfdec_player_as.c @@ -35,10 +35,6 @@ #include "swfdec_interval.h" #include "swfdec_as_frame_internal.h" -/* FIXME: to avoid duplicate definitions */ -#undef SWFDEC_AS_NATIVE -#define SWFDEC_AS_NATIVE(x, y, func) - /*** INTERVALS ***/ static void commit 02a24ed1590922db8e961d61ba4a76c715748bb4 Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 12 18:13:16 2008 +0200 add swfdec_player_load_default() function that does proper security checks diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c index 6d6896f..70fdbb3 100644 --- a/swfdec/swfdec_net_stream.c +++ b/swfdec/swfdec_net_stream.c @@ -570,14 +570,13 @@ swfdec_net_stream_load (SwfdecPlayer *player, gboolean allowed, gpointer streamp } void -swfdec_net_stream_set_url (SwfdecNetStream *stream, SwfdecSandbox *sandbox, const char *url_string) +swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string) { SwfdecPlayer *player; SwfdecAsContext *cx; - SwfdecURL *url; g_return_if_fail (SWFDEC_IS_NET_STREAM (stream)); - g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox)); + g_return_if_fail (url_string != NULL); cx = SWFDEC_AS_OBJECT (stream)->context; player = SWFDEC_PLAYER (cx); @@ -588,52 +587,9 @@ swfdec_net_stream_set_url (SwfdecNetStream *stream, SwfdecSandbox *sandbox, cons return; } stream->requested_url = g_strdup (url_string); - stream->sandbox = sandbox; -#if 0 - if (swfdec_url_path_is_relative (url_string)) { - swfdec_net_stream_load (player, TRUE, stream); - return; - } -#endif - url = swfdec_player_create_url (player, url_string); - if (url == NULL) { - swfdec_net_stream_load (player, FALSE, stream); - return; - } - if (swfdec_url_is_local (url)) { - swfdec_net_stream_load (player, - sandbox->type == SWFDEC_SANDBOX_LOCAL_TRUSTED || - sandbox->type == SWFDEC_SANDBOX_LOCAL_FILE, stream); - } else { - switch (sandbox->type) { - case SWFDEC_SANDBOX_REMOTE: - if (swfdec_url_host_equal(url, sandbox->url)) { - swfdec_net_stream_load (player, TRUE, stream); - break; - } - /* fall through */ - case SWFDEC_SANDBOX_LOCAL_NETWORK: - case SWFDEC_SANDBOX_LOCAL_TRUSTED: - { - SwfdecURL *load_url = swfdec_url_new_components ( - swfdec_url_get_protocol (url), swfdec_url_get_host (url), - swfdec_url_get_port (url), "crossdomain.xml", NULL); - swfdec_player_allow_or_load (player, url, load_url, - swfdec_net_stream_load, stream); - swfdec_url_free (load_url); - } - break; - case SWFDEC_SANDBOX_LOCAL_FILE: - swfdec_net_stream_load (player, FALSE, stream); - break; - case SWFDEC_SANDBOX_NONE: - default: - g_assert_not_reached (); - break; - } - } + stream->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global); - swfdec_url_free (url); + swfdec_player_load_default (player, url_string, swfdec_net_stream_load, stream); } void diff --git a/swfdec/swfdec_net_stream.h b/swfdec/swfdec_net_stream.h index e8414de..2f7783d 100644 --- a/swfdec/swfdec_net_stream.h +++ b/swfdec/swfdec_net_stream.h @@ -81,7 +81,6 @@ GType swfdec_net_stream_get_type (void); SwfdecNetStream * swfdec_net_stream_new (SwfdecNetConnection * conn); void swfdec_net_stream_set_url (SwfdecNetStream * stream, - SwfdecSandbox * sandbox, const char * url); void swfdec_net_stream_set_loader (SwfdecNetStream * stream, SwfdecLoader * loader); diff --git a/swfdec/swfdec_net_stream_as.c b/swfdec/swfdec_net_stream_as.c index 93b889a..4eebd18 100644 --- a/swfdec/swfdec_net_stream_as.c +++ b/swfdec/swfdec_net_stream_as.c @@ -51,7 +51,7 @@ swfdec_net_stream_play (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, Sw const char *url; url = swfdec_as_value_to_string (cx, &argv[0]); - swfdec_net_stream_set_url (stream, SWFDEC_SANDBOX (cx->global), url); + swfdec_net_stream_set_url (stream, url); swfdec_net_stream_set_playing (stream, TRUE); } diff --git a/swfdec/swfdec_player_internal.h b/swfdec/swfdec_player_internal.h index 70bdbb8..d51c5e1 100644 --- a/swfdec/swfdec_player_internal.h +++ b/swfdec/swfdec_player_internal.h @@ -279,6 +279,11 @@ void swfdec_player_allow_or_load (SwfdecPlayer * player, const SwfdecURL * load_url, SwfdecPolicyFunc func, gpointer data); +void swfdec_player_load_default (SwfdecPlayer * player, + const char * url_string, + SwfdecPolicyFunc func, + gpointer data); + /* in swfdec_as_interpret.c */ SwfdecMovie * swfdec_player_get_movie_from_value (SwfdecPlayer * player, diff --git a/swfdec/swfdec_policy_file.c b/swfdec/swfdec_policy_file.c index 9a2471d..084202d 100644 --- a/swfdec/swfdec_policy_file.c +++ b/swfdec/swfdec_policy_file.c @@ -1,5 +1,5 @@ /* Swfdec - * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> + * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org> * 2007 Pekka Lampila <pekka.lampila at iki.fi> * * This library is free software; you can redistribute it and/or @@ -31,6 +31,7 @@ #include "swfdec_internal.h" #include "swfdec_loader_internal.h" #include "swfdec_player_internal.h" +#include "swfdec_sandbox.h" #include "swfdec_xml.h" #include "swfdec_xml_node.h" @@ -358,3 +359,57 @@ swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url, file->requests = g_slist_append (file->requests, request); } +void +swfdec_player_load_default (SwfdecPlayer *player, const char *url_string, + SwfdecPolicyFunc func, gpointer data) +{ + SwfdecSandbox *sandbox; + SwfdecURL *url; + + g_return_if_fail (SWFDEC_IS_PLAYER (player)); + g_return_if_fail (url_string != NULL); + g_return_if_fail (func); + + sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global); + g_assert (sandbox); + + url = swfdec_player_create_url (player, url_string); + if (url == NULL) { + func (player, FALSE, data); + return; + } + if (swfdec_url_is_local (url)) { + func (player, + sandbox->type == SWFDEC_SANDBOX_LOCAL_TRUSTED || + sandbox->type == SWFDEC_SANDBOX_LOCAL_FILE, data); + } else { + switch (sandbox->type) { + case SWFDEC_SANDBOX_REMOTE: + if (swfdec_url_host_equal(url, sandbox->url)) { + func (player, TRUE, data); + break; + } + /* fall through */ + case SWFDEC_SANDBOX_LOCAL_NETWORK: + case SWFDEC_SANDBOX_LOCAL_TRUSTED: + { + SwfdecURL *load_url = swfdec_url_new_components ( + swfdec_url_get_protocol (url), swfdec_url_get_host (url), + swfdec_url_get_port (url), "crossdomain.xml", NULL); + swfdec_player_allow_or_load (player, url, load_url, func, data); + swfdec_url_free (load_url); + } + break; + case SWFDEC_SANDBOX_LOCAL_FILE: + func (player, FALSE, data); + break; + case SWFDEC_SANDBOX_NONE: + default: + g_assert_not_reached (); + break; + } + } + + swfdec_url_free (url); +} + diff --git a/swfdec/swfdec_policy_file.h b/swfdec/swfdec_policy_file.h index 337e236..74c3b5b 100644 --- a/swfdec/swfdec_policy_file.h +++ b/swfdec/swfdec_policy_file.h @@ -1,5 +1,5 @@ /* Swfdec - * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> + * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org> * 2007 Pekka Lampila <pekka.lampila at iki.fi> * * This library is free software; you can redistribute it and/or commit 546c8b94608260deb70c95af63935550db817022 Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 12 18:01:37 2008 +0200 put sandbox definition into swfdec_types.h diff --git a/swfdec/swfdec_sandbox.h b/swfdec/swfdec_sandbox.h index fa5baca..f9332ea 100644 --- a/swfdec/swfdec_sandbox.h +++ b/swfdec/swfdec_sandbox.h @@ -23,10 +23,11 @@ #include <swfdec/swfdec_as_object.h> #include <swfdec/swfdec_url.h> #include <swfdec/swfdec_player.h> +#include <swfdec/swfdec_types.h> G_BEGIN_DECLS -typedef struct _SwfdecSandbox SwfdecSandbox; +//typedef struct _SwfdecSandbox SwfdecSandbox; typedef struct _SwfdecSandboxClass SwfdecSandboxClass; typedef enum { diff --git a/swfdec/swfdec_types.h b/swfdec/swfdec_types.h index 1beb94b..8b8848b 100644 --- a/swfdec/swfdec_types.h +++ b/swfdec/swfdec_types.h @@ -50,6 +50,7 @@ typedef struct _SwfdecShapeVec SwfdecShapeVec; typedef struct _SwfdecRect SwfdecRect; typedef struct _SwfdecResource SwfdecResource; typedef struct _SwfdecRootSprite SwfdecRootSprite; +typedef struct _SwfdecSandbox SwfdecSandbox; typedef struct _SwfdecScriptable SwfdecScriptable; typedef struct _SwfdecSound SwfdecSound; typedef struct _SwfdecSoundChunk SwfdecSoundChunk; commit ab164d28c797351b8c94fd4f09c070d97eb1fbb5 Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 12 09:52:22 2008 +0200 rename header_count to n_headers I''ve made it a style decision back in the days to use n_foos instead of foo_count everywhere. Would be nice if you would do so, too. Otherwise I''ll fix it. :) diff --git a/swfdec-gtk/swfdec_gtk_loader.c b/swfdec-gtk/swfdec_gtk_loader.c index b3b0f1f..a4214e7 100644 --- a/swfdec-gtk/swfdec_gtk_loader.c +++ b/swfdec-gtk/swfdec_gtk_loader.c @@ -133,7 +133,7 @@ swfdec_gtk_loader_dispose (GObject *object) static void swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecPlayer *player, - const char *url_string, SwfdecBuffer *buffer, guint header_count, + const char *url_string, SwfdecBuffer *buffer, guint n_headers, const char **header_names, const char **header_values) { SwfdecURL *url; @@ -152,7 +152,7 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecPlayer *player, if (!swfdec_url_has_protocol (url, "http") && !swfdec_url_has_protocol (url, "https")) { SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, player, - url_string, buffer, header_count, header_names, header_values); + url_string, buffer, n_headers, header_names, header_values); } else { SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader); SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk); @@ -161,7 +161,7 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecPlayer *player, swfdec_url_get_url (url)); soup_message_set_flags (gtk->message, SOUP_MESSAGE_OVERWRITE_CHUNKS); - for (i = 0; i < header_count; i++) { + for (i = 0; i < n_headers; i++) { soup_message_headers_append (gtk->message->request_headers, header_names[i], header_values[i]); } diff --git a/swfdec/swfdec_loader.h b/swfdec/swfdec_loader.h index b0e1b5e..d5e4cd2 100644 --- a/swfdec/swfdec_loader.h +++ b/swfdec/swfdec_loader.h @@ -68,7 +68,7 @@ struct _SwfdecLoaderClass SwfdecPlayer * player, const char * url, SwfdecBuffer * buffer, - guint header_count, + guint n_headers, const char ** header_names, const char ** header_values); };
Riccardo Magliocchetti
2008-Jun-15 15:12 UTC
[Swfdec] [Swfdec-commits] 14 commits - configure.ac swfdec/.gitignore swfdec-gtk/swfdec_gtk_loader.c swfdec-gtk/swfdec_playback_alsa.c swfdec/Makefile.am swfdec/swfdec_asnative.h swfdec/swfdec_as_string.c swfdec/swfdec_audio.c swfdec/swfdec_audio_load.c swfdec/swfdec_audio_load.h swfdec/swfdec_audio_stream.c swfdec/swfdec_audio_stream.h swfdec/swfdec_audio_swf_stream.c swfdec/swfdec.h swfdec/swfdec_loader.h swfdec/swfdec_load_sound.c swfdec/swfdec_load_sound.h swfdec/swfdec_net_stream_as.c swfdec/swfdec_net_stream.c swfdec/swfdec_net_stream.h swfdec/swfdec_player_as.c swfdec/swfdec_player_internal.h swfdec/swfdec_policy_file.c swfdec/swfdec_policy_file.h swfdec/swfdec_sandbox.h swfdec/swfdec_sound_object.c swfdec/swfdec_sound_object.h swfdec/swfdec_types.h test/trace vivified/code
Benjamin Otte wrote:> swfdec/swfdec_asnative.h | 32 ++I got this pulling: rm at eurasia:~/swfdec/swfdec$ git pull error: Untracked working tree file 'swfdec/swfdec_asnative.h' would be overwritten by merge. fatal: merging of trees 3df79563f8172d67281cd8ab5785436cb53b871c and dc317980314e0b7dcd52f4cf77e1a17d93c91776 failed Merge with strategy recursive failed. Removing the file fixed the issue for me. Then that file should be removed from .gitignore right? Patch attached. cheers, rm -------------- next part -------------- A non-text attachment was scrubbed... Name: remove-from-gitignore-asnative.h Type: text/x-chdr Size: 250 bytes Desc: not available Url : http://lists.freedesktop.org/archives/swfdec/attachments/20080615/ce63492f/attachment.h
Maybe Matching Threads
- 70 commits - configure.ac libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec-gtk.h libswfdec-gtk/swfdec_gtk_loader.c libswfdec-gtk/swfdec_gtk_player.c libswfdec-gtk/swfdec_gtk_socket.c libswfdec-gtk/swfdec_gtk_socket.h libswfdec-gtk/swfdec_playback_alsa.c
- 5 commits - doc/Makefile.am doc/swfdec-sections.txt libswfdec/Makefile.am libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_player_as.c
- Branch 'as' - 4 commits - doc/Makefile.am doc/swfdec-docs.sgml doc/swfdec-sections.txt libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_types.c libswfdec/swfdec_as_types.h
- [Bug 16239] New: Loading flash from CHU Amiens make swfdec crash
- 5 commits - doc/Makefile.am doc/swfdec-docs.sgml doc/swfdec-sections.txt libswfdec/swfdec_loader.c libswfdec/swfdec_player.c