Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72feaa5d authored by Glenn Kasten's avatar Glenn Kasten Committed by Android (Google) Code Review
Browse files

Merge "Bug 3438258 Add SurfaceTexture as MediaPlayer sink"

parents e23da615 1173118e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ namespace android {
class Parcel;
class ISurface;
class Surface;
class ISurfaceTexture;

class IMediaPlayer: public IInterface
{
@@ -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;
+8 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ namespace android {
class Parcel;
class ISurface;
class Surface;
class ISurfaceTexture;

template<typename T> class SortedVector;

@@ -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;
@@ -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:
+3 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
namespace android {

class Surface;
class ISurfaceTexture;

enum media_event_type {
    MEDIA_NOP               = 0, // interface test message
@@ -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();
+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_
+2 −1
Original line number Diff line number Diff line
@@ -37,7 +37,8 @@ LOCAL_SRC_FILES:= \

LOCAL_SHARED_LIBRARIES := \
	libui libcutils libutils libbinder libsonivox libicuuc libexpat \
        libsurfaceflinger_client libcamera_client libstagefright_foundation
        libsurfaceflinger_client libcamera_client libstagefright_foundation \
        libgui

LOCAL_MODULE:= libmedia

Loading