diff options
author | Glenn Kasten <gkasten@google.com> | 2011-02-08 17:26:17 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2011-02-23 15:02:56 -0800 |
commit | 1173118eace0e9e347cb007f0da817cee87579ed (patch) | |
tree | d2d23b2120010097d1edda29cd0adffd938105c3 /media/libstagefright/colorconversion/SoftwareRenderer.cpp | |
parent | f7f3e824a8cb2b38355db8e4f99e43b90ee71ce4 (diff) | |
download | frameworks_av-1173118eace0e9e347cb007f0da817cee87579ed.zip frameworks_av-1173118eace0e9e347cb007f0da817cee87579ed.tar.gz frameworks_av-1173118eace0e9e347cb007f0da817cee87579ed.tar.bz2 |
Bug 3438258 Add SurfaceTexture as MediaPlayer sink
This change enables the use of a SurfaceTexture in place of a Surface
as the video sink for an android.media.MediaPlayer. The new API
MediaPlayer.setTexture is currently hidden.
This includes:
- New Java and C++ interfaces
- C++ plumbing and implementation (JNI, Binder)
- Stagefright AwesomePlayer and NuPlayer use ANativeWindow
(either Surface or SurfaceTextureClient)
Change-Id: I2b568bee143d9eaf3dfc6cc4533c1bebbd5afc51
Diffstat (limited to 'media/libstagefright/colorconversion/SoftwareRenderer.cpp')
-rw-r--r-- | media/libstagefright/colorconversion/SoftwareRenderer.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp index 70408d7..31afc43 100644 --- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp +++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp @@ -26,14 +26,15 @@ #include <surfaceflinger/Surface.h> #include <ui/android_native_buffer.h> #include <ui/GraphicBufferMapper.h> +#include <gui/ISurfaceTexture.h> namespace android { SoftwareRenderer::SoftwareRenderer( - const sp<Surface> &surface, const sp<MetaData> &meta) + const sp<ANativeWindow> &nativeWindow, const sp<MetaData> &meta) : mConverter(NULL), mYUVMode(None), - mSurface(surface) { + mNativeWindow(nativeWindow) { int32_t tmp; CHECK(meta->findInt32(kKeyColorFormat, &tmp)); mColorFormat = (OMX_COLOR_FORMATTYPE)tmp; @@ -65,22 +66,22 @@ SoftwareRenderer::SoftwareRenderer( break; } - CHECK(mSurface.get() != NULL); + CHECK(mNativeWindow != NULL); CHECK(mWidth > 0); CHECK(mHeight > 0); CHECK(mConverter == NULL || mConverter->isValid()); CHECK_EQ(0, native_window_set_usage( - mSurface.get(), + mNativeWindow.get(), GRALLOC_USAGE_SW_READ_NEVER | GRALLOC_USAGE_SW_WRITE_OFTEN | GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_EXTERNAL_DISP)); - CHECK_EQ(0, native_window_set_buffer_count(mSurface.get(), 2)); + CHECK_EQ(0, native_window_set_buffer_count(mNativeWindow.get(), 2)); // Width must be multiple of 32??? CHECK_EQ(0, native_window_set_buffers_geometry( - mSurface.get(), + mNativeWindow.get(), mCropRight - mCropLeft + 1, mCropBottom - mCropTop + 1, halFormat)); @@ -96,7 +97,7 @@ SoftwareRenderer::SoftwareRenderer( if (transform) { CHECK_EQ(0, native_window_set_buffers_transform( - mSurface.get(), transform)); + mNativeWindow.get(), transform)); } } @@ -109,12 +110,12 @@ void SoftwareRenderer::render( const void *data, size_t size, void *platformPrivate) { android_native_buffer_t *buf; int err; - if ((err = mSurface->dequeueBuffer(mSurface.get(), &buf)) != 0) { + if ((err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf)) != 0) { LOGW("Surface::dequeueBuffer returned error %d", err); return; } - CHECK_EQ(0, mSurface->lockBuffer(mSurface.get(), buf)); + CHECK_EQ(0, mNativeWindow->lockBuffer(mNativeWindow.get(), buf)); GraphicBufferMapper &mapper = GraphicBufferMapper::get(); @@ -140,7 +141,7 @@ void SoftwareRenderer::render( CHECK_EQ(0, mapper.unlock(buf->handle)); - if ((err = mSurface->queueBuffer(mSurface.get(), buf)) != 0) { + if ((err = mNativeWindow->queueBuffer(mNativeWindow.get(), buf)) != 0) { LOGW("Surface::queueBuffer returned error %d", err); } buf = NULL; |