Expose a variation of the createRenderer API that works on a plain Surface.
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 IOMXObserver;
 class IOMXRenderer;
 class ISurface;
+class Surface;
 
 class IOMX : public IInterface {
 public:
@@ -87,6 +88,16 @@
             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 @@
 // ---------------------------------------------------------------------------
 
 class BufferMapper;
+class IOMX;
 class Rect;
-class MediaPlayerImpl;
 class Surface;
 class SurfaceComposerClient;
 struct per_client_cblk_t;
@@ -181,7 +181,7 @@
     // 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);