[[BackLinksMenu]]

[[TicketQuery(summary=FLASH_CONTENT_BASIC_R2, format=table, col=summary|owner|status|type|component|priority|effort|importance, rows=description|analysis_owners|analysis_reviewers|analysis_score|design_owners|design_reviewers|design_score|implementation_owners|implementation_reviewers|implementation_score|test_owners|test_reviewers|test_score|)]]

= Analysis =
The second iteration of this task is about integrating the java/c++ flash communication using the Native Bridge created in this task http://sophie2.org/trac/wiki/GROUP_WRAPPERS_R0. In the revision only video frames will be transfered including sounds and interactive flash will be subject of future iterations. 

== Overview ==
Integrate the demo using the commonly created interface for native wrappers. 


== Task requirements ==
Make it possible to integrate flash movies in Sophie2. The task itself is not about integrating flash but providing an interface to do so. 
== Task result ==
An interface for getting frames from a flash movie using the native wrapper returned.

== Implementation idea ==
Create a class hierarchy to handle commands and responses in both c++ and java parts. Use the common native bridge implementation to transfer the commands and responses between the java and c++ parts. Use the result of the previous revision in the implementation. 

== Related ==
[wiki:GROUP_WRAPPERS_R0] [[BR]]
[wiki:FLASH_CONTENT_BASIC_R1]

== How to demo ==
Insert an image into a sophie2 page that is a frame of flash movie.

= Design =
Build an hierarchy on both the Java and C++ parts using the common design described in {{{GROUP_WRAPPERS_R0}}}.
In the C++ part:
 * Add folder flash_utils in the src/ directory with four files in it - flash_player.h, flash_player.cpp cairo_handler.h and cairo_handler.cpp. The first two defining a class to handle a SwfdecPlayer object and the second two - a class to encapsulate operations on cairo objects
   * Add class FlashException inheriting JavaMessageException
   * Add class FlashPlayer
   * Add class CairoHandler
 * Create two files flash_messages.cpp and flash_messages.h in the commands folder in the src/ directory.
   * Add class FlashBridge inheriting JavaBridge
   * Add class OpenCommand that represents a command to open new flash file
   * Add class SetSizeCommand that represents a command to edit the flash player size
   * Add class GetSizeCommand that represents a command to get the current flash player size
   * Add class GetFlashFrameCommand that represents a command to get the current frame's pixel data
   * Add class FlashFrameResponse that represents the result of a successful GetFlashFrameCommand
   * Add class FlashSizeResponse that represents the result of a successful SetSizeCommand
   * Add two enumerations FlashCommandIds and FlashResponseIds(their names are self-explanatory)
 C++ part class diagram:[[BR]]
 [[Image(source:/branches/private/ivo/resource/FlashCppPart.png)]]

 In the Java part:
 * Add new values in the ResponseIds and CommandIds enumerations created in {{{GROUP_WRAPPERS_R0}}}
 * Add classes GetFlashSizeCommand, GetFlashFrameCommand, SetFlashSizeCommand and OpenFlashCommand inheriting the interface Command.
 * Add classes FlashFrameResponse and FlashSizeResponse inheriting the interface Response
 * Create class FlashNativeBridge inheriting NativeBridge
 Java part class diagram:[[BR]]
 [[Image(source:/branches/private/ivo/resource/FlashJavaPart.png)]][[BR]]
 There is nothing to test in this revision of the task.[[BR]]
 Here is a link to some source code:[[BR]]
 http://sophie2.org/trac/browser/branches/private/ivo/Wrapper
= Implementation =
The implementation can be found here:[[BR]]
[http://sophie2.org/trac/browser/branches/private/ivo/trunk/sophie2-platform/modules/org.sophie2.base.natlib/src/main/java/org/sophie2/base/natlib/communication java part] [[BR]]
[http://sophie2.org/trac/browser/branches/private/ivo/NativeWrapper c++ part] [[BR]]

= Testing =
One should build the c++ part using the command make flashBridge in the root directory for the c++ part. After that the in the java part in FlashMovieTest the open command should be pointed to a swf file and in the FlashNativeBridge the get executable string value should be pointed to the c++ executable. Then run the demo and observe.

= Comments =
^(Write comments for this or later revisions here.)