summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2009-08-07 12:01:29 -0700
committerAndreas Huber <andih@google.com>2009-08-10 12:58:05 -0700
commitccf8b94169197875af6c89172015b9644919b064 (patch)
tree8ac3af6d1e44dd5dfd37168dc635e17329c990ae
parent07cbacc11705f1f05a1150083aad000c53942dea (diff)
downloadframeworks_base-ccf8b94169197875af6c89172015b9644919b064.zip
frameworks_base-ccf8b94169197875af6c89172015b9644919b064.tar.gz
frameworks_base-ccf8b94169197875af6c89172015b9644919b064.tar.bz2
Expose a variation of the createRenderer API that works on a plain Surface.
-rw-r--r--include/media/IOMX.h11
-rw-r--r--include/ui/Surface.h4
-rw-r--r--media/libmedia/IOMX.cpp13
-rw-r--r--media/libstagefright/MediaPlayerImpl.cpp24
4 files changed, 41 insertions, 11 deletions
diff --git a/include/media/IOMX.h b/include/media/IOMX.h
index 857b2bd..7e5ff61 100644
--- a/include/media/IOMX.h
+++ b/include/media/IOMX.h
@@ -31,6 +31,7 @@ class IMemory;
class IOMXObserver;
class IOMXRenderer;
class ISurface;
+class Surface;
class IOMX : public IInterface {
public:
@@ -87,6 +88,16 @@ public:
OMX_COLOR_FORMATTYPE colorFormat,
size_t encodedWidth, size_t encodedHeight,
size_t displayWidth, size_t displayHeight) = 0;
+
+ // Note: This method is _not_ virtual, it exists as a wrapper around
+ // the virtual "createRenderer" method above facilitating extraction
+ // of the ISurface from a regular Surface.
+ sp<IOMXRenderer> createRenderer(
+ const sp<Surface> &surface,
+ const char *componentName,
+ OMX_COLOR_FORMATTYPE colorFormat,
+ size_t encodedWidth, size_t encodedHeight,
+ size_t displayWidth, size_t displayHeight);
};
struct omx_message {
diff --git a/include/ui/Surface.h b/include/ui/Surface.h
index 5665c1f..d5dad31 100644
--- a/include/ui/Surface.h
+++ b/include/ui/Surface.h
@@ -35,8 +35,8 @@ namespace android {
// ---------------------------------------------------------------------------
class BufferMapper;
+class IOMX;
class Rect;
-class MediaPlayerImpl;
class Surface;
class SurfaceComposerClient;
struct per_client_cblk_t;
@@ -181,7 +181,7 @@ private:
// mediaplayer needs access to ISurface for display
friend class MediaPlayer;
friend class Test;
- friend class MediaPlayerImpl;
+ friend class IOMX;
const sp<ISurface>& getISurface() const { return mSurface; }
status_t getBufferLocked(int index);
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp
index b0f466b..d1dbc5c 100644
--- a/media/libmedia/IOMX.cpp
+++ b/media/libmedia/IOMX.cpp
@@ -6,6 +6,7 @@
#include <binder/Parcel.h>
#include <media/IOMX.h>
#include <ui/ISurface.h>
+#include <ui/Surface.h>
namespace android {
@@ -29,6 +30,18 @@ enum {
RENDERER_RENDER,
};
+sp<IOMXRenderer> IOMX::createRenderer(
+ const sp<Surface> &surface,
+ const char *componentName,
+ OMX_COLOR_FORMATTYPE colorFormat,
+ size_t encodedWidth, size_t encodedHeight,
+ size_t displayWidth, size_t displayHeight) {
+ return createRenderer(
+ surface->getISurface(),
+ componentName, colorFormat, encodedWidth, encodedHeight,
+ displayWidth, displayHeight);
+}
+
static void *readVoidStar(const Parcel *parcel) {
// FIX if sizeof(void *) != sizeof(int32)
return (void *)parcel->readInt32();
diff --git a/media/libstagefright/MediaPlayerImpl.cpp b/media/libstagefright/MediaPlayerImpl.cpp
index 341f002..f2e62f5 100644
--- a/media/libstagefright/MediaPlayerImpl.cpp
+++ b/media/libstagefright/MediaPlayerImpl.cpp
@@ -646,15 +646,21 @@ void MediaPlayerImpl::populateISurface() {
success = success && meta->findInt32(kKeyHeight, &decodedHeight);
assert(success);
- const sp<ISurface> &isurface =
- mSurface.get() != NULL ? mSurface->getISurface() : mISurface;
-
- mVideoRenderer =
- mClient.interface()->createRenderer(
- isurface, component,
- (OMX_COLOR_FORMATTYPE)format,
- decodedWidth, decodedHeight,
- mVideoWidth, mVideoHeight);
+ if (mSurface.get() != NULL) {
+ mVideoRenderer =
+ mClient.interface()->createRenderer(
+ mSurface, component,
+ (OMX_COLOR_FORMATTYPE)format,
+ decodedWidth, decodedHeight,
+ mVideoWidth, mVideoHeight);
+ } else {
+ mVideoRenderer =
+ mClient.interface()->createRenderer(
+ mISurface, component,
+ (OMX_COLOR_FORMATTYPE)format,
+ decodedWidth, decodedHeight,
+ mVideoWidth, mVideoHeight);
+ }
}
void MediaPlayerImpl::depopulateISurface() {