gnash-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnash-dev] AVM2/AS3 status, SWF10 movies, etc


From: Benjamin Wolsey
Subject: Re: [Gnash-dev] AVM2/AS3 status, SWF10 movies, etc
Date: Tue, 27 Oct 2009 09:23:21 +0100

I'll answer these in reverse order:

> Flash 10 seems to contain AS3 (ActionScript 3) which is implemented by
> AVM2.  The implementation includes:

> * a bytecode interpreter
>   * memory management, initialization, etc.
>   * a builtin class library
>   * graphical back-ends for painting, audio, video, input, etc
>   * (anything else important?)
> 
> Are the other pieces all in good shape?
> 
> So can our gnash initialization start running an AS3 "ABC file"?  Is
> that what Youtube is offering from its web site, e.g. from:
> 

Here a brief outline of flash versioning, as it's not very clear to many
people:

The version of a SWF file (currently 1 to 10) is stored in the header.
It has some effect on the way files are executed, particularly for
versions 1-8, but is completely irrelevant for which virtual machine is
used. It's possible for a SWF to be version 10 and to use only
ActionScript 1, or (probably) to be version 1 and run ActionScript 3
(AS3).

More important is the VM version. Another flag in the header determines
whether the player will use AVM1 or AVM2. AVM2 is the machine for AS3,
which consists of ActionScript Byte Code (ABC). An ABC file is a SWF
file that has the ABC header flag set to true.

ActionScript (all versions) is stored as bytecode only in specific tags.
AS2 is stored mainly in DoAction and DoInitAction tags. AS3 is stored in
DoABC tags. Both types of tag can be present in any SWF; the player will
simply ignore one of the types according to the ABC header flag.

There are a few more tags specific to AS3, especially the SymbolClass
tag. Most other tags are common to AVM1 and AVM2. They handle things
like defining MovieClips, fonts, or TextFields, morphing and translation
of DisplayObjects, Bitmaps and so on. Different versions of the tags
have been introduced steadily since the beginning of Flash, but as a
rule any of these tags can be used in any version.

Gnash has support for ABC execution, and has a basic testsuite to prove
it. Gnash also parses and executes the SymbolClass tag. This is the one
used in initialization, and Gnash currently can't implement it properly
because it relies on making an already-constructed object into a Sprite
or MovieClip.

> Benjamin, you seem to be reworking the builtin class library (because
> it isn't sufficiently flexible to be able to do many things that seem
> common in AS3?); is that true?

More or less. The "built-in class" library describes the whole API of
the player, both the functions native to the player and the classes
defined in ActionScript and executed on initialization (Gnash doesn't do
it like this, by the way, but rather implements these classes in C++,
which may or may not be a good idea).

The built-in AS3 classes are mostly stubbed, some more accurately than
others, and some functions already work. 

Mainly what I'm doing is working on the native part of this, which
includes the DisplayObject classes. Those are objects that can be put on
the stage and displayed, including videos, bitmaps, shapes, morphs, and
text. I'm not working on AS3 functions, but rather the way these objects
are implemented behind the scenes so that it becomes possible to turn
simple objects into DisplayObjects.

--
Use Gnash, the GNU Flash Player!
http://www.gnu.org/software/gnash/

Benjamin Wolsey, Software Developer - http://benjaminwolsey.de

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil


reply via email to

[Prev in Thread] Current Thread [Next in Thread]