From f3712f026aad1fc46b1df18d1dba718281e39726 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Mon, 18 Oct 2010 09:57:42 -0700 Subject: For thumbnail extraction make sure we instantiate a decoder that allows access to the framebuffer. Implement the samsung workaround to support this by reconfiguring the decoder. related-to-bug: 3106534 Change-Id: Ie28d72af2f9e93818d1840ac83aa7bc11fa57b3b --- media/libstagefright/OMXCodec.cpp | 46 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'media/libstagefright/OMXCodec.cpp') diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 4648ad3..9a49a9b 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -493,12 +493,29 @@ sp OMXCodec::Create( LOGV("Attempting to allocate OMX node '%s'", componentName); + uint32_t quirks = getComponentQuirks(componentName, createEncoder); + + if (!createEncoder + && (quirks & kOutputBuffersAreUnreadable) + && (flags & kClientNeedsFramebuffer)) { + if (strncmp(componentName, "OMX.SEC.", 8)) { + // For OMX.SEC.* decoders we can enable a special mode that + // gives the client access to the framebuffer contents. + + LOGW("Component '%s' does not give the client access to " + "the framebuffer contents. Skipping.", + componentName); + + continue; + } + } + status_t err = omx->allocateNode(componentName, observer, &node); if (err == OK) { LOGV("Successfully allocated OMX node '%s'", componentName); sp codec = new OMXCodec( - omx, node, getComponentQuirks(componentName, createEncoder), + omx, node, quirks, createEncoder, mime, componentName, source); @@ -681,6 +698,33 @@ status_t OMXCodec::configureCodec(const sp &meta, uint32_t flags) { initOutputFormat(meta); + if ((flags & kClientNeedsFramebuffer) + && !strncmp(mComponentName, "OMX.SEC.", 8)) { + OMX_INDEXTYPE index; + + status_t err = + mOMX->getExtensionIndex( + mNode, + "OMX.SEC.index.ThumbnailMode", + &index); + + if (err != OK) { + return err; + } + + OMX_BOOL enable = OMX_TRUE; + err = mOMX->setConfig(mNode, index, &enable, sizeof(enable)); + + if (err != OK) { + CODEC_LOGE("setConfig('OMX.SEC.index.ThumbnailMode') " + "returned error 0x%08x", err); + + return err; + } + + mQuirks &= ~kOutputBuffersAreUnreadable; + } + return OK; } -- cgit v1.1