vlc | branch: master | Thomas Guillem <[email protected]> | Thu Jul  3 
17:11:59 2014 +0200| [ec8bf9d655a8d5d1b399dfe1dcd1219aee3e697b] | committer: 
Martin Storsjö

iomx: fix mediaserver crash with QCOM devices.

Some QCOM OMX_getParameter implementations override the nSize element to a bad
value. This can lead to a mediaserver crash because IOMX interface rely on
nSize to send the OMX parameter via android Binder.

Signed-off-by: Martin Storsjö <[email protected]>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ec8bf9d655a8d5d1b399dfe1dcd1219aee3e697b
---

 modules/codec/omxil/iomx.cpp |   11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/modules/codec/omxil/iomx.cpp b/modules/codec/omxil/iomx.cpp
index b399018..c4c4ac6 100644
--- a/modules/codec/omxil/iomx.cpp
+++ b/modules/codec/omxil/iomx.cpp
@@ -133,8 +133,17 @@ static OMX_ERRORTYPE iomx_send_command(OMX_HANDLETYPE 
component, OMX_COMMANDTYPE
 
 static OMX_ERRORTYPE iomx_get_parameter(OMX_HANDLETYPE component, 
OMX_INDEXTYPE param_index, OMX_PTR param)
 {
+    /*
+     * Some QCOM OMX_getParameter implementations override the nSize element to
+     * a bad value. So, save the initial nSize in order to restore it after.
+     */
+    OMX_U32 nSize = *(OMX_U32*)param;
+    OMX_ERRORTYPE error;
     OMXNode* node = (OMXNode*) 
((OMX_COMPONENTTYPE*)component)->pComponentPrivate;
-    return get_error(ctx->iomx->getParameter(node->node, param_index, param, 
*(OMX_U32*)param));
+
+    error = get_error(ctx->iomx->getParameter(node->node, param_index, param, 
nSize));
+    *(OMX_U32*)param = nSize;
+    return error;
 }
 
 static OMX_ERRORTYPE iomx_set_parameter(OMX_HANDLETYPE component, 
OMX_INDEXTYPE param_index, OMX_PTR param)

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to