Loading include/media/stagefright/OMXCodec.h +1 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ private: kRequiresLoadedToIdleAfterAllocation = 4, kRequiresAllocateBufferOnInputPorts = 8, kRequiresFlushCompleteEmulation = 16, kRequiresAllocateBufferOnOutputPorts = 32, }; struct BufferInfo { Loading include/media/stagefright/TIHardwareRenderer.h +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ private: size_t mFrameSize; sp<Overlay> mOverlay; Vector<void *> mOverlayAddresses; bool mIsFirstFrame; size_t mIndex; TIHardwareRenderer(const TIHardwareRenderer &); Loading media/libstagefright/OMXCodec.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -735,6 +735,10 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) { && (mQuirks & kRequiresAllocateBufferOnInputPorts)) { err = mOMX->allocate_buffer_with_backup( mNode, portIndex, mem, &buffer); } else if (portIndex == kPortIndexOutput && (mQuirks & kRequiresAllocateBufferOnOutputPorts)) { err = mOMX->allocate_buffer( mNode, portIndex, def.nBufferSize, &buffer); } else { err = mOMX->use_buffer(mNode, portIndex, mem, &buffer); } Loading media/libstagefright/omx/Android.mk +2 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ include external/opencore/Config.mk LOCAL_C_INCLUDES := $(PV_INCLUDES) LOCAL_CFLAGS := $(PV_CFLAGS_MINUS_VISIBILITY) LOCAL_C_INCLUDES += $(TOP)/hardware/ti/omap3/liboverlay LOCAL_SRC_FILES:= \ OMX.cpp \ QComHardwareRenderer.cpp \ Loading media/libstagefright/omx/TIHardwareRenderer.cpp +49 −18 Original line number Diff line number Diff line Loading @@ -17,13 +17,15 @@ #define LOG_TAG "TIHardwareRenderer" #include <utils/Log.h> #undef NDEBUG #include <assert.h> #include <media/stagefright/TIHardwareRenderer.h> #include <media/stagefright/MediaDebug.h> #include <ui/ISurface.h> #include <ui/Overlay.h> #include "v4l2_utils.h" #define CACHEABLE_BUFFERS 0x1 namespace android { //////////////////////////////////////////////////////////////////////////////// Loading @@ -37,10 +39,12 @@ TIHardwareRenderer::TIHardwareRenderer( mDisplayHeight(displayHeight), mDecodedWidth(decodedWidth), mDecodedHeight(decodedHeight), mFrameSize((mDecodedWidth * mDecodedHeight * 3) / 2) { assert(mISurface.get() != NULL); assert(mDecodedWidth > 0); assert(mDecodedHeight > 0); mFrameSize(mDecodedWidth * mDecodedHeight * 2), mIsFirstFrame(true), mIndex(0) { CHECK(mISurface.get() != NULL); CHECK(mDecodedWidth > 0); CHECK(mDecodedHeight > 0); sp<OverlayRef> ref = mISurface->createOverlay( mDisplayWidth, mDisplayHeight, OVERLAY_FORMAT_CbYCrY_422_I); Loading @@ -51,11 +55,14 @@ TIHardwareRenderer::TIHardwareRenderer( } mOverlay = new Overlay(ref); mOverlay->setParameter(CACHEABLE_BUFFERS, 0); for (size_t i = 0; i < (size_t)mOverlay->getBufferCount(); ++i) { mapping_data_t *data = (mapping_data_t *)mOverlay->getBufferAddress((void *)i); for (size_t i = 0; i < mOverlay->getBufferCount(); ++i) { mOverlayAddresses.push(mOverlay->getBufferAddress((void *)i)); mOverlayAddresses.push(data->ptr); } mIndex = mOverlayAddresses.size() - 1; } TIHardwareRenderer::~TIHardwareRenderer() { Loading @@ -70,27 +77,51 @@ TIHardwareRenderer::~TIHardwareRenderer() { void TIHardwareRenderer::render( const void *data, size_t size, void *platformPrivate) { // assert(size == mFrameSize); // CHECK_EQ(size, mFrameSize); if (mOverlay.get() == NULL) { return; } #if 0 overlay_buffer_t buffer; if (mOverlay->dequeueBuffer(&buffer) == OK) { void *addr = mOverlay->getBufferAddress(buffer); size_t i = 0; for (; i < mOverlayAddresses.size(); ++i) { if (mOverlayAddresses[i] == data) { break; } if (mIsFirstFrame) { LOGI("overlay buffer #%d: %p", i, mOverlayAddresses[i]); } } if (i == mOverlayAddresses.size()) { LOGE("No suitable overlay buffer found."); return; } memcpy(addr, data, size); mOverlay->queueBuffer((void *)i); mOverlay->queueBuffer(buffer); overlay_buffer_t overlay_buffer; if (!mIsFirstFrame) { CHECK_EQ(mOverlay->dequeueBuffer(&overlay_buffer), OK); } else { mIsFirstFrame = false; } #else memcpy(mOverlayAddresses[mIndex], data, size); mOverlay->queueBuffer((void *)mIndex); if (mIndex-- == 0) { mIndex = mOverlayAddresses.size() - 1; if (++mIndex == mOverlayAddresses.size()) { mIndex = 0; } overlay_buffer_t overlay_buffer; if (!mIsFirstFrame) { CHECK_EQ(mOverlay->dequeueBuffer(&overlay_buffer), OK); } else { mIsFirstFrame = false; } #endif } Loading Loading
include/media/stagefright/OMXCodec.h +1 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ private: kRequiresLoadedToIdleAfterAllocation = 4, kRequiresAllocateBufferOnInputPorts = 8, kRequiresFlushCompleteEmulation = 16, kRequiresAllocateBufferOnOutputPorts = 32, }; struct BufferInfo { Loading
include/media/stagefright/TIHardwareRenderer.h +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ private: size_t mFrameSize; sp<Overlay> mOverlay; Vector<void *> mOverlayAddresses; bool mIsFirstFrame; size_t mIndex; TIHardwareRenderer(const TIHardwareRenderer &); Loading
media/libstagefright/OMXCodec.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -735,6 +735,10 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) { && (mQuirks & kRequiresAllocateBufferOnInputPorts)) { err = mOMX->allocate_buffer_with_backup( mNode, portIndex, mem, &buffer); } else if (portIndex == kPortIndexOutput && (mQuirks & kRequiresAllocateBufferOnOutputPorts)) { err = mOMX->allocate_buffer( mNode, portIndex, def.nBufferSize, &buffer); } else { err = mOMX->use_buffer(mNode, portIndex, mem, &buffer); } Loading
media/libstagefright/omx/Android.mk +2 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ include external/opencore/Config.mk LOCAL_C_INCLUDES := $(PV_INCLUDES) LOCAL_CFLAGS := $(PV_CFLAGS_MINUS_VISIBILITY) LOCAL_C_INCLUDES += $(TOP)/hardware/ti/omap3/liboverlay LOCAL_SRC_FILES:= \ OMX.cpp \ QComHardwareRenderer.cpp \ Loading
media/libstagefright/omx/TIHardwareRenderer.cpp +49 −18 Original line number Diff line number Diff line Loading @@ -17,13 +17,15 @@ #define LOG_TAG "TIHardwareRenderer" #include <utils/Log.h> #undef NDEBUG #include <assert.h> #include <media/stagefright/TIHardwareRenderer.h> #include <media/stagefright/MediaDebug.h> #include <ui/ISurface.h> #include <ui/Overlay.h> #include "v4l2_utils.h" #define CACHEABLE_BUFFERS 0x1 namespace android { //////////////////////////////////////////////////////////////////////////////// Loading @@ -37,10 +39,12 @@ TIHardwareRenderer::TIHardwareRenderer( mDisplayHeight(displayHeight), mDecodedWidth(decodedWidth), mDecodedHeight(decodedHeight), mFrameSize((mDecodedWidth * mDecodedHeight * 3) / 2) { assert(mISurface.get() != NULL); assert(mDecodedWidth > 0); assert(mDecodedHeight > 0); mFrameSize(mDecodedWidth * mDecodedHeight * 2), mIsFirstFrame(true), mIndex(0) { CHECK(mISurface.get() != NULL); CHECK(mDecodedWidth > 0); CHECK(mDecodedHeight > 0); sp<OverlayRef> ref = mISurface->createOverlay( mDisplayWidth, mDisplayHeight, OVERLAY_FORMAT_CbYCrY_422_I); Loading @@ -51,11 +55,14 @@ TIHardwareRenderer::TIHardwareRenderer( } mOverlay = new Overlay(ref); mOverlay->setParameter(CACHEABLE_BUFFERS, 0); for (size_t i = 0; i < (size_t)mOverlay->getBufferCount(); ++i) { mapping_data_t *data = (mapping_data_t *)mOverlay->getBufferAddress((void *)i); for (size_t i = 0; i < mOverlay->getBufferCount(); ++i) { mOverlayAddresses.push(mOverlay->getBufferAddress((void *)i)); mOverlayAddresses.push(data->ptr); } mIndex = mOverlayAddresses.size() - 1; } TIHardwareRenderer::~TIHardwareRenderer() { Loading @@ -70,27 +77,51 @@ TIHardwareRenderer::~TIHardwareRenderer() { void TIHardwareRenderer::render( const void *data, size_t size, void *platformPrivate) { // assert(size == mFrameSize); // CHECK_EQ(size, mFrameSize); if (mOverlay.get() == NULL) { return; } #if 0 overlay_buffer_t buffer; if (mOverlay->dequeueBuffer(&buffer) == OK) { void *addr = mOverlay->getBufferAddress(buffer); size_t i = 0; for (; i < mOverlayAddresses.size(); ++i) { if (mOverlayAddresses[i] == data) { break; } if (mIsFirstFrame) { LOGI("overlay buffer #%d: %p", i, mOverlayAddresses[i]); } } if (i == mOverlayAddresses.size()) { LOGE("No suitable overlay buffer found."); return; } memcpy(addr, data, size); mOverlay->queueBuffer((void *)i); mOverlay->queueBuffer(buffer); overlay_buffer_t overlay_buffer; if (!mIsFirstFrame) { CHECK_EQ(mOverlay->dequeueBuffer(&overlay_buffer), OK); } else { mIsFirstFrame = false; } #else memcpy(mOverlayAddresses[mIndex], data, size); mOverlay->queueBuffer((void *)mIndex); if (mIndex-- == 0) { mIndex = mOverlayAddresses.size() - 1; if (++mIndex == mOverlayAddresses.size()) { mIndex = 0; } overlay_buffer_t overlay_buffer; if (!mIsFirstFrame) { CHECK_EQ(mOverlay->dequeueBuffer(&overlay_buffer), OK); } else { mIsFirstFrame = false; } #endif } Loading