The IOMX interface now instantiates IOMXRenderers to hide the details of hardware accelerated blitting.
diff --git a/include/media/IOMX.h b/include/media/IOMX.h
index 5c61c50..0010d84 100644
--- a/include/media/IOMX.h
+++ b/include/media/IOMX.h
@@ -23,6 +23,7 @@
 #include <utils/String8.h>
 
 #include <OMX_Core.h>
+#include <OMX_Video.h>
 
 #define IOMX_USES_SOCKETS       0
 
@@ -30,6 +31,8 @@
 
 class IMemory;
 class IOMXObserver;
+class IOMXRenderer;
+class ISurface;
 
 class IOMX : public IInterface {
 public:
@@ -87,6 +90,13 @@
             OMX_U32 range_offset, OMX_U32 range_length,
             OMX_U32 flags, OMX_TICKS timestamp) = 0;
 #endif
+
+    virtual sp<IOMXRenderer> createRenderer(
+            const sp<ISurface> &surface,
+            const char *componentName,
+            OMX_COLOR_FORMATTYPE colorFormat,
+            size_t encodedWidth, size_t encodedHeight,
+            size_t displayWidth, size_t displayHeight) = 0;
 };
 
 struct omx_message {
@@ -155,6 +165,13 @@
     virtual void on_message(const omx_message &msg) = 0;
 };
 
+class IOMXRenderer : public IInterface {
+public:
+    DECLARE_META_INTERFACE(OMXRenderer);
+
+    virtual void render(IOMX::buffer_id buffer) = 0;
+};
+
 ////////////////////////////////////////////////////////////////////////////////
 
 class BnOMX : public BnInterface<IOMX> {
@@ -171,6 +188,13 @@
             uint32_t flags = 0);
 };
 
+class BnOMXRenderer : public BnInterface<IOMXRenderer> {
+public:
+    virtual status_t onTransact(
+            uint32_t code, const Parcel &data, Parcel *reply,
+            uint32_t flags = 0);
+};
+
 }  // namespace android
 
 #endif  // ANDROID_IOMX_H_
diff --git a/include/media/stagefright/MediaPlayerImpl.h b/include/media/stagefright/MediaPlayerImpl.h
index c48400c..e96e5e8 100644
--- a/include/media/stagefright/MediaPlayerImpl.h
+++ b/include/media/stagefright/MediaPlayerImpl.h
@@ -28,6 +28,7 @@
 namespace android {
 
 class AudioPlayer;
+class IOMXRenderer;
 class ISurface;
 class MediaExtractor;
 class MediaBuffer;
@@ -37,7 +38,6 @@
 class OMXDecoder;
 class Surface;
 class TimeSource;
-class VideoRenderer;
 
 class MediaPlayerImpl {
 public:
@@ -93,7 +93,7 @@
 
     sp<Surface> mSurface;
     sp<ISurface> mISurface;
-    VideoRenderer *mRenderer;
+    sp<IOMXRenderer> mVideoRenderer;
 
     sp<MediaPlayerBase::AudioSink> mAudioSink;
 
diff --git a/include/media/stagefright/MetaData.h b/include/media/stagefright/MetaData.h
index 04805da..2d5b8d8 100644
--- a/include/media/stagefright/MetaData.h
+++ b/include/media/stagefright/MetaData.h
@@ -44,6 +44,7 @@
     kKeyColorFormat      = 'colf',
     kKeyPlatformPrivate  = 'priv',
     kKeyDecoderComponent = 'decC',
+    kKeyBufferID         = 'bfID',
 };
 
 enum {
diff --git a/include/media/stagefright/SurfaceRenderer.h b/include/media/stagefright/SurfaceRenderer.h
deleted file mode 100644
index 298ab50..0000000
--- a/include/media/stagefright/SurfaceRenderer.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2009 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 SURFACE_RENDERER_H_
-
-#define SURFACE_RENDERER_H_
-
-#include <media/stagefright/VideoRenderer.h>
-#include <utils/RefBase.h>
-
-namespace android {
-
-class Surface;
-
-class SurfaceRenderer : public VideoRenderer {
-public:
-    SurfaceRenderer(
-            const sp<Surface> &surface,
-            size_t displayWidth, size_t displayHeight,
-            size_t decodedWidth, size_t decodedHeight);
-
-    virtual ~SurfaceRenderer();
-
-    virtual void render(
-            const void *data, size_t size, void *platformPrivate);
-
-private:
-    sp<Surface> mSurface;
-    size_t mDisplayWidth, mDisplayHeight;
-    size_t mDecodedWidth, mDecodedHeight;
-
-    SurfaceRenderer(const SurfaceRenderer &);
-    SurfaceRenderer &operator=(const SurfaceRenderer &);
-};
-
-}  // namespace android
-
-#endif  // SURFACE_RENDERER_H_