jonywalker wrote:I know this is a feature for application compatibility. I cross-compiled ffmpeg for Android, but Android SDK breaks down the symbolic links and copy only the content into *apk Installation file. If those libraries are load into virtual machine, the dependent *.so.xx.xx.xx are no more available, and runtime error occurs. The simplest way is to make ffmpeg build script generate shared libraries without symbolic links and versioning, how to do that?
My old solution is to build static library, but that is not prefered by Android System. I would not mention the reason here because it is out of topic. Thanks!
jonywalker wrote:yes, the other guys used either static build or did link by themselv, just like I did before, made ffmpeg build script for enable-static, and then call ld to link *.a files to build a single ffmpeg.so in a separate step. Just in the new ffmpeg release, there are multiple external tables, which are the same tables distributed to number of static libraries. It is not error but warning. These create multple copies of instance and may cause android app crash, and this is the reason why android community suggests NDK user to take shared libraries rather static libraries.
jonywalker wrote:Hi rogerdpack,
first, thanks a lot of your contribution here. With your help I did understand the cross shared build for winows. I solved the versioning problem by applying minimal modification to the configure, and made sure that this doesn't have impact to any other build by adding following lines to the position line nr. 2272
for android build just added option ./configure ----disable-symver
and we would have build result with libavcodec-54.so and libavformat-54.so and so on as output, then we make our apps link to libavcodec-54.so and libavformat-54.so as so on instead of linking to the symbolic links.
I am going to open another topic for discussion about build script with libstagefright.
The current build script tools/build_libstagefright is not correct.
The error "libstagefright_h264 not available" is resulted from the error from the script, not because the source and libs are not available. The thing of build stagefright is very complicated, and in current state of ffmpeg is not possible to build it because there are some unnecessary mudules required which are not abailable for the build system. I am writing now own interface library to open openmaxx hardware decoder. The software decoder of ffmpeg is not able to decode HD video in full speed. The source code of ffmpeg libstagefright interface doing two times copy of pixel buffer, which brakes down the speed too. The real hardware decoer should be able to do decoding and rendering in one step.
Users browsing this forum: Yahoo [Bot] and 2 guests