MEDIA_ENGINE_IMPL_MAIN_R0: MEDIA_ENGINE_IMPL_MAIN_R0-28.04.2009.patch

File MEDIA_ENGINE_IMPL_MAIN_R0-28.04.2009.patch, 8.7 KB (added by nenko, 16 years ago)

Implementation patch

  • src/main/java/org/sophie2/main/media/fobs/JMFVideoEngine.java

    ### Eclipse Workspace Patch 1.0
    #P org.sophie2.main.media.fobs
     
    3838        /** 
    3939         * Default constructor 
    4040         */ 
    41         public JMFVideoEngine() { 
     41        public JMFVideoEngine() {        
    4242                this.playerRegistry = new HashMap<Object, Player>(); 
    4343        } 
    4444 
     
    7979                        } 
    8080                        ImmSize imageSize = null; 
    8181                        if (currentFrame!=null){  
    82                                 System.out.println("weeeee"); 
    8382                                imageSize= new ImmSize(currentFrame.getWidth(),currentFrame.getHeight()); 
    8483                        }else imageSize = new ImmSize(160, 120); 
    8584                        player.stop(); 
  • src/main/java/org/sophie2/main/func/media/logic/VideoLogic.java

    #P org.sophie2.main.func.media
     
    5050                } 
    5151 
    5252                @Override 
    53                 @SuppressWarnings("cast") 
    5453                public boolean handle(EventR3 event) { 
    5554                        InsertVideoItem source = event.getSource(InsertVideoItem.class); 
    5655                        AppMainWindow sourceAppMainWindow = AppMainWindow.findMainWindow(source); 
    5756                        BookView targetBDW = (BookView)sourceAppMainWindow.booksDesktop().get().currentWindow().get(); 
    5857                         
    59                         PageWorkArea targetSPWA = (PageWorkArea) targetBDW.workArea().get();                             
     58                        PageWorkArea targetSPWA = targetBDW.workArea().get();                            
    6059                        VideoBookResource res = createVideoResource( 
    6160                                        targetSPWA, targetBDW.book().get().get(Book.class)); 
    6261                        if (res==null){ 
    63                                 System.out.println("The resourse is null"); 
     62                                logger().error("The resource is null"); 
    6463                                return false; 
    65  
    6664                        } 
    6765                         
    6866                        insertNewFrame(targetSPWA, res); 
  • src/main/java/org/sophie2/main/func/media/view/VideoContentView.java

     
    1212import org.sophie2.main.func.media.model.resources.VideoBookResource; 
    1313 
    1414/** 
    15  * Concrete implementation of MediaContentView for video. It constructs 
    16  * an video scene element {@link VideoSceneElement} using the data from model 
     15 * Concrete implementation of MediaContentView for video. It constructs an video 
     16 * scene element {@link VideoSceneElement} using the data from model 
    1717 * {@link VideoFrameContent}. 
    1818 *  
    1919 * @author alex 
     
    4141        /** 
    4242         * Concrete implementation of {@link VideoSceneElement}. 
    4343         */ 
    44         class VideoContentSceneElement extends DefaultVideoSceneElement{ 
     44        class VideoContentSceneElement extends DefaultVideoSceneElement { 
    4545                @Override 
    4646                protected void setupDynamic() { 
    4747                        if (model().get() != null 
    4848                                        && model().get().mainResource().get() != null) { 
    49                                 VideoBookResource resource =  
    50                                         model().get().mainResource().get().get( 
    51                                                         VideoBookResource.class, model().get());                                 
     49                                VideoBookResource resource = model().get().mainResource().get() 
     50                                                .get(VideoBookResource.class, model().get()); 
    5251 
    5352                                // set MediaSource 
    5453                                source().set((BinDataSource) resource.source().get()); 
    5554                                // set MediaInfo 
    5655                                mediaInfo().set(resource.info().get()); 
    57                                 // request initial state - volume = 1, position = 0, playing = true 
     56                                // request initial state - volume = 1, position = 0, playing = 
     57                                // true 
    5858                                requestedState().set(new MediaState(1, -1, true)); 
    5959 
    6060                        } 
     
    6262                        ImmSize dimensions = mediaInfo().get().getDimensions(); 
    6363                        if (dimensions != null && parent().get() != null) { 
    6464 
    65                                 ImmSize contentSize = parent().get().model().get().contentSize().get(); 
     65                                ImmSize contentSize = parent().get().model().get() 
     66                                                .contentSize().get(); 
    6667                                float x = contentSize.getWidth() / dimensions.getWidth(); 
    6768                                float y = contentSize.getHeight() / dimensions.getHeight(); 
    6869                                space().set(ImmMatrix.IDENTITY.scale(x, y)); 
  • src/main/java/org/sophie2/main/func/media/view/InsertVideoItem.java

     
    1313 
    1414/** 
    1515 * The insert video item. 
     16 *  
    1617 * @author milo 
    17  * 
     18 *  
    1819 */ 
    1920@SkinElementId("app.menus.insert.insert-video-menu-item") 
    2021public class InsertVideoItem extends AppMenuItem { 
     
    2223        @SuppressWarnings("unused") 
    2324        @SkinPartDef 
    2425        private static void defineSkin(ElementSkinPart part) { 
    25                 part.add(TITLE_PROP_ID, "Video"); 
     26                part.add(TITLE_PROP_ID, "Video..."); 
    2627                part.add(TOOL_TIP_PROP_ID, "Add a video frame to the current page."); 
    2728                part.add(MNEMONIC_PROP_ID, KeyEvent.VK_V); 
    2829        } 
     30 
    2931        @Override 
    3032        public void clicked() { 
    3133                LogicR3.fire(new EventR3(this, null, null, null, Ids.ADD_VIDEO_FRAME)); 
     
    3941        /** 
    4042         * The media operation supported by the video item. 
    4143         *  
    42         */ 
    43                 public enum Ids { 
    44                         /** 
    45                         * A video frame should be added. 
    46                         */ 
    47                         @EventParams( {}) 
    48                         ADD_VIDEO_FRAME 
     44         */ 
     45        public enum Ids { 
     46                /** 
     47                * A video frame should be added. 
     48                */ 
     49                @EventParams( {}) 
     50                ADD_VIDEO_FRAME 
    4951 
    50                 } 
     52        } 
    5153 
    5254} 
    53  
  • src/main/java/org/sophie2/main/scene/simple/SimpleSceneVisual.java

    #P org.sophie2.main.scene.simple
     
    55import java.awt.Graphics2D; 
    66import java.awt.Rectangle; 
    77import java.awt.geom.Area; 
     8import java.util.Date; 
    89import java.util.List; 
     10import java.util.Timer; 
     11import java.util.TimerTask; 
    912 
    1013import javax.swing.JPanel; 
     14import javax.swing.SwingUtilities; 
    1115 
    1216import org.sophie2.base.commons.util.position.ImmRect; 
    1317import org.sophie2.base.scene.SceneVisual; 
    1418import org.sophie2.base.scene.helpers.ElementHelper; 
    1519import org.sophie2.base.scene.helpers.SceneHelper; 
     20import org.sophie2.base.scene.interfaces.MediaSceneElement; 
    1621import org.sophie2.base.scene.interfaces.Scene; 
     22import org.sophie2.base.scene.interfaces.SceneElement; 
    1723import org.sophie2.base.skins.SkinElementId; 
    1824import org.sophie2.base.visual.BaseVisualElement; 
    1925import org.sophie2.base.visual.interaction.SwingEventAdapter; 
     
    5561                        protected ScenePanel create() { 
    5662                                ScenePanel res = new ScenePanel(); 
    5763                                SwingEventAdapter.registerComponent(res, 
    58                                 SimpleSceneVisual.this, null, res); 
     64                                                SimpleSceneVisual.this, null, res); 
    5965                                return res; 
    6066                        } 
    6167 
     
    101107                return getBean().makeProp(swingComponent.class); 
    102108        } 
    103109 
     110        @SuppressWarnings("unused") 
     111        private Prop<Timer> sceneTimer() { 
     112                class sceneTimer extends ResourceProperty<Timer> { 
     113 
     114                        final Runnable repaintScene = new Runnable() { 
     115 
     116                                @Override 
     117                                public void run() { 
     118                                        swingComponent().get().repaint(); 
     119                                } 
     120 
     121                        }; 
     122 
     123                        class MyTimerTask extends TimerTask { 
     124 
     125                                private boolean isRunning = false; 
     126 
     127                                @Override 
     128                                public void run() { 
     129                                        if (shouldRedraw(scene().get().rootElement().get())) { 
     130                                                this.isRunning = true; 
     131                                                 SwingUtilities 
     132                                                                .invokeLater(sceneTimer.this.repaintScene); 
     133                                        } 
     134                                } 
     135 
     136                                public boolean isRunning() { 
     137                                        return this.isRunning; 
     138                                } 
     139 
     140                        } 
     141 
     142                        final MyTimerTask timerTask = new MyTimerTask(); 
     143                         
     144                        final boolean shouldRedraw(SceneElement root) { 
     145                                for (SceneElement next : root.subElements().get()) { 
     146                                        if (MediaSceneElement.class.isInstance(next)) { 
     147                                                if (((MediaSceneElement) next).requestedState().get() 
     148                                                                .isPlaying()) { 
     149                                                        return true; 
     150                                                } 
     151                                        } 
     152 
     153                                        if (next != null && shouldRedraw(next)) { 
     154                                                return true; 
     155                                        } 
     156                                } 
     157 
     158                                return false; 
     159                        } 
     160 
     161                        @Override 
     162                        protected Timer create() { 
     163                                return new Timer("scene-repaint-timer", true); 
     164                        } 
     165 
     166                        @Override 
     167                        protected void destroy(Timer res) { 
     168                                // nothing... for now 
     169                        } 
     170 
     171                        @Override 
     172                        protected void setup(Timer res) { 
     173                                Scene scene = scene().get(); 
     174                                if (swingComponent().get() != null && scene != null 
     175                                                && scene.rootElement().get() != null 
     176                                                && shouldRedraw(scene.rootElement().get())) { 
     177                                        if (this.timerTask.isRunning() == false) { 
     178                                                res.schedule(this.timerTask, new Date(), 1000 / 15); 
     179                                        } 
     180                                } 
     181                        } 
     182                } 
     183 
     184                return getBean().makeProp(sceneTimer.class); 
     185        } 
     186 
    104187        // /** 
    105188        // * @return property. 
    106189        // */