Hi,
The log is
Code:
02-09 14:01:41.114: W/Osg Viewer(14026): FFmpegImageStream::open :
av_open_input_file() failed
02-09 14:01:41.118: W/Osg Viewer(14026): Warning: Could not find plugin to read
objects from file "/mnt/sdcard/VideoTest/1.avi.ffmpeg".
The steps what I followed to generate osg ffmpeg plugin
Step - 1) Downloaded ffmpeg1.0 from ffmpeg site and extracted to "ffmpeg"
flolder.
(renamed time.h to avtime.h of libavutil to avoid OSG compile
errors)
Step - 2) Executed the following script to generate armv7 libs (for Android
2.2)
Code:
NDK=/home/ttpl/Android/android-ndk-r8b
PLATFORM=$NDK/platforms/android-8/arch-arm
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
function build_one
{
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1
-Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums
-fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-shared \
--enable-static \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib
-nostdlib -lc -lm -ldl -llog" \
--disable-everything \
--enable-demuxer=mov \
--enable-demuxer=h264 \
--disable-ffplay \
--enable-protocol=file \
--enable-avformat \
--enable-avcodec \
--enable-decoder=rawvideo \
--enable-decoder=mjpeg \
--enable-decoder=h263 \
--enable-decoder=mpeg4 \
--enable-decoder=h264 \
--enable-parser=h264 \
--disable-network \
--enable-zlib \
--disable-avfilter \
--enable-avdevice \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib
-L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack
-Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so
libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a
libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once
--dynamic-linker=/system/bin/linker
$PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}
#arm v6
#CPU=armv6
#OPTIMIZE_CFLAGS="-marm -march=$CPU"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one
Step -3) This generated "libavcodec.a", "libavdevice.a", "libavformate.a",
"libutil.a", "libswresample.a" and "libswscale.a" into the folder
"./android/armv7-a/lib". Also "libffmpeg.so"
in "./Android/armv7-a" folder.
Step - 4) Copied all these ".a" files and "pkconfig" folder to
"/home/ttpl/Android/OSGSupport/ffmpeg" folder
Step -5) Extracted OSG3.0.1 and created "build" directory in it. Added "
FIND_PACKAGE(FFmpeg)" after "ANDROID_3RD_PARTY()" to CMakeList.txt file
Step -6) Gave the following cmake command
Code:
cmake .. -DOSG_BUILD_PLATFORM_ANDROID=ON -DDYNAMIC_OPENTHREADS=OFF
-DDYNAMIC_OPENSCENEGRAPH=OFF -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF
-DOSG_GL_MATRICES_AVAILABLE=ON -DOSG_GL_VERTEX_FUNCS_AVAILABLE=ON
-DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=ON -DOSG_GL_FIXED_FUNCTION_AVAILABLE=ON
-DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF -DOSG_GL1_AVAILABLE=OFF
-DFFMPEG_LIBAVCODEC_INCLUDE_DIRS=/home/ttpl/Android/OSGSupport/ffmpeg
-DFFMPEG_LIBAVCODEC_LIBRARIES=/home/ttpl/Android/OSGSupport/ffmpeg/libavcodec.a
-DFFMPEG_LIBAVDEVICE_INCLUDE_DIRS=/home/ttpl/Android/OSGSupport/ffmpeg
-DFFMPEG_LIBAVDEVICE_LIBRARIES=/home/ttpl/Android/OSGSupport/ffmpeg/libavdevice.a
-DFFMPEG_LIBAVFORMAT_INCLUDE_DIRS=/home/ttpl/Android/OSGSupport/ffmpeg
-DFFMPEG_LIBAVFORMAT_LIBRARIES=/home/ttpl/Android/OSGSupport/ffmpeg/libavformat.a
-DFFMPEG_LIBAVUTIL_INCLUDE_DIRS=/home/ttpl/Android/OSGSupport/ffmpeg
-DFFMPEG_LIBAVUTIL_LIBRARIES=/home/ttpl/Android/OSGSupport/ffmpeg/libavutil.a
-DFFMPEG_LIBSWSCALE_INCLUDE_DIRS=/home/ttpl/Android/OSGSupport/ffmpeg
-DFFMPEG_LIBSWSCALE_LIBRARIES=/home/ttpl/Android/OSGSupport/ffmpeg/libswscale.a
-DFFMPEG_ROOT=/home/ttpl/Android/OSGSupport/ffmpeg
-DOSG_GL2_AVAILABLE=OFF -DOSG_GL3_AVAILABLE=OFF -DOSG_GLES1_AVAILABLE=ON
-DOSG_GLES2_AVAILABLE=OFF -DCMAKE_CXX_FLAGS=-D__STDC_CONSTANT_MACROS -DJ=4
-DCMAKE_INSTALL_PREFIX=/home/ttpl/Android/OpenSceneGraph-3.0.1_GL/osginstall
Step -7) make installed all files to
"/home/ttpl/Android/OpenSceneGraph-3.0.1_GL/osginstall" which includes
"libosgdb_ffmpeg.a" plugin in both "armeabi" and "armeabi-v7a" folders
Step -8) Created an android project from the existed (OpenGLES1) example.
Step -9) Modified Android.mk file as follows. Given only modifications
Code:
OSG_ANDROID_DIR :=
/home/ttpl/Android/OpenSceneGraph-3.0.1_GL/osginstall
....................
LOCAL_LDLIBS := -llog -lGLESv1_CM -ldl -lz -lgnustl_static
$(OPENGLES_LIB) $(OSG_ANDROID_DIR)/obj/local/armeabi-v7a/libavformat.a
$(OSG_ANDROID_DIR)/obj/local/armeabi-v7a/libavcodec.a
$(OSG_ANDROID_DIR)/obj/local/armeabi-v7a/libavdevice.a
$(OSG_ANDROID_DIR)/obj/local/armeabi-v7a/libswscale.a
$(OSG_ANDROID_DIR)/obj/local/armeabi-v7a/libavutil.a
$(OSG_ANDROID_DIR)/obj/local/armeabi-v7a/libswscale.a
............
LOCAL_LDFLAGS := -L $(LIBDIR) \
-losgdb_dds \
-losgdb_openflight \
-losgdb_tga \
-losgdb_rgb \
-losgdb_ffmpeg \
..............
Step -10) Copied all ".a" files from "/home/ttpl/Android/OSGSupport/ffmpeg"
folder" to "
/home/ttpl/Android/OpenSceneGraph-3.0.1_GL/osginstall/obj/local/armeabi-v7a"
folder to
avoid linking errors .
Step-11) Added the following code to "OsgMainApp.hpp"
Code:
osg::ref_ptr<osg::ImageStream> videoStream[3];
osg::ref_ptr<osg::Texture2D> mVideoTexture;
osg::ref_ptr<osg::Geode> geode;// = new osg::Geode;
osg::Image* img;
and to "OsgMainApp.cpp" (OsgMainApp::loadModels() method)
Code:
img = osgDB::readImageFile("/mnt/sdcard/VideoTest/1.avi.ffmpeg");
if (img!=NULL)
{
osg::notify(osg::ALWAYS)<<"AVI READ DONE"<<std::endl;
}
else
{
osg::notify(osg::ALWAYS)<<"AVI NOT
RED----------------"<<std::endl;
}
Step 12) Compiled with android-ndk (version 8b)
Step 13) From Eclipse did "Run as Android Application".
Step 14) When enter model path and clicked "Accept" button then NULL from
"readImageFile"
Is there any mistake in the above process (especially in generation of ffmpeg
libs).
I am using Ubuntu - 12.04.
Testing device is Samsung Gulaxy (GT-I9000) model. Android version is 2.2.1.
Can you please guide how to solve this problem.
...
Thank you!
Koduri
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=52516#52516
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org