Loading graphics/java/android/graphics/SurfaceTexture.java +6 −3 Original line number Diff line number Diff line Loading @@ -24,11 +24,12 @@ import android.os.Message; /** * Captures frames from an image stream as an OpenGL ES texture. * * <p>The image stream may come from either camera preview. A SurfaceTexture may be used in place * of a SurfaceHolder when specifying the output destination of a {@link android.hardware.Camera} * <p>The image stream may come from either camera preview or video decode. A SurfaceTexture * may be used in place of a SurfaceHolder when specifying the output destination of a * {@link android.hardware.Camera} or {@link android.media.MediaPlayer} * object. Doing so will cause all the frames from the image stream to be sent to the * SurfaceTexture object rather than to the device's display. When {@link #updateTexImage} is * called, the contents of the texture object specified when the SurfaceTexture was created is * called, the contents of the texture object specified when the SurfaceTexture was created are * updated to contain the most recent image from the image stream. This may cause some frames of * the stream to be skipped. * Loading Loading @@ -129,6 +130,8 @@ public class SurfaceTexture { * 16 elements. */ public void getTransformMatrix(float[] mtx) { // Note we intentionally don't check mtx for null, so this will result in a // NullPointerException. But it's safe because it happens before the call to native. if (mtx.length != 16) { throw new IllegalArgumentException(); } Loading include/media/IMediaPlayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ namespace android { class Parcel; class ISurface; class Surface; class ISurfaceTexture; class IMediaPlayer: public IInterface { Loading @@ -35,6 +36,8 @@ public: virtual void disconnect() = 0; virtual status_t setVideoSurface(const sp<Surface>& surface) = 0; virtual status_t setVideoSurfaceTexture( const sp<ISurfaceTexture>& surfaceTexture) = 0; virtual status_t prepareAsync() = 0; virtual status_t start() = 0; virtual status_t stop() = 0; Loading include/media/MediaPlayerInterface.h +8 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ namespace android { class Parcel; class ISurface; class Surface; class ISurfaceTexture; template<typename T> class SortedVector; Loading Loading @@ -112,7 +113,13 @@ public: return INVALID_OPERATION; } // pass the buffered Surface to the media player service virtual status_t setVideoSurface(const sp<Surface>& surface) = 0; // pass the buffered ISurfaceTexture to the media player service virtual status_t setVideoSurfaceTexture( const sp<ISurfaceTexture>& surfaceTexture) = 0; virtual status_t prepare() = 0; virtual status_t prepareAsync() = 0; virtual status_t start() = 0; Loading Loading @@ -177,7 +184,7 @@ protected: sp<AudioSink> mAudioSink; }; // Implement this class for media players that output directo to hardware // Implement this class for media players that output audio directly to hardware class MediaPlayerHWInterface : public MediaPlayerBase { public: Loading include/media/mediaplayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ namespace android { class Surface; class ISurfaceTexture; enum media_event_type { MEDIA_NOP = 0, // interface test message Loading Loading @@ -146,6 +147,8 @@ public: status_t setDataSource(int fd, int64_t offset, int64_t length); status_t setVideoSurface(const sp<Surface>& surface); status_t setVideoSurfaceTexture( const sp<ISurfaceTexture>& surfaceTexture); status_t setListener(const sp<MediaPlayerListener>& listener); status_t prepare(); status_t prepareAsync(); Loading include/media/stagefright/NativeWindowWrapper.h 0 → 100644 +62 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NATIVE_WINDOW_WRAPPER_H_ #define NATIVE_WINDOW_WRAPPER_H_ #include <surfaceflinger/Surface.h> #include <gui/SurfaceTextureClient.h> namespace android { // Both Surface and SurfaceTextureClient are RefBase that implement the // ANativeWindow interface, but at different addresses. ANativeWindow is not // a RefBase but acts like one for use with sp<>. This wrapper converts a // Surface or SurfaceTextureClient into a single reference-counted object // that holds an sp reference to the underlying Surface or SurfaceTextureClient, // It provides a method to get the ANativeWindow. struct NativeWindowWrapper : RefBase { NativeWindowWrapper( const sp<Surface> &surface) : mSurface(surface) { } NativeWindowWrapper( const sp<SurfaceTextureClient> &surfaceTextureClient) : mSurfaceTextureClient(surfaceTextureClient) { } sp<ANativeWindow> getNativeWindow() const { if (mSurface != NULL) { return mSurface; } else { return mSurfaceTextureClient; } } // If needed later we can provide a method to ask what kind of native window private: // At most one of mSurface and mSurfaceTextureClient will be non-NULL const sp<Surface> mSurface; const sp<SurfaceTextureClient> mSurfaceTextureClient; DISALLOW_EVIL_CONSTRUCTORS(NativeWindowWrapper); }; } // namespace android #endif // NATIVE_WINDOW_WRAPPER_H_ Loading
graphics/java/android/graphics/SurfaceTexture.java +6 −3 Original line number Diff line number Diff line Loading @@ -24,11 +24,12 @@ import android.os.Message; /** * Captures frames from an image stream as an OpenGL ES texture. * * <p>The image stream may come from either camera preview. A SurfaceTexture may be used in place * of a SurfaceHolder when specifying the output destination of a {@link android.hardware.Camera} * <p>The image stream may come from either camera preview or video decode. A SurfaceTexture * may be used in place of a SurfaceHolder when specifying the output destination of a * {@link android.hardware.Camera} or {@link android.media.MediaPlayer} * object. Doing so will cause all the frames from the image stream to be sent to the * SurfaceTexture object rather than to the device's display. When {@link #updateTexImage} is * called, the contents of the texture object specified when the SurfaceTexture was created is * called, the contents of the texture object specified when the SurfaceTexture was created are * updated to contain the most recent image from the image stream. This may cause some frames of * the stream to be skipped. * Loading Loading @@ -129,6 +130,8 @@ public class SurfaceTexture { * 16 elements. */ public void getTransformMatrix(float[] mtx) { // Note we intentionally don't check mtx for null, so this will result in a // NullPointerException. But it's safe because it happens before the call to native. if (mtx.length != 16) { throw new IllegalArgumentException(); } Loading
include/media/IMediaPlayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ namespace android { class Parcel; class ISurface; class Surface; class ISurfaceTexture; class IMediaPlayer: public IInterface { Loading @@ -35,6 +36,8 @@ public: virtual void disconnect() = 0; virtual status_t setVideoSurface(const sp<Surface>& surface) = 0; virtual status_t setVideoSurfaceTexture( const sp<ISurfaceTexture>& surfaceTexture) = 0; virtual status_t prepareAsync() = 0; virtual status_t start() = 0; virtual status_t stop() = 0; Loading
include/media/MediaPlayerInterface.h +8 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ namespace android { class Parcel; class ISurface; class Surface; class ISurfaceTexture; template<typename T> class SortedVector; Loading Loading @@ -112,7 +113,13 @@ public: return INVALID_OPERATION; } // pass the buffered Surface to the media player service virtual status_t setVideoSurface(const sp<Surface>& surface) = 0; // pass the buffered ISurfaceTexture to the media player service virtual status_t setVideoSurfaceTexture( const sp<ISurfaceTexture>& surfaceTexture) = 0; virtual status_t prepare() = 0; virtual status_t prepareAsync() = 0; virtual status_t start() = 0; Loading Loading @@ -177,7 +184,7 @@ protected: sp<AudioSink> mAudioSink; }; // Implement this class for media players that output directo to hardware // Implement this class for media players that output audio directly to hardware class MediaPlayerHWInterface : public MediaPlayerBase { public: Loading
include/media/mediaplayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ namespace android { class Surface; class ISurfaceTexture; enum media_event_type { MEDIA_NOP = 0, // interface test message Loading Loading @@ -146,6 +147,8 @@ public: status_t setDataSource(int fd, int64_t offset, int64_t length); status_t setVideoSurface(const sp<Surface>& surface); status_t setVideoSurfaceTexture( const sp<ISurfaceTexture>& surfaceTexture); status_t setListener(const sp<MediaPlayerListener>& listener); status_t prepare(); status_t prepareAsync(); Loading
include/media/stagefright/NativeWindowWrapper.h 0 → 100644 +62 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NATIVE_WINDOW_WRAPPER_H_ #define NATIVE_WINDOW_WRAPPER_H_ #include <surfaceflinger/Surface.h> #include <gui/SurfaceTextureClient.h> namespace android { // Both Surface and SurfaceTextureClient are RefBase that implement the // ANativeWindow interface, but at different addresses. ANativeWindow is not // a RefBase but acts like one for use with sp<>. This wrapper converts a // Surface or SurfaceTextureClient into a single reference-counted object // that holds an sp reference to the underlying Surface or SurfaceTextureClient, // It provides a method to get the ANativeWindow. struct NativeWindowWrapper : RefBase { NativeWindowWrapper( const sp<Surface> &surface) : mSurface(surface) { } NativeWindowWrapper( const sp<SurfaceTextureClient> &surfaceTextureClient) : mSurfaceTextureClient(surfaceTextureClient) { } sp<ANativeWindow> getNativeWindow() const { if (mSurface != NULL) { return mSurface; } else { return mSurfaceTextureClient; } } // If needed later we can provide a method to ask what kind of native window private: // At most one of mSurface and mSurfaceTextureClient will be non-NULL const sp<Surface> mSurface; const sp<SurfaceTextureClient> mSurfaceTextureClient; DISALLOW_EVIL_CONSTRUCTORS(NativeWindowWrapper); }; } // namespace android #endif // NATIVE_WINDOW_WRAPPER_H_