diff options
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/ACodec.cpp | 28 | ||||
-rw-r--r-- | media/libstagefright/Android.mk | 1 | ||||
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 2 | ||||
-rwxr-xr-x | media/libstagefright/OMXCodec.cpp | 38 | ||||
-rw-r--r-- | media/libstagefright/colorconversion/SoftwareRenderer.cpp | 8 | ||||
-rw-r--r-- | media/libstagefright/tests/Android.mk | 3 | ||||
-rw-r--r-- | media/libstagefright/tests/SurfaceMediaSource_test.cpp | 18 |
7 files changed, 34 insertions, 64 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index c4743a1..b4894e9 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -595,7 +595,7 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() { // Dequeue buffers and send them to OMX for (OMX_U32 i = 0; i < def.nBufferCountActual; i++) { ANativeWindowBuffer *buf; - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf); + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf); if (err != 0) { ALOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err); break; @@ -653,7 +653,7 @@ status_t ACodec::cancelBufferToNativeWindow(BufferInfo *info) { mComponentName.c_str(), info->mBufferID); int err = mNativeWindow->cancelBuffer( - mNativeWindow.get(), info->mGraphicBuffer.get()); + mNativeWindow.get(), info->mGraphicBuffer.get(), -1); CHECK_EQ(err, 0); @@ -664,7 +664,8 @@ status_t ACodec::cancelBufferToNativeWindow(BufferInfo *info) { ACodec::BufferInfo *ACodec::dequeueBufferFromNativeWindow() { ANativeWindowBuffer *buf; - if (mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf) != 0) { + int fenceFd = -1; + if (native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf) != 0) { ALOGE("dequeueBuffer failed."); return NULL; } @@ -2188,7 +2189,8 @@ status_t ACodec::pushBlankBuffersToNativeWindow() { // on the screen and then been replaced, so an previous video frames are // guaranteed NOT to be currently displayed. for (int i = 0; i < numBufs + 1; i++) { - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &anb); + int fenceFd = -1; + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &anb); if (err != NO_ERROR) { ALOGE("error pushing blank frames: dequeueBuffer failed: %s (%d)", strerror(-err), -err); @@ -2196,13 +2198,6 @@ status_t ACodec::pushBlankBuffersToNativeWindow() { } sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - err = mNativeWindow->lockBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); - if (err != NO_ERROR) { - ALOGE("error pushing blank frames: lockBuffer failed: %s (%d)", - strerror(-err), -err); - goto error; - } // Fill the buffer with the a 1x1 checkerboard pattern ;) uint32_t* img = NULL; @@ -2223,7 +2218,7 @@ status_t ACodec::pushBlankBuffersToNativeWindow() { } err = mNativeWindow->queueBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); + buf->getNativeBuffer(), -1); if (err != NO_ERROR) { ALOGE("error pushing blank frames: queueBuffer failed: %s (%d)", strerror(-err), -err); @@ -2238,7 +2233,7 @@ error: if (err != NO_ERROR) { // Clean up after an error. if (anb != NULL) { - mNativeWindow->cancelBuffer(mNativeWindow.get(), anb); + mNativeWindow->cancelBuffer(mNativeWindow.get(), anb, -1); } native_window_api_disconnect(mNativeWindow.get(), @@ -2751,7 +2746,7 @@ void ACodec::BaseState::onOutputBufferDrained(const sp<AMessage> &msg) { status_t err; if ((err = mCodec->mNativeWindow->queueBuffer( mCodec->mNativeWindow.get(), - info->mGraphicBuffer.get())) == OK) { + info->mGraphicBuffer.get(), -1)) == OK) { info->mStatus = BufferInfo::OWNED_BY_NATIVE_WINDOW; } else { mCodec->signalError(OMX_ErrorUndefined, err); @@ -3253,11 +3248,6 @@ void ACodec::ExecutingState::submitOutputBuffers() { if (info->mStatus == BufferInfo::OWNED_BY_NATIVE_WINDOW) { continue; } - - status_t err = mCodec->mNativeWindow->lockBuffer( - mCodec->mNativeWindow.get(), - info->mGraphicBuffer.get()); - CHECK_EQ(err, (status_t)OK); } else { CHECK_EQ((int)info->mStatus, (int)BufferInfo::OWNED_BY_US); } diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk index 8a68036..e5b4d75 100644 --- a/media/libstagefright/Android.mk +++ b/media/libstagefright/Android.mk @@ -81,6 +81,7 @@ LOCAL_SHARED_LIBRARIES := \ libssl \ libstagefright_omx \ libstagefright_yuv \ + libsync \ libui \ libutils \ libvorbisidec \ diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 0f346d8..2c68075 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -130,7 +130,7 @@ struct AwesomeNativeWindowRenderer : public AwesomeRenderer { CHECK(buffer->meta_data()->findInt64(kKeyTime, &timeUs)); native_window_set_buffers_timestamp(mNativeWindow.get(), timeUs * 1000); status_t err = mNativeWindow->queueBuffer( - mNativeWindow.get(), buffer->graphicBuffer().get()); + mNativeWindow.get(), buffer->graphicBuffer().get(), -1); if (err != 0) { ALOGE("queueBuffer failed with error %s (%d)", strerror(-err), -err); diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index fde7ebf..1d4ab32 100755 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -1776,7 +1776,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { // Dequeue buffers and send them to OMX for (OMX_U32 i = 0; i < def.nBufferCountActual; i++) { ANativeWindowBuffer* buf; - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf); + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf); if (err != 0) { ALOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err); break; @@ -1832,7 +1832,7 @@ status_t OMXCodec::cancelBufferToNativeWindow(BufferInfo *info) { CHECK_EQ((int)info->mStatus, (int)OWNED_BY_US); CODEC_LOGV("Calling cancelBuffer on buffer %p", info->mBuffer); int err = mNativeWindow->cancelBuffer( - mNativeWindow.get(), info->mMediaBuffer->graphicBuffer().get()); + mNativeWindow.get(), info->mMediaBuffer->graphicBuffer().get(), -1); if (err != 0) { CODEC_LOGE("cancelBuffer failed w/ error 0x%08x", err); @@ -1846,7 +1846,8 @@ status_t OMXCodec::cancelBufferToNativeWindow(BufferInfo *info) { OMXCodec::BufferInfo* OMXCodec::dequeueBufferFromNativeWindow() { // Dequeue the next buffer from the native window. ANativeWindowBuffer* buf; - int err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf); + int fenceFd = -1; + int err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf); if (err != 0) { CODEC_LOGE("dequeueBuffer failed w/ error 0x%08x", err); @@ -1950,7 +1951,8 @@ status_t OMXCodec::pushBlankBuffersToNativeWindow() { // on the screen and then been replaced, so an previous video frames are // guaranteed NOT to be currently displayed. for (int i = 0; i < numBufs + 1; i++) { - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &anb); + int fenceFd = -1; + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &anb); if (err != NO_ERROR) { ALOGE("error pushing blank frames: dequeueBuffer failed: %s (%d)", strerror(-err), -err); @@ -1958,13 +1960,6 @@ status_t OMXCodec::pushBlankBuffersToNativeWindow() { } sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - err = mNativeWindow->lockBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); - if (err != NO_ERROR) { - ALOGE("error pushing blank frames: lockBuffer failed: %s (%d)", - strerror(-err), -err); - goto error; - } // Fill the buffer with the a 1x1 checkerboard pattern ;) uint32_t* img = NULL; @@ -1985,7 +1980,7 @@ status_t OMXCodec::pushBlankBuffersToNativeWindow() { } err = mNativeWindow->queueBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); + buf->getNativeBuffer(), -1); if (err != NO_ERROR) { ALOGE("error pushing blank frames: queueBuffer failed: %s (%d)", strerror(-err), -err); @@ -2000,7 +1995,7 @@ error: if (err != NO_ERROR) { // Clean up after an error. if (anb != NULL) { - mNativeWindow->cancelBuffer(mNativeWindow.get(), anb); + mNativeWindow->cancelBuffer(mNativeWindow.get(), anb, -1); } native_window_api_disconnect(mNativeWindow.get(), @@ -3199,23 +3194,6 @@ void OMXCodec::fillOutputBuffer(BufferInfo *info) { return; } - if (info->mMediaBuffer != NULL) { - sp<GraphicBuffer> graphicBuffer = info->mMediaBuffer->graphicBuffer(); - if (graphicBuffer != 0) { - // When using a native buffer we need to lock the buffer before - // giving it to OMX. - CODEC_LOGV("Calling lockBuffer on %p", info->mBuffer); - int err = mNativeWindow->lockBuffer(mNativeWindow.get(), - graphicBuffer.get()); - if (err != 0) { - CODEC_LOGE("lockBuffer failed w/ error 0x%08x", err); - - setState(ERROR); - return; - } - } - } - CODEC_LOGV("Calling fillBuffer on buffer %p", info->mBuffer); status_t err = mOMX->fillBuffer(mNode, info->mBuffer); diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp index 8673bad..2704a37 100644 --- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp +++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp @@ -141,13 +141,12 @@ void SoftwareRenderer::render( const void *data, size_t size, void *platformPrivate) { ANativeWindowBuffer *buf; int err; - if ((err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf)) != 0) { + if ((err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), + &buf)) != 0) { ALOGW("Surface::dequeueBuffer returned error %d", err); return; } - CHECK_EQ(0, mNativeWindow->lockBuffer(mNativeWindow.get(), buf)); - GraphicBufferMapper &mapper = GraphicBufferMapper::get(); Rect bounds(mCropWidth, mCropHeight); @@ -231,7 +230,8 @@ void SoftwareRenderer::render( CHECK_EQ(0, mapper.unlock(buf->handle)); - if ((err = mNativeWindow->queueBuffer(mNativeWindow.get(), buf)) != 0) { + if ((err = mNativeWindow->queueBuffer(mNativeWindow.get(), buf, + -1)) != 0) { ALOGW("Surface::queueBuffer returned error %d", err); } buf = NULL; diff --git a/media/libstagefright/tests/Android.mk b/media/libstagefright/tests/Android.mk index a1e6be7..57fff0b 100644 --- a/media/libstagefright/tests/Android.mk +++ b/media/libstagefright/tests/Android.mk @@ -20,9 +20,10 @@ LOCAL_SHARED_LIBRARIES := \ libgui \ libmedia \ libstagefright \ - libstagefright_omx \ libstagefright_foundation \ + libstagefright_omx \ libstlport \ + libsync \ libui \ libutils \ diff --git a/media/libstagefright/tests/SurfaceMediaSource_test.cpp b/media/libstagefright/tests/SurfaceMediaSource_test.cpp index 466f521..cc2aca7 100644 --- a/media/libstagefright/tests/SurfaceMediaSource_test.cpp +++ b/media/libstagefright/tests/SurfaceMediaSource_test.cpp @@ -509,31 +509,31 @@ void SurfaceMediaSourceGLTest::setUpEGLSurfaceFromMediaRecorder(sp<MediaRecorder // cpu YV12 buffer void SurfaceMediaSourceTest::oneBufferPass(int width, int height ) { ANativeWindowBuffer* anb; - ASSERT_EQ(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb)); + ASSERT_EQ(NO_ERROR, native_window_dequeue_buffer_and_wait(mANW.get(), &anb)); ASSERT_TRUE(anb != NULL); - sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - ASSERT_EQ(NO_ERROR, mANW->lockBuffer(mANW.get(), buf->getNativeBuffer())); // Fill the buffer with the a checkerboard pattern uint8_t* img = NULL; + sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); buf->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, (void**)(&img)); SurfaceMediaSourceTest::fillYV12Buffer(img, width, height, buf->getStride()); buf->unlock(); - ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer())); + ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(), + -1)); } // Dequeuing and queuing the buffer without really filling it in. void SurfaceMediaSourceTest::oneBufferPassNoFill(int width, int height ) { ANativeWindowBuffer* anb; - ASSERT_EQ(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb)); + ASSERT_EQ(NO_ERROR, native_window_dequeue_buffer_and_wait(mANW.get(), &anb)); ASSERT_TRUE(anb != NULL); - sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - // ASSERT_EQ(NO_ERROR, mANW->lockBuffer(mANW.get(), buf->getNativeBuffer())); // We do not fill the buffer in. Just queue it back. - ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer())); + sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); + ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(), + -1)); } // Fill a YV12 buffer with a multi-colored checkerboard pattern @@ -652,7 +652,7 @@ TEST_F(SurfaceMediaSourceTest, DISABLED_DummyEncodingFromCpuFilledYV12BufferNpot ANativeWindowBuffer* anb; // Note: make sure we get an ERROR back when dequeuing! - ASSERT_NE(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb)); + ASSERT_NE(NO_ERROR, native_window_dequeue_buffer_and_wait(mANW.get(), &anb)); } // pass multiple buffers from the native_window the SurfaceMediaSource |