Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* 
   * Copyright (c) 2007,2008 Wayne Meissner
   * 
   * This file is part of gstreamer-java.
   *
   * This code is free software: you can redistribute it and/or modify it under
   * the terms of the GNU Lesser General Public License version 3 only, as
   * published by the Free Software Foundation.
   *
  * This code 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
  * version 3 for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package org.gstreamer.media;
 
 import java.net.URI;
 import java.util.List;
 import java.util.Map;
Provides a partial implementation of MediaPlayer that handles org.gstreamer.media.event.MediaListener and playlist management.
 
 public abstract class AbstractMediaPlayer implements MediaPlayer {
 
     private final List<MediaListenerlisteners = new CopyOnWriteArrayList<MediaListener>();
     protected final Executor eventExecutor;
     protected final Queue<URIplayList = new ConcurrentLinkedQueue<URI>();
     
     protected AbstractMediaPlayer(Executor eventExecutor) {
         this. = eventExecutor;
     }
     
     protected void fireEndOfMediaEvent(EndOfMediaEvent ev) {
         for (MediaListener l : getMediaListeners()) {
             l.endOfMedia(ev);
         }
     }
     
     protected void fireStartEvent(StartEvent ev) {
         for (MediaListener l : getMediaListeners()) {
             l.start(ev);
         }
     }
     
     protected void fireStopEvent(StopEvent ev) {
         for (MediaListener l : getMediaListeners()) {
             l.stop(ev);
         }
     }
     protected void firePauseEvent(PauseEvent ev) {
         for (MediaListener l : getMediaListeners()) {
             l.pause(ev);
         }
     }
    
    
Adds a uri to the playlist

Parameters:
uri The uri to add to the playlist.
 
     public void enqueue(URI uri) {
         .add(uri);
     }
    
    
Adds a list of media files to the playlist.

Parameters:
playlist The list of media files to add.
 
     public void enqueue(Collection<URIplaylist) {
         this..addAll(playlist);
     }
    
    
Replaces the current play list with a new play list.

Parameters:
playlist The new playlist.
 
    public void setPlaylist(Collection<URIplaylist) {
        this..clear();
        this..addAll(playlist);
    }
    
    
Removes a file from the play list.

Parameters:
uri The uri to remove.
    public void remove(URI uri) {
        this..remove(uri);
    }
    
    
Adds a org.gstreamer.media.event.MediaListener that will be notified of media events.

Parameters:
listener the MediaListener to add.
    public synchronized void addMediaListener(MediaListener listener) {
        // Wrap the listener in a swing EDT safe version
        MediaListener proxy = wrapListener(MediaListener.classlistener);
        .put(listenerproxy);
        .add(proxy);
    }
    
    
Adds a org.gstreamer.media.event.MediaListener that will be notified of media events.

Parameters:
listener the MediaListener to add.
    public synchronized void removeMediaListener(MediaListener listener) {
        MediaListener proxy = .remove(listener);
        .remove(proxy);
    }
    
    
Gets the current list of media listeners

    protected List<MediaListenergetMediaListeners() {
        return ;
    }
    private static <T> T wrapListener(Class<T> interfaceClass, T instanceExecutor executor) {
        return interfaceClass.cast(Proxy.newProxyInstance(interfaceClass.getClassLoader(), 
                new Class[]{ interfaceClass }, 
                new ExecutorInvocationProxy(instanceexecutor)));
    }
    
    
Provides a way of automagically executing methods on an interface on a different thread.
    private static class ExecutorInvocationProxy implements InvocationHandler {
        private final Executor executor;
        private final Object object;
        public ExecutorInvocationProxy(Object objectExecutor executor) {
            this. = object;
            this. = executor;
        }
        public Object invoke(Object selffinal Method methodfinal Object[] argArraythrows Throwable {
            if (method.getName().equals("hashCode")) {
                return .hashCode();
            }
            .execute(new Runnable() {
                public void run() {
                    try {
                        method.invoke(argArray);
                    } catch (Throwable t) {}
                }
            });
            return null;
        }
    }
New to GrepCode? Check out our FAQ X