diff --git a/include/media/IMediaPlayerService.h b/include/media/IMediaPlayerService.h index 8125cc96dfc83..d1d96b1416353 100644 --- a/include/media/IMediaPlayerService.h +++ b/include/media/IMediaPlayerService.h @@ -34,7 +34,7 @@ class IMediaPlayerService: public IInterface public: DECLARE_META_INTERFACE(MediaPlayerService); - virtual sp createMediaRecorder(pid_t pid) = 0; + virtual sp createMediaRecorder(pid_t pid) = 0; virtual sp createMetadataRetriever(pid_t pid) = 0; virtual sp create(pid_t pid, const sp& client, const char* url) = 0; @@ -57,4 +57,3 @@ public: }; // namespace android #endif // ANDROID_IMEDIAPLAYERSERVICE_H - diff --git a/include/media/MediaPlayerInterface.h b/include/media/MediaPlayerInterface.h index 7f0e7b3a473ed..7bf555a43320c 100644 --- a/include/media/MediaPlayerInterface.h +++ b/include/media/MediaPlayerInterface.h @@ -123,4 +123,3 @@ public: #endif // ANDROID_MEDIAPLAYERINTERFACE_H - diff --git a/include/media/mediaplayer.h b/include/media/mediaplayer.h index 255a67b0d84ab..513ffe1acabbc 100644 --- a/include/media/mediaplayer.h +++ b/include/media/mediaplayer.h @@ -82,7 +82,7 @@ enum media_error_type { // 0xx: Reserved // 7xx: Android Player info/warning (e.g player lagging behind.) // 8xx: Media info/warning (e.g media badly interleaved.) -// +// enum media_info_type { // 0xx MEDIA_INFO_UNKNOWN = 1, diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 35d604bec912a..3b46d690c40be 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -58,7 +58,7 @@ import java.lang.ref.WeakReference; * MediaPlayer object driven by the supported playback control operations. * The ovals represent the states a MediaPlayer object may reside * in. The arcs represent the playback control operations that drive the object - * state transition. There are two types of arcs. The arcs with a single arrow + * state transition. There are two types of arcs. The arcs with a single arrow * head represent synchronous method calls, while those with * a double arrow head represent asynchronous method calls.

* @@ -69,42 +69,42 @@ import java.lang.ref.WeakReference; *

From this state diagram, one can see that a MediaPlayer object has the * following states:

*
    - *
  • When a MediaPlayer object is just created using new or - * after {@link #reset()} is called, it is in the Idle state; and after - * {@link #release()} is called, it is in the End state. Between these - * two states is the life cycle of the MediaPlayer object. + *
  • When a MediaPlayer object is just created using new or + * after {@link #reset()} is called, it is in the Idle state; and after + * {@link #release()} is called, it is in the End state. Between these + * two states is the life cycle of the MediaPlayer object. *
      - *
    • There is a subtle but important difference between a newly constructed - * MediaPlayer object and the MediaPlayer object after {@link #reset()} - * is called. It is a programming error to invoke methods such - * as {@link #getCurrentPosition()}, - * {@link #getDuration()}, {@link #getVideoHeight()}, + *
    • There is a subtle but important difference between a newly constructed + * MediaPlayer object and the MediaPlayer object after {@link #reset()} + * is called. It is a programming error to invoke methods such + * as {@link #getCurrentPosition()}, + * {@link #getDuration()}, {@link #getVideoHeight()}, * {@link #getVideoWidth()}, {@link #setAudioStreamType(int)}, * {@link #setLooping(boolean)}, - * {@link #setVolume(float, float)}, {@link #pause()}, {@link #start()}, - * {@link #stop()}, {@link #seekTo(int)}, {@link #prepare()} or - * {@link #prepareAsync()} in the Idle state for both cases. If any of these - * methods is called right after a MediaPlayer object is constructed, - * the user supplied callback method OnErrorListener.onError() won't be + * {@link #setVolume(float, float)}, {@link #pause()}, {@link #start()}, + * {@link #stop()}, {@link #seekTo(int)}, {@link #prepare()} or + * {@link #prepareAsync()} in the Idle state for both cases. If any of these + * methods is called right after a MediaPlayer object is constructed, + * the user supplied callback method OnErrorListener.onError() won't be * called by the internal player engine and the object state remains - * unchanged; but if these methods are called right after {@link #reset()}, + * unchanged; but if these methods are called right after {@link #reset()}, * the user supplied callback method OnErrorListener.onError() will be - * invoked by the internal player engine and the object will be + * invoked by the internal player engine and the object will be * transfered to the Error state.
    • - *
    • It is also recommended that once - * a MediaPlayer object is no longer being used, call {@link #release()} immediately - * so that resources used by the internal player engine associated with the + *
    • It is also recommended that once + * a MediaPlayer object is no longer being used, call {@link #release()} immediately + * so that resources used by the internal player engine associated with the * MediaPlayer object can be released immediately. Resource may include - * singleton resources such as hardware acceleration components and + * singleton resources such as hardware acceleration components and * failure to call {@link #release()} may cause subsequent instances of * MediaPlayer objects to fallback to software implementations or fail * altogether. Once the MediaPlayer - * object is in the End state, it can no longer be used and + * object is in the End state, it can no longer be used and * there is no way to bring it back to any other state.
    • - *
    • Furthermore, - * the MediaPlayer objects created using new is in the - * Idle state, while those created with one - * of the overloaded convenient create methods are NOT + *
    • Furthermore, + * the MediaPlayer objects created using new is in the + * Idle state, while those created with one + * of the overloaded convenient create methods are NOT * in the Idle state. In fact, the objects are in the Prepared * state if the creation using create method is successful. *
    • @@ -114,23 +114,23 @@ import java.lang.ref.WeakReference; * reasons, such as unsupported audio/video format, poorly interleaved * audio/video, resolution too high, streaming timeout, and the like. * Thus, error reporting and recovery is an important concern under - * these circumstances. Sometimes, due to programming errors, invoking a playback + * these circumstances. Sometimes, due to programming errors, invoking a playback * control operation in an invalid state may also occur. Under all these * error conditions, the internal player engine invokes a user supplied * OnErrorListener.onError() method if an OnErrorListener has been * registered beforehand via * {@link #setOnErrorListener(android.media.MediaPlayer.OnErrorListener)}. *
        - *
      • It is important to note that once an error occurs, the - * MediaPlayer object enters the Error state (except as noted + *
      • It is important to note that once an error occurs, the + * MediaPlayer object enters the Error state (except as noted * above), even if an error listener has not been registered by the application.
      • *
      • In order to reuse a MediaPlayer object that is in the - * Error state and recover from the error, + * Error state and recover from the error, * {@link #reset()} can be called to restore the object to its Idle * state.
      • - *
      • It is good programming practice to have your application - * register a OnErrorListener to look out for error notifications from - * the internal player engine.
      • + *
      • It is good programming practice to have your application + * register a OnErrorListener to look out for error notifications from + * the internal player engine.
      • *
      • IlleglStateException is * thrown to prevent programming errors such as calling {@link #prepare()}, * {@link #prepareAsync()}, or one of the overloaded setDataSource @@ -141,28 +141,28 @@ import java.lang.ref.WeakReference; * {@link #setDataSource(FileDescriptor)}, or * {@link #setDataSource(String)}, or * {@link #setDataSource(Context, Uri)}, or - * {@link #setDataSource(FileDescriptor, long, long)} transfers a + * {@link #setDataSource(FileDescriptor, long, long)} transfers a * MediaPlayer object in the Idle state to the * Initialized state. *
          - *
        • An IllegalStateException is thrown if + *
        • An IllegalStateException is thrown if * setDataSource() is called in any other state.
        • - *
        • It is good programming - * practice to always look out for IllegalArgumentException + *
        • It is good programming + * practice to always look out for IllegalArgumentException * and IOException that may be thrown from the overloaded * setDataSource methods.
        • *
        *
      • *
      • A MediaPlayer object must first enter the Prepared state - * before playback can be started. + * before playback can be started. *
          *
        • There are two ways (synchronous vs. * asynchronous) that the Prepared state can be reached: * either a call to {@link #prepare()} (synchronous) which * transfers the object to the Prepared state once the method call * returns, or a call to {@link #prepareAsync()} (asynchronous) which - * first transfers the object to the Preparing state after the - * call returns (which occurs almost right way) while the internal + * first transfers the object to the Preparing state after the + * call returns (which occurs almost right way) while the internal * player engine continues working on the rest of preparation work * until the preparation work completes. When the preparation completes or when {@link #prepare()} call returns, * the internal player engine then calls a user supplied callback method, @@ -173,22 +173,22 @@ import java.lang.ref.WeakReference; * the Preparing state is a transient state, and the behavior * of calling any method with side effect while a MediaPlayer object is * in the Preparing state is undefined.
        • - *
        • An IllegalStateException is - * thrown if {@link #prepare()} or {@link #prepareAsync()} is called in - * any other state.
        • - *
        • While in the Prepared state, properties - * such as audio/sound volume, screenOnWhilePlaying, looping can be + *
        • An IllegalStateException is + * thrown if {@link #prepare()} or {@link #prepareAsync()} is called in + * any other state.
        • + *
        • While in the Prepared state, properties + * such as audio/sound volume, screenOnWhilePlaying, looping can be * adjusted by invoking the corresponding set methods.
        • *
        *
      • - *
      • To start the playback, {@link #start()} must be called. After + *
      • To start the playback, {@link #start()} must be called. After * {@link #start()} returns successfully, the MediaPlayer object is in the - * Started state. {@link #isPlaying()} can be called to test + * Started state. {@link #isPlaying()} can be called to test * whether the MediaPlayer object is in the Started state. *
          *
        • While in the Started state, the internal player engine calls * a user supplied OnBufferingUpdateListener.onBufferingUpdate() callback - * method if a OnBufferingUpdateListener has been registered beforehand + * method if a OnBufferingUpdateListener has been registered beforehand * via {@link #setOnBufferingUpdateListener(OnBufferingUpdateListener)}. * This callback allows applications to keep track of the buffering status * while streaming audio/video.
        • @@ -197,44 +197,44 @@ import java.lang.ref.WeakReference; *
        *
      • *
      • Playback can be paused and stopped, and the current playback position - * can be adjusted. Playback can be paused via {@link #pause()}. When the call to + * can be adjusted. Playback can be paused via {@link #pause()}. When the call to * {@link #pause()} returns, the MediaPlayer object enters the - * Paused state. Note that the transition from the Started - * state to the Paused state and vice versa happens - * asynchronously in the player engine. It may take some time before - * the state is updated in calls to {@link #isPlaying()}, and it can be + * Paused state. Note that the transition from the Started + * state to the Paused state and vice versa happens + * asynchronously in the player engine. It may take some time before + * the state is updated in calls to {@link #isPlaying()}, and it can be * a number of seconds in the case of streamed content. *
          - *
        • Calling {@link #start()} to resume playback for a paused + *
        • Calling {@link #start()} to resume playback for a paused * MediaPlayer object, and the resumed playback - * position is the same as where it was paused. When the call to + * position is the same as where it was paused. When the call to * {@link #start()} returns, the paused MediaPlayer object goes back to * the Started state.
        • *
        • Calling {@link #pause()} has no effect on * a MediaPlayer object that is already in the Paused state.
        • *
        *
      • - *
      • Calling {@link #stop()} stops playback and causes a + *
      • Calling {@link #stop()} stops playback and causes a * MediaPlayer in the Started, Paused, Prepared - * or PlaybackCompleted state to enter the + * or PlaybackCompleted state to enter the * Stopped state. *
          - *
        • Once in the Stopped state, playback cannot be started + *
        • Once in the Stopped state, playback cannot be started * until {@link #prepare()} or {@link #prepareAsync()} are called to set * the MediaPlayer object to the Prepared state again.
        • - *
        • Calling {@link #stop()} has no effect on a MediaPlayer + *
        • Calling {@link #stop()} has no effect on a MediaPlayer * object that is already in the Stopped state.
        • *
        *
      • - *
      • The playback position can be adjusted with a call to - * {@link #seekTo(int)}. + *
      • The playback position can be adjusted with a call to + * {@link #seekTo(int)}. *
          *
        • Although the asynchronuous {@link #seekTo(int)} * call returns right way, the actual seek operation may take a while to - * finish, especially for audio/video being streamed. When the actual - * seek operation completes, the internal player engine calls a user + * finish, especially for audio/video being streamed. When the actual + * seek operation completes, the internal player engine calls a user * supplied OnSeekComplete.onSeekComplete() if an OnSeekCompleteListener - * has been registered beforehand via + * has been registered beforehand via * {@link #setOnSeekCompleteListener(OnSeekCompleteListener)}.
        • *
        • Please * note that {@link #seekTo(int)} can also be called in the other states, @@ -242,7 +242,7 @@ import java.lang.ref.WeakReference; * state.
        • *
        • Furthermore, the actual current playback position * can be retrieved with a call to {@link #getCurrentPosition()}, which - * is helpful for applications such as a Music player that need to keep + * is helpful for applications such as a Music player that need to keep * track of the playback progress.
        • *
        *
      • @@ -272,7 +272,7 @@ import java.lang.ref.WeakReference; * Invalid States

        * Comments

        * getCurrentPosition

        - * {Idle, Initialized, Prepared, Started, Paused, Stopped, + * {Idle, Initialized, Prepared, Started, Paused, Stopped, * PlaybackCompleted}

        * {Error}

        * Successful invoke of this method in a valid state does not change the @@ -282,45 +282,45 @@ import java.lang.ref.WeakReference; * {Prepared, Started, Paused, Stopped, PlaybackCompleted}

        * {Idle, Initialized, Error}

        * Successful invoke of this method in a valid state does not change the - * state. Calling this method in an invalid state transfers the object + * state. Calling this method in an invalid state transfers the object * to the Error state.

        * getVideoHeight

        - * {Idle, Initialized, Prepared, Started, Paused, Stopped, + * {Idle, Initialized, Prepared, Started, Paused, Stopped, * PlaybackCompleted}

        * {Error}

        * Successful invoke of this method in a valid state does not change the - * state. Calling this method in an invalid state transfers the object + * state. Calling this method in an invalid state transfers the object * to the Error state.

        * getVideoWidth

        * {Idle, Initialized, Prepared, Started, Paused, Stopped, * PlaybackCompleted}

        * {Error}

        - * Successful invoke of this method in a valid state does not change - * the state. Calling this method in an invalid state transfers the + * Successful invoke of this method in a valid state does not change + * the state. Calling this method in an invalid state transfers the * object to the Error state.

        * isPlaying

        - * {Idle, Initialized, Prepared, Started, Paused, Stopped, + * {Idle, Initialized, Prepared, Started, Paused, Stopped, * PlaybackCompleted}

        * {Error}

        * Successful invoke of this method in a valid state does not change - * the state. Calling this method in an invalid state transfers the + * the state. Calling this method in an invalid state transfers the * object to the Error state.

        * pause

        * {Started, Paused}

        * {Idle, Initialized, Prepared, Stopped, PlaybackCompleted, Error}

        - * Successful invoke of this method in a valid state transfers the - * object to the Paused state. Calling this method in an + * Successful invoke of this method in a valid state transfers the + * object to the Paused state. Calling this method in an * invalid state transfers the object to the Error state.

        * prepare

        * {Initialized, Stopped}

        * {Idle, Prepared, Started, Paused, PlaybackCompleted, Error}

        - * Successful invoke of this method in a valid state transfers the - * object to the Prepared state. Calling this method in an + * Successful invoke of this method in a valid state transfers the + * object to the Prepared state. Calling this method in an * invalid state throws an IllegalStateException.

        * prepareAsync

        * {Initialized, Stopped}

        * {Idle, Prepared, Started, Paused, PlaybackCompleted, Error}

        - * Successful invoke of this method in a valid state transfers the + * Successful invoke of this method in a valid state transfers the * object to the Preparing state. Calling this method in an * invalid state throws an IllegalStateException.

        * release

        @@ -328,18 +328,18 @@ import java.lang.ref.WeakReference; * {}

        * After {@link #release()}, the object is no longer available.

        * reset

        - * {Idle, Initialized, Prepared, Started, Paused, Stopped, + * {Idle, Initialized, Prepared, Started, Paused, Stopped, * PlaybackCompleted, Error}

        * {}

        * After {@link #reset()}, the object is like being just created.

        * seekTo

        * {Prepared, Started, Paused, PlaybackCompleted}

        * {Idle, Initialized, Stopped, Error}

        - * Successful invoke of this method in a valid state does not change - * the state. Calling this method in an invalid state transfers the + * Successful invoke of this method in a valid state does not change + * the state. Calling this method in an invalid state transfers the * object to the Error state.

        * setAudioStreamType

        - * {Idle, Initialized, Stopped, Prepared, Started, Paused, + * {Idle, Initialized, Stopped, Prepared, Started, Paused, * PlaybackCompleted}

        * {Error}

        * Successful invoke of this method does not change the state.

        @@ -347,8 +347,8 @@ import java.lang.ref.WeakReference; * {Idle}

        * {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, * Error}

        - * Successful invoke of this method in a valid state transfers the - * object to the Initialized state. Calling this method in an + * Successful invoke of this method in a valid state transfers the + * object to the Initialized state. Calling this method in an * invalid state throws an IllegalStateException.

        * setDisplay

        * any

        @@ -356,11 +356,11 @@ import java.lang.ref.WeakReference; * This method can be called in any state and calling it does not change * the object state.

        * setLooping

        - * {Idle, Initialized, Stopped, Prepared, Started, Paused, + * {Idle, Initialized, Stopped, Prepared, Started, Paused, * PlaybackCompleted}

        * {Error}

        - * Successful invoke of this method in a valid state does not change - * the state. Calling this method in an + * Successful invoke of this method in a valid state does not change + * the state. Calling this method in an * invalid state transfers the object to the Error state.

        * isLooping

        * any

        @@ -398,7 +398,7 @@ import java.lang.ref.WeakReference; * This method can be called in any state and calling it does not change * the object state.

        * setVolume

        - * {Idle, Initialized, Stopped, Prepared, Started, Paused, + * {Idle, Initialized, Stopped, Prepared, Started, Paused, * PlaybackCompleted}

        * {Error}

        * Successful invoke of this method does not change the state. @@ -410,14 +410,14 @@ import java.lang.ref.WeakReference; * start

        * {Prepared, Started, Paused, PlaybackCompleted}

        * {Idle, Initialized, Stopped, Error}

        - * Successful invoke of this method in a valid state transfers the - * object to the Started state. Calling this method in an + * Successful invoke of this method in a valid state transfers the + * object to the Started state. Calling this method in an * invalid state transfers the object to the Error state.

        * stop

        * {Prepared, Started, Stopped, Paused, PlaybackCompleted}

        * {Idle, Initialized, Error}

        - * Successful invoke of this method in a valid state transfers the - * object to the Stopped state. Calling this method in an + * Successful invoke of this method in a valid state transfers the + * object to the Stopped state. Calling this method in an * invalid state transfers the object to the Error state.

        * * @@ -429,13 +429,13 @@ import java.lang.ref.WeakReference; * */ public class MediaPlayer -{ +{ static { System.loadLibrary("media_jni"); } - + private final static String TAG = "MediaPlayer"; - + private int mNativeContext; // accessed by native methods private int mListenerContext; // accessed by native methods private Surface mSurface; // accessed by native methods @@ -444,16 +444,16 @@ public class MediaPlayer private PowerManager.WakeLock mWakeLock = null; private boolean mScreenOnWhilePlaying; private boolean mStayAwake; - + /** - * Default constructor. Consider using one of the create() methods for + * Default constructor. Consider using one of the create() methods for * synchronously instantiating a MediaPlayer from a Uri or resource. *

        When done with the MediaPlayer, you should call {@link #release()}, * to free the resources. If not released, too many MediaPlayer instances may * result in an exception.

        */ public MediaPlayer() { - + Looper looper; if ((looper = Looper.myLooper()) != null) { mEventHandler = new EventHandler(this, looper); @@ -473,12 +473,12 @@ public class MediaPlayer * Update the MediaPlayer ISurface. Call after updating mSurface. */ private native void _setVideoSurface(); - + /** * Sets the SurfaceHolder to use for displaying the video portion of the media. * This call is optional. Not calling it when playing back a video will * result in only the audio track being played. - * + * * @param sh the SurfaceHolder to use for video display */ public void setDisplay(SurfaceHolder sh) { @@ -498,29 +498,29 @@ public class MediaPlayer *

        When done with the MediaPlayer, you should call {@link #release()}, * to free the resources. If not released, too many MediaPlayer instances will * result in an exception.

        - * - * @param context the Context to use + * + * @param context the Context to use * @param uri the Uri from which to get the datasource * @return a MediaPlayer object, or null if creation failed */ public static MediaPlayer create(Context context, Uri uri) { return create (context, uri, null); } - + /** * Convenience method to create a MediaPlayer for a given Uri. * On success, {@link #prepare()} will already have been called and must not be called again. *

        When done with the MediaPlayer, you should call {@link #release()}, * to free the resources. If not released, too many MediaPlayer instances will * result in an exception.

        - * - * @param context the Context to use + * + * @param context the Context to use * @param uri the Uri from which to get the datasource * @param holder the SurfaceHolder to use for displaying the video * @return a MediaPlayer object, or null if creation failed */ public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder) { - + try { MediaPlayer mp = new MediaPlayer(); mp.setDataSource(context, uri); @@ -549,9 +549,9 @@ public class MediaPlayer *

        When done with the MediaPlayer, you should call {@link #release()}, * to free the resources. If not released, too many MediaPlayer instances will * result in an exception.

        - * - * @param context the Context to use - * @param resid the raw resource id (R.raw.<something>) for + * + * @param context the Context to use + * @param resid the raw resource id (R.raw.<something>) for * the resource to use as the datasource * @return a MediaPlayer object, or null if creation failed */ @@ -577,17 +577,17 @@ public class MediaPlayer } return null; } - + /** * Sets the data source as a content Uri. - * + * * @param context the Context to use when resolving the Uri * @param uri the Content URI of the data you want to play * @throws IllegalStateException if it is called in an invalid state */ public void setDataSource(Context context, Uri uri) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { - + String scheme = uri.getScheme(); if(scheme == null || scheme.equals("file")) { setDataSource(uri.getPath()); @@ -624,7 +624,7 @@ public class MediaPlayer /** * Sets the data source (file-path or http/rtsp URL) to use. - * + * * @param path the path of the file, or the http/rtsp URL of the stream you want to play * @throws IllegalStateException if it is called in an invalid state */ @@ -633,57 +633,57 @@ public class MediaPlayer /** * Sets the data source (FileDescriptor) to use. It is the caller's responsibility * to close the file descriptor. It is safe to do so as soon as this call returns. - * + * * @param fd the FileDescriptor for the file you want to play * @throws IllegalStateException if it is called in an invalid state */ - public void setDataSource(FileDescriptor fd) + public void setDataSource(FileDescriptor fd) throws IOException, IllegalArgumentException, IllegalStateException { // intentionally less than LONG_MAX setDataSource(fd, 0, 0x7ffffffffffffffL); } - + /** * Sets the data source (FileDescriptor) to use. It is the caller's responsibility * to close the file descriptor. It is safe to do so as soon as this call returns. - * + * * @param fd the FileDescriptor for the file you want to play * @param offset the offset into the file where the data to be played starts, in bytes * @param length the length in bytes of the data to be played * @throws IllegalStateException if it is called in an invalid state */ - public native void setDataSource(FileDescriptor fd, long offset, long length) + public native void setDataSource(FileDescriptor fd, long offset, long length) throws IOException, IllegalArgumentException, IllegalStateException; /** * Prepares the player for playback, synchronously. - * + * * After setting the datasource and the display surface, you need to either * call prepare() or prepareAsync(). For files, it is OK to call prepare(), * which blocks until MediaPlayer is ready for playback. - * + * * @throws IllegalStateException if it is called in an invalid state */ public native void prepare() throws IOException, IllegalStateException; - + /** * Prepares the player for playback, asynchronously. - * + * * After setting the datasource and the display surface, you need to either * call prepare() or prepareAsync(). For streams, you should call prepareAsync(), * which returns immediately, rather than blocking until enough data has been * buffered. - * + * * @throws IllegalStateException if it is called in an invalid state */ public native void prepareAsync() throws IllegalStateException; - + /** * Starts or resumes playback. If playback had previously been paused, * playback will continue from where it was paused. If playback had * been stopped, or never started before, playback will start at the * beginning. - * + * * @throws IllegalStateException if it is called in an invalid state */ public void start() throws IllegalStateException { @@ -692,10 +692,10 @@ public class MediaPlayer } private native void _start() throws IllegalStateException; - + /** - * Stops playback after playback has been stopped or paused. - * + * Stops playback after playback has been stopped or paused. + * * @throws IllegalStateException if the internal player engine has not been * initialized. */ @@ -705,10 +705,10 @@ public class MediaPlayer } private native void _stop() throws IllegalStateException; - + /** * Pauses playback. Call start() to resume. - * + * * @throws IllegalStateException if the internal player engine has not been * initialized. */ @@ -718,20 +718,20 @@ public class MediaPlayer } private native void _pause() throws IllegalStateException; - + /** * Set the low-level power management behavior for this MediaPlayer. This * can be used when the MediaPlayer is not playing through a SurfaceHolder * set with {@link #setDisplay(SurfaceHolder)} and thus can use the * high-level {@link #setScreenOnWhilePlaying(boolean)} feature. - * + * *

        This function has the MediaPlayer access the low-level power manager * service to control the device's power usage while playing is occurring. * The parameter is a combination of {@link android.os.PowerManager} wake flags. * Use of this method requires {@link android.Manifest.permission#WAKE_LOCK} * permission. * By default, no attempt is made to keep the device awake during playback. - * + * * @param context the Context to use * @param mode the power/wake mode to set * @see android.os.PowerManager @@ -753,14 +753,14 @@ public class MediaPlayer mWakeLock.acquire(); } } - + /** * Control whether we should use the attached SurfaceHolder to keep the * screen on while video playback is occurring. This is the preferred * method over {@link #setWakeMode} where possible, since it doesn't * require that the application have permission for low-level wake lock * access. - * + * * @param screenOn Supply true to keep the screen on, false to allow it * to turn off. */ @@ -770,7 +770,7 @@ public class MediaPlayer updateSurfaceScreenOn(); } } - + private void stayAwake(boolean awake) { if (mWakeLock != null) { if (awake && !mWakeLock.isHeld()) { @@ -782,61 +782,61 @@ public class MediaPlayer mStayAwake = awake; updateSurfaceScreenOn(); } - + private void updateSurfaceScreenOn() { if (mSurfaceHolder != null) { mSurfaceHolder.setKeepScreenOn(mScreenOnWhilePlaying && mStayAwake); } } - + /** * Returns the width of the video. - * + * * @return the width of the video, or 0 if there is no video, * no display surface was set, or prepare()/prepareAsync() * have not completed yet */ public native int getVideoWidth(); - + /** * Returns the height of the video. - * + * * @return the height of the video, or 0 if there is no video, * no display surface was set, or prepare()/prepareAsync() * have not completed yet */ public native int getVideoHeight(); - + /** * Checks whether the MediaPlayer is playing. - * + * * @return true if currently playing, false otherwise */ public native boolean isPlaying(); - + /** * Seeks to specified time position. - * + * * @param msec the offset in milliseconds from the start to seek to * @throws IllegalStateException if the internal player engine has not been * initialized */ public native void seekTo(int msec) throws IllegalStateException; - + /** * Gets the current playback position. - * + * * @return the current position in milliseconds */ public native int getCurrentPosition(); - + /** * Gets the duration of the file. - * + * * @return the duration in milliseconds */ public native int getDuration(); - + /** * Releases resources associated with this MediaPlayer object. * It is considered good practice to call this method when you're @@ -856,7 +856,7 @@ public class MediaPlayer } private native void _release(); - + /** * Resets the MediaPlayer to its uninitialized state. After calling * this method, you will have to initialize it again by setting the @@ -868,13 +868,13 @@ public class MediaPlayer // make sure none of the listeners get called anymore mEventHandler.removeCallbacksAndMessages(null); } - + private native void _reset(); - + /** * Sets the audio stream type for this MediaPlayer. See {@link AudioManager} * for a list of stream types. - * + * * @param streamtype the audio stream type * @see android.media.AudioManager */ @@ -882,20 +882,20 @@ public class MediaPlayer /** * Sets the player to be looping or non-looping. - * + * * @param looping whether to loop or not */ public native void setLooping(boolean looping); /** * Checks whether the MediaPlayer is looping or non-looping. - * + * * @return true if the MediaPlayer is currently looping, false otherwise */ public native boolean isLooping(); /** - * Sets the volume on this player. + * Sets the volume on this player. * This API is recommended for balancing the output of audio streams * within an application. Unless you are writing an application to * control user settings, this API should be used in preference to @@ -914,7 +914,7 @@ public class MediaPlayer * @hide */ public native Bitmap getFrameAt(int msec) throws IllegalStateException; - + private native final void native_setup(Object mediaplayer_this); private native final void native_finalize(); @Override @@ -1037,7 +1037,7 @@ public class MediaPlayer { /** * Called when the media file is ready for playback. - * + * * @param mp the MediaPlayer that is ready for playback */ void onPrepared(MediaPlayer mp); @@ -1064,7 +1064,7 @@ public class MediaPlayer { /** * Called when the end of a media source is reached during playback. - * + * * @param mp the MediaPlayer that reached the end of the file */ void onCompletion(MediaPlayer mp); @@ -1091,14 +1091,14 @@ public class MediaPlayer { /** * Called to update status in buffering a media stream. - * + * * @param mp the MediaPlayer the update pertains to * @param percent the percentage (0-100) of the buffer * that has been filled thus far */ void onBufferingUpdate(MediaPlayer mp, int percent); } - + /** * Register a callback to be invoked when the status of a network * stream's buffer has changed. @@ -1111,7 +1111,7 @@ public class MediaPlayer } private OnBufferingUpdateListener mOnBufferingUpdateListener; - + /** * Interface definition of a callback to be invoked indicating * the completion of a seek operation. @@ -1120,23 +1120,23 @@ public class MediaPlayer { /** * Called to indicate the completion of a seek operation. - * + * * @param mp the MediaPlayer that issued the seek operation */ public void onSeekComplete(MediaPlayer mp); } - + /** * Register a callback to be invoked when a seek operation has been * completed. - * + * * @param listener the callback that will be run */ public void setOnSeekCompleteListener(OnSeekCompleteListener listener) { mOnSeekCompleteListener = listener; } - + private OnSeekCompleteListener mOnSeekCompleteListener; /** @@ -1147,25 +1147,25 @@ public class MediaPlayer { /** * Called to indicate the video size - * + * * @param mp the MediaPlayer associated with this callback * @param width the width of the video * @param height the height of the video */ public void onVideoSizeChanged(MediaPlayer mp, int width, int height); } - + /** * Register a callback to be invoked when the video size is * known or updated. - * + * * @param listener the callback that will be run */ public void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener) { mOnVideoSizeChangedListener = listener; } - + private OnVideoSizeChangedListener mOnVideoSizeChangedListener; /* Do not change these values without updating their counterparts @@ -1177,11 +1177,11 @@ public class MediaPlayer public static final int MEDIA_ERROR_UNKNOWN = 1; /** Media server died. In this case, the application must release the - * MediaPlayer object and instantiate a new one. + * MediaPlayer object and instantiate a new one. * @see android.media.MediaPlayer.OnErrorListener */ public static final int MEDIA_ERROR_SERVER_DIED = 100; - + /** The video is streamed and its container is not valid for progressive * playback i.e the video's index (e.g moov atom) is not at the start of the * file. @@ -1198,7 +1198,7 @@ public class MediaPlayer { /** * Called to indicate an error. - * + * * @param mp the MediaPlayer the error pertains to * @param what the type of error that has occurred: *

          @@ -1213,11 +1213,11 @@ public class MediaPlayer */ boolean onError(MediaPlayer mp, int what, int extra); } - + /** * Register a callback to be invoked when an error has happened * during an asynchronous operation. - * + * * @param listener the callback that will be run */ public void setOnErrorListener(OnErrorListener listener) @@ -1262,7 +1262,7 @@ public class MediaPlayer { /** * Called to indicate an info or a warning. - * + * * @param mp the MediaPlayer the info pertains to. * @param what the type of info or warning. *
            @@ -1282,7 +1282,7 @@ public class MediaPlayer /** * Register a callback to be invoked when an info/warning is available. - * + * * @param listener the callback that will be run */ public void setOnInfoListener(OnInfoListener listener) diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 5abe451ca135c..6317fe21b702a 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -125,8 +125,8 @@ static sp setMediaPlayer(JNIEnv* env, jobject thiz, const sp& mp, JNIEnv *env, jobject thiz jobject surface = env->GetObjectField(thiz, fields.surface); if (surface != NULL) { const sp& native_surface = get_surface(env, surface); - LOGV("prepare: surface=%p (id=%d)", + LOGV("prepare: surface=%p (id=%d)", native_surface.get(), native_surface->ID()); mp->setVideoSurface(native_surface); } @@ -243,7 +243,7 @@ android_media_MediaPlayer_prepareAsync(JNIEnv *env, jobject thiz) jobject surface = env->GetObjectField(thiz, fields.surface); if (surface != NULL) { const sp& native_surface = get_surface(env, surface); - LOGV("prepareAsync: surface=%p (id=%d)", + LOGV("prepareAsync: surface=%p (id=%d)", native_surface.get(), native_surface->ID()); mp->setVideoSurface(native_surface); } @@ -271,7 +271,7 @@ android_media_MediaPlayer_stop(JNIEnv *env, jobject thiz) jniThrowException(env, "java/lang/IllegalStateException", NULL); return; } - process_media_player_call( env, thiz, mp->stop(), NULL, NULL ); + process_media_player_call( env, thiz, mp->stop(), NULL, NULL ); } static void diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp index 370e3fbe778b8..01cdb6cf808f8 100644 --- a/media/libmedia/IMediaPlayerService.cpp +++ b/media/libmedia/IMediaPlayerService.cpp @@ -195,4 +195,3 @@ status_t BnMediaPlayerService::onTransact( // ---------------------------------------------------------------------------- }; // namespace android - diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index 809316a9f7b96..24e3e6f23432a 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -503,7 +503,7 @@ void MediaPlayer::notify(int msg, int ext1, int ext2) // TODO: In the future, we might be on the same thread if the app is // running in the same process as the media server. In that case, // this will deadlock. - // + // // The threadId hack below works around this for the care of prepare // and seekTo within the same process. // FIXME: Remember, this is a hack, it's not even a hack that is applied @@ -511,7 +511,7 @@ void MediaPlayer::notify(int msg, int ext1, int ext2) if (mLockThreadId != getThreadId()) { mLock.lock(); locked = true; - } + } if (mPlayer == 0) { LOGV("notify(%d, %d, %d) callback on disconnected mediaplayer", msg, ext1, ext2);