Loading include/media/IOMX.h +24 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <utils/String8.h> #include <OMX_Core.h> #include <OMX_Video.h> #define IOMX_USES_SOCKETS 0 Loading @@ -30,6 +31,8 @@ namespace android { class IMemory; class IOMXObserver; class IOMXRenderer; class ISurface; class IOMX : public IInterface { public: Loading Loading @@ -87,6 +90,13 @@ public: 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 { Loading Loading @@ -155,6 +165,13 @@ public: 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> { Loading @@ -171,6 +188,13 @@ public: 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_ include/media/stagefright/MediaPlayerImpl.h +2 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ namespace android { class AudioPlayer; class IOMXRenderer; class ISurface; class MediaExtractor; class MediaBuffer; Loading @@ -37,7 +38,6 @@ class MetaData; class OMXDecoder; class Surface; class TimeSource; class VideoRenderer; class MediaPlayerImpl { public: Loading Loading @@ -93,7 +93,7 @@ private: sp<Surface> mSurface; sp<ISurface> mISurface; VideoRenderer *mRenderer; sp<IOMXRenderer> mVideoRenderer; sp<MediaPlayerBase::AudioSink> mAudioSink; Loading include/media/stagefright/MetaData.h +1 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ enum { kKeyColorFormat = 'colf', kKeyPlatformPrivate = 'priv', kKeyDecoderComponent = 'decC', kKeyBufferID = 'bfID', }; enum { Loading media/libmedia/IOMX.cpp +92 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ #include <binder/IMemory.h> #include <binder/Parcel.h> #include <media/IOMX.h> #include <ui/ISurface.h> namespace android { Loading @@ -23,7 +24,9 @@ enum { OBSERVE_NODE, FILL_BUFFER, EMPTY_BUFFER, CREATE_RENDERER, OBSERVER_ON_MSG, RENDERER_RENDER, }; static void *readVoidStar(const Parcel *parcel) { Loading Loading @@ -262,6 +265,28 @@ public: remote()->transact(EMPTY_BUFFER, data, &reply, IBinder::FLAG_ONEWAY); } #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) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeStrongBinder(surface->asBinder()); data.writeCString(componentName); data.writeInt32(colorFormat); data.writeInt32(encodedWidth); data.writeInt32(encodedHeight); data.writeInt32(displayWidth); data.writeInt32(displayHeight); remote()->transact(CREATE_RENDERER, data, &reply); return interface_cast<IOMXRenderer>(reply.readStrongBinder()); } }; IMPLEMENT_META_INTERFACE(OMX, "android.hardware.IOMX"); Loading Loading @@ -513,6 +538,33 @@ status_t BnOMX::onTransact( } #endif case CREATE_RENDERER: { CHECK_INTERFACE(IOMX, data, reply); sp<ISurface> isurface = interface_cast<ISurface>(data.readStrongBinder()); const char *componentName = data.readCString(); OMX_COLOR_FORMATTYPE colorFormat = static_cast<OMX_COLOR_FORMATTYPE>(data.readInt32()); size_t encodedWidth = (size_t)data.readInt32(); size_t encodedHeight = (size_t)data.readInt32(); size_t displayWidth = (size_t)data.readInt32(); size_t displayHeight = (size_t)data.readInt32(); sp<IOMXRenderer> renderer = createRenderer(isurface, componentName, colorFormat, encodedWidth, encodedHeight, displayWidth, displayHeight); reply->writeStrongBinder(renderer->asBinder()); return OK; } default: return BBinder::onTransact(code, data, reply, flags); } Loading Loading @@ -558,4 +610,44 @@ status_t BnOMXObserver::onTransact( } } //////////////////////////////////////////////////////////////////////////////// class BpOMXRenderer : public BpInterface<IOMXRenderer> { public: BpOMXRenderer(const sp<IBinder> &impl) : BpInterface<IOMXRenderer>(impl) { } virtual void render(IOMX::buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMXRenderer::getInterfaceDescriptor()); writeVoidStar(buffer, &data); // NOTE: Do NOT make this a ONE_WAY call, it must be synchronous // so that the caller knows when to recycle the buffer. remote()->transact(RENDERER_RENDER, data, &reply); } }; IMPLEMENT_META_INTERFACE(OMXRenderer, "android.hardware.IOMXRenderer"); status_t BnOMXRenderer::onTransact( uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) { switch (code) { case RENDERER_RENDER: { CHECK_INTERFACE(IOMXRenderer, data, reply); IOMX::buffer_id buffer = readVoidStar(&data); render(buffer); return NO_ERROR; } default: return BBinder::onTransact(code, data, reply, flags); } } } // namespace android media/libstagefright/Android.mk +0 −4 Original line number Diff line number Diff line Loading @@ -19,14 +19,10 @@ LOCAL_SRC_FILES:= \ MediaSource.cpp \ MetaData.cpp \ MmapSource.cpp \ QComHardwareRenderer.cpp \ SampleTable.cpp \ ShoutcastSource.cpp \ SoftwareRenderer.cpp \ SurfaceRenderer.cpp \ TimeSource.cpp \ TimedEventQueue.cpp \ TIHardwareRenderer.cpp \ Utils.cpp \ AudioPlayer.cpp \ ESDS.cpp \ Loading Loading
include/media/IOMX.h +24 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <utils/String8.h> #include <OMX_Core.h> #include <OMX_Video.h> #define IOMX_USES_SOCKETS 0 Loading @@ -30,6 +31,8 @@ namespace android { class IMemory; class IOMXObserver; class IOMXRenderer; class ISurface; class IOMX : public IInterface { public: Loading Loading @@ -87,6 +90,13 @@ public: 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 { Loading Loading @@ -155,6 +165,13 @@ public: 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> { Loading @@ -171,6 +188,13 @@ public: 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_
include/media/stagefright/MediaPlayerImpl.h +2 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ namespace android { class AudioPlayer; class IOMXRenderer; class ISurface; class MediaExtractor; class MediaBuffer; Loading @@ -37,7 +38,6 @@ class MetaData; class OMXDecoder; class Surface; class TimeSource; class VideoRenderer; class MediaPlayerImpl { public: Loading Loading @@ -93,7 +93,7 @@ private: sp<Surface> mSurface; sp<ISurface> mISurface; VideoRenderer *mRenderer; sp<IOMXRenderer> mVideoRenderer; sp<MediaPlayerBase::AudioSink> mAudioSink; Loading
include/media/stagefright/MetaData.h +1 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ enum { kKeyColorFormat = 'colf', kKeyPlatformPrivate = 'priv', kKeyDecoderComponent = 'decC', kKeyBufferID = 'bfID', }; enum { Loading
media/libmedia/IOMX.cpp +92 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ #include <binder/IMemory.h> #include <binder/Parcel.h> #include <media/IOMX.h> #include <ui/ISurface.h> namespace android { Loading @@ -23,7 +24,9 @@ enum { OBSERVE_NODE, FILL_BUFFER, EMPTY_BUFFER, CREATE_RENDERER, OBSERVER_ON_MSG, RENDERER_RENDER, }; static void *readVoidStar(const Parcel *parcel) { Loading Loading @@ -262,6 +265,28 @@ public: remote()->transact(EMPTY_BUFFER, data, &reply, IBinder::FLAG_ONEWAY); } #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) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeStrongBinder(surface->asBinder()); data.writeCString(componentName); data.writeInt32(colorFormat); data.writeInt32(encodedWidth); data.writeInt32(encodedHeight); data.writeInt32(displayWidth); data.writeInt32(displayHeight); remote()->transact(CREATE_RENDERER, data, &reply); return interface_cast<IOMXRenderer>(reply.readStrongBinder()); } }; IMPLEMENT_META_INTERFACE(OMX, "android.hardware.IOMX"); Loading Loading @@ -513,6 +538,33 @@ status_t BnOMX::onTransact( } #endif case CREATE_RENDERER: { CHECK_INTERFACE(IOMX, data, reply); sp<ISurface> isurface = interface_cast<ISurface>(data.readStrongBinder()); const char *componentName = data.readCString(); OMX_COLOR_FORMATTYPE colorFormat = static_cast<OMX_COLOR_FORMATTYPE>(data.readInt32()); size_t encodedWidth = (size_t)data.readInt32(); size_t encodedHeight = (size_t)data.readInt32(); size_t displayWidth = (size_t)data.readInt32(); size_t displayHeight = (size_t)data.readInt32(); sp<IOMXRenderer> renderer = createRenderer(isurface, componentName, colorFormat, encodedWidth, encodedHeight, displayWidth, displayHeight); reply->writeStrongBinder(renderer->asBinder()); return OK; } default: return BBinder::onTransact(code, data, reply, flags); } Loading Loading @@ -558,4 +610,44 @@ status_t BnOMXObserver::onTransact( } } //////////////////////////////////////////////////////////////////////////////// class BpOMXRenderer : public BpInterface<IOMXRenderer> { public: BpOMXRenderer(const sp<IBinder> &impl) : BpInterface<IOMXRenderer>(impl) { } virtual void render(IOMX::buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMXRenderer::getInterfaceDescriptor()); writeVoidStar(buffer, &data); // NOTE: Do NOT make this a ONE_WAY call, it must be synchronous // so that the caller knows when to recycle the buffer. remote()->transact(RENDERER_RENDER, data, &reply); } }; IMPLEMENT_META_INTERFACE(OMXRenderer, "android.hardware.IOMXRenderer"); status_t BnOMXRenderer::onTransact( uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) { switch (code) { case RENDERER_RENDER: { CHECK_INTERFACE(IOMXRenderer, data, reply); IOMX::buffer_id buffer = readVoidStar(&data); render(buffer); return NO_ERROR; } default: return BBinder::onTransact(code, data, reply, flags); } } } // namespace android
media/libstagefright/Android.mk +0 −4 Original line number Diff line number Diff line Loading @@ -19,14 +19,10 @@ LOCAL_SRC_FILES:= \ MediaSource.cpp \ MetaData.cpp \ MmapSource.cpp \ QComHardwareRenderer.cpp \ SampleTable.cpp \ ShoutcastSource.cpp \ SoftwareRenderer.cpp \ SurfaceRenderer.cpp \ TimeSource.cpp \ TimedEventQueue.cpp \ TIHardwareRenderer.cpp \ Utils.cpp \ AudioPlayer.cpp \ ESDS.cpp \ Loading