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
