Commit Graph

3330 Commits

Author SHA1 Message Date
Mike Welsh 60f5dc2477 avm2: Implement SoundChannel.position
Fix various issues with `SoundChannel`:
 * Change `avm2::Object::as_sound_instance` to `as_sound_channel`.
 * Cache sound position in `SoundChannelObject`.
 * `SoundInfo::in_sample` is in units of 44100Hz.
 * Clamp `num_loops` to 1.
2021-10-16 22:53:25 -07:00
Mike Welsh 6034b4a3af avm1: Sound.position and duration are not version-gated
Even though they were added in SWFv6, they will be available when
playing a v5 SWF in Flash Player 6 and higher.

See #340 for an example in the wild.
2021-10-16 22:53:25 -07:00
Mike Welsh 105c889f5f desktop: Implement AudioBackend::get_sound_position 2021-10-16 22:53:25 -07:00
Mike Welsh bca31b2c51 audio: Grab Sound.position from audio backend
* Change `AudioBackend::get_sound_position` to return `f64` to
   match `AudioBackend::get_sound_duration`.
 * Wire up `AudioBackend::get_sound_position` to `Sound.position`.
 * Remove unimplmeneted warning from `Sound.position`.
2021-10-16 22:53:25 -07:00
relrelb e9efc2841b avm1: Store depth in `SuperObject`
This is a temporary hack to calculate depth from `base_proto` and
`this`, so that changing `this.__proto__` will affect `super`.

In the future, `depth` should be passed instead of `base_proto`.
2021-10-16 11:14:38 -07:00
relrelb 299b7a778c avm1: Correct `base_proto` for method calls
In case the method is found directly on `this` (normally it shouldn't
because it's usually defined on `this.__proto__`), it seems like the
`super` object behaves identically as-if the method was found on
the object's prototype.
2021-10-16 11:14:38 -07:00
relrelb 7008f9bacc avm1: Correct `base_proto` for constructions
Previously constructions had `base_proto` set to the newly-created
object (`this`). However this doesn't match the `base_proto` of method
calls, which is `this.__proto__` (or more precisely where the function
is found on the prototype chain). This caused wrong behavior when using
the `super` object from within constructors.

Change `base_proto` in that case to be `this.__proto__`, which aligns
with method calls.
In order to keep things working, `SuperObject::call` needs to look-up
one level less than before.

An alternative can be changing `base_proto` for method calls instead,
but that seems to be harder because this would require `search_prototype`
to return the before-last visited object in the prototype chain.
2021-10-16 11:14:38 -07:00
relrelb 1772def6e6 avm1: Fix `SuperObject::get_local_stored`
It should return `None` in order to continue further walking on the
prototype chain.
2021-10-16 11:14:38 -07:00
Chris Midgley c5ad8e76ee
audio: Fail to create invalid ADPCM decoder 2021-10-13 23:12:32 -07:00
Mike Welsh 219d3af284 avm1: Function base clip defaults to `this` if clip no longer exists
When a function is defined, the base clip is stored in the function
object, and used when the function is called in SWFv6+. This
affects the target clip for GotoFrame and other actions.

However, if that base clip no longer exists when the function is
called, the base clip should default to the `this` display object.
Previously Ruffle would still use the previously unloaded base clip.
2021-10-12 17:23:01 -07:00
relrelb c0021204c6 Revert "core: Fix clip depth handling in `MovieClip::mouse_pick`"
This reverts commit 37e3f0903e.
2021-10-12 22:42:11 +03:00
dependabot[bot] 72e50bd3c6 build(deps): bump quote from 1.0.9 to 1.0.10
Bumps [quote](https://github.com/dtolnay/quote) from 1.0.9 to 1.0.10.
- [Release notes](https://github.com/dtolnay/quote/releases)
- [Commits](https://github.com/dtolnay/quote/compare/1.0.9...1.0.10)

---
updated-dependencies:
- dependency-name: quote
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-11 17:14:42 -07:00
dependabot[bot] ce70dbb52e build(deps): bump png from 0.17.1 to 0.17.2
Bumps [png](https://github.com/image-rs/image-png) from 0.17.1 to 0.17.2.
- [Release notes](https://github.com/image-rs/image-png/releases)
- [Changelog](https://github.com/image-rs/image-png/blob/master/CHANGES.md)
- [Commits](https://github.com/image-rs/image-png/commits)

---
updated-dependencies:
- dependency-name: png
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-11 15:30:20 -07:00
dependabot[bot] fd64530288 build(deps): bump syn from 1.0.78 to 1.0.80
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.78 to 1.0.80.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.78...1.0.80)

---
updated-dependencies:
- dependency-name: syn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-11 15:29:29 -07:00
relrelb 37e3f0903e core: Fix clip depth handling in `MovieClip::mouse_pick` 2021-10-10 18:51:59 -07:00
Mike Welsh 0786350a6f avm2: Defer self-gotos to end of frame script execution
If a movieclip calls a seek operation like `gotoAndStop` on
itself while executing a frame script, this goto is not executed
until the frame script has completed. In contrast, calling a goto
on other clips will execute the goto immediately.
2021-10-10 18:27:30 -07:00
Mike Welsh 57be2397ef avm2: Initialize slots to appropriate values when no default given
Slots and const traits should initialize to an appropriate value
for their type if no default is specified. Remove the `Option`
from `default_value`, and always set it to an appropriate null-ish
value (`0` for ints, `NaN` for `Number`, `null` for objects, etc.)
2021-10-10 14:01:36 -07:00
EmperorBale 34ecb32b85 avm2: Add custom implementations for get_enumerant_name and property_is_enumerable for VectorObject 2021-10-10 11:02:42 -07:00
EmperorBale 6eea0f2067 avm2: Add custom get_enumerant_name & property_is_enumerable implementations for ArrayObject 2021-10-10 11:02:42 -07:00
Chris Midgley 2dfaa33282 chore: fmt 2021-10-09 10:10:03 -07:00
Chris Midgley c9e67d31dc core: move avm_type from display object to update context 2021-10-09 10:10:03 -07:00
relrelb 54df49f96e core: Random SWF-related cleanups 2021-10-08 13:22:45 -07:00
relrelb 4fcf0907ac core: Remove `SwfSlice` usage from `MovieClip::new` 2021-10-08 13:22:45 -07:00
relrelb b8152f431e core: Use `SwfSlice::read_from` 2021-10-08 13:22:45 -07:00
Moulins 4ad6e1e698 avm1: Propagate AvmString<'gc>s to all methods on Object
Some frequently-used Object methods have an Into<impl AvmString<'gc>>
parameter to reduce the size of the changes.
2021-10-06 19:47:35 -06:00
Moulins 9aa601d43b core: Store AvmString<'gc>s in avm1::PropertyMap 2021-10-06 19:47:35 -06:00
TÖRÖK Attila 525dfcba05 chore: Bump h263-rs and h263-rs-yuv git refs 2021-10-05 10:58:46 -07:00
TÖRÖK Attila 3869950578 video/vp6: Add VP6[A] video decoding support
Gated behind the "vp6" feature, enabled by default.
Utilizing a heavily stripped-down version of the NihAV project,
retaining only the VP6 decoder, relicensed under MIT.
Including VP6WithAlpha decoding, proper FrameDependency reporting,
and cropping the unwanted encoded pixels on the right/bottom manually.
2021-10-04 22:33:06 -07:00
dependabot[bot] 006275632c build(deps): bump syn from 1.0.77 to 1.0.78
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.77 to 1.0.78.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.77...1.0.78)

---
updated-dependencies:
- dependency-name: syn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 15:01:47 -07:00
dependabot[bot] 3d754a5d7d build(deps): bump smallvec from 1.6.1 to 1.7.0
Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.6.1 to 1.7.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.6.1...v1.7.0)

---
updated-dependencies:
- dependency-name: smallvec
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 15:01:36 -07:00
David Wendt ee9341cb1c avm2: Remove `is_boxed_primitive`, as we are no longer accepting boxed primitives on the stack. 2021-10-03 15:57:43 -07:00
David Wendt 71c953b6ac avm2: Automatically unbox any boxed primitives that happen to make their way onto the stack.
This particular occurance is unlikely in practice, but could become far more common as more primitive constructors are implemented.
2021-10-03 15:57:43 -07:00
relrelb d49ea10267 swf: Rename `TryBlock` fields
* `try_actions` -> `try_body`
* `catch` -> `catch_body`
* `finally` -> `finally_body`

This aligns with the names used in SWF19, and is more consistent.
2021-10-02 23:01:32 +03:00
relrelb 81c864c6c8 avm1: Propagate exceptions in `Key.isDown`
Also change `coerce_to_f64` to `coerce_to_i32`.
2021-10-02 23:01:32 +03:00
relrelb 0a30057a63 avm1: Use enum constants instead of hard-coded numbers 2021-10-02 23:01:32 +03:00
TÖRÖK Attila a1ee508ff8
chore: Fix nightly clippy lint: clippy::if_then_panic (#5400)
* chore: Fix nightly clippy lint: clippy::if_then_panic

* chore: Fix nightly clippy lint: clippy::if_then_panic in swf tests too

* Address review notes
2021-10-02 16:14:53 +03:00
David Wendt f2e7457bc0 avm2: Move `QNameObject` specific methods behind an `as_qname_object` downcast. 2021-10-01 16:30:58 -06:00
David Wendt aaca3460d4 avm2: `QName` overrides `toString` and `valueOf` in both namespaces 2021-10-01 16:30:58 -06:00
David Wendt 513965b624 avm2: `Function.call` and `Function.apply` need to be accessible in the public namespace.
We should be able to move the AS3 versions to traits, but that breaks two other tests.
2021-10-01 16:30:58 -06:00
David Wendt 273872e2ab avm2: `Any` namespaces are represented as `*` in `QName`'s string form 2021-10-01 16:30:58 -06:00
David Wendt 294b0fc53e avm2: Impl `QName`'s constructor and properties 2021-10-01 16:30:58 -06:00
David Wendt 5387b1a4e0 avm2: Add stub boxed `QName` object type and class 2021-10-01 16:30:58 -06:00
relrelb 05d8f13b26 audio: ADPCM small cleanup 2021-09-30 20:16:04 +03:00
relrelb b9307af78f audio: Move ADPCM's tables out of `AdpcmDecoder` 2021-09-30 20:16:04 +03:00
relrelb 50ec497c60 audio: Introduce `AdpcmDecoder::channels`
This reduces duplicated code.
2021-09-30 20:16:04 +03:00
relrelb 4deaaed75c audio: Inline `AdpcmDecoder::next_sample` 2021-09-30 20:16:04 +03:00
relrelb 99827caf2b audio: Localize `AdpcmDecoder::{left,right}_step`
Since they were used only in a single scope.
2021-09-30 20:16:04 +03:00
dependabot[bot] 8c123c10af build(deps): bump syn from 1.0.76 to 1.0.77
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.76 to 1.0.77.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.76...1.0.77)

---
updated-dependencies:
- dependency-name: syn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-28 01:27:10 +03:00
dependabot[bot] 5fe0994a3a build(deps): bump symphonia from 0.3.0 to 0.4.0
Bumps [symphonia](https://github.com/pdeljanov/Symphonia) from 0.3.0 to 0.4.0.
- [Release notes](https://github.com/pdeljanov/Symphonia/releases)
- [Commits](https://github.com/pdeljanov/Symphonia/compare/v0.3.0...v0.4.0)

---
updated-dependencies:
- dependency-name: symphonia
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-28 01:26:57 +03:00
Adrian Wielgosik 5ce2266be7 chore: clippy 2021-09-27 11:03:48 +02:00