모두 ... 안드로이드 장치 용 libstagefright_h264로 ffmpeg hw 가속화를 시도하고 싶습니다. 소스 코드가 ffmpeg 2.2.1 및 android 4.2.2에서 약간 오래된 것으로 보입니다. 그래서 나는 소스 코드를 업데이트하려고하지만 때 나는 단지 다음과 같이 조금 코드를 작성 : 내가 코드를 실행할 때 다음과 같이 알려줍니다ffmpeg에 대한 무대 장치 : 정의되지 않은 심볼 '_ZTIN7android11MediaSourceE'
struct FFSource : public MediaSource {
virtual status_t start(MetaData *params) { return -1; }
virtual status_t stop() { return -1; }
virtual sp<MetaData> getFormat() { return sp<MetaData>(); }
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options) { return -1; }
};
static av_cold int Stagefright_init(AVCodecContext *avctx)
{
av_log(avctx, AV_LOG_ERROR, "In function: %s\n", __FUNCTION__);
FFSource *decoder;
sp<MediaSource> mediaSource;
decoder = new FFSource();
return -1;
}
을 : 는 "위해 libavcodec에 의해 참조 기호"_ZTIN7android11MediaSourceE "를 찾을 수 없습니다 "-55.so ...
그리고 그 결과는 libavcodec-55.so 위해 nm 명령을 보여[[email protected] ffmpeg-2.2.1.lsc]$nm ./libavcodec/libavcodec.so | grep Source
003a31a8 t _ZN7android11MediaSource10setBuffersERKNS_6VectorIPNS_11MediaBufferEEE
003a319c t _ZN7android11MediaSource5pauseEv
U _ZN7android11MediaSourceC2Ev
U _ZN7android11MediaSourceD0Ev
U _ZN7android11MediaSourceD1Ev
U _ZN7android11MediaSourceD2Ev
003a31d0 t _ZN8FFSource4readEPPN7android11MediaBufferEPKNS0_11MediaSource11ReadOptionsE
003a31bc t _ZN8FFSource4stopEv
003a31b4 t _ZN8FFSource5startEPN7android8MetaDataE
003a31c4 t _ZN8FFSource9getFormatEv
003a3340 t _ZN8FFSourceD0Ev
003a32e0 t _ZN8FFSourceD1Ev
007b29f0 d _ZTC8FFSource0_N7android11MediaSourceE
007b29e0 d _ZTI8FFSource
U _ZTIN7android11MediaSourceE
006ac028 r _ZTS8FFSource
007b2970 d _ZTT8FFSource
U _ZTv0_n12_N7android11MediaSourceD0Ev
U _ZTv0_n12_N7android11MediaSourceD1Ev
003a3330 t _ZTv0_n12_N8FFSourceD0Ev
003a32d0 t _ZTv0_n12_N8FFSourceD1Ev
007b2980 d _ZTV8FFSource
이 또한 내가 libstagefright.so에 _ZTIN7android11MediaSourceE를 찾을 수 없습니다. stagefright 라이브러리를 잘못 링크하는 대신 소스 코드를 작성하는 데 실수가 있다고 생각합니다. ffmpeg 소스를 컴파일하기 위해 안드로이드 독립 실행 형 툴체인을 사용합니다. 다음과 같은 구성 :
function config_lsf
{
# build flags
PREFIX=/home/cxm/work/Android/proj/dy-proj-careye/dy-proj-careye/jni/src/lib/android/ FLAGS="--prefix=$PREFIX"
FLAGS="$FLAGS --disable-static"
FLAGS="$FLAGS --disable-doc"
FLAGS="$FLAGS --disable-programs"
FLAGS="$FLAGS --disable-avdevice"
FLAGS="$FLAGS --disable-symver"
FLAGS="$FLAGS --enable-shared"
FLAGS="$FLAGS --cross-prefix=arm-linux-androideabi-"
FLAGS="$FLAGS --target-os=linux"
FLAGS="$FLAGS --arch=arm"
FLAGS="$FLAGS --enable-cross-compile"
FLAGS="$FLAGS --disable-decoder=h264"
FLAGS="$FLAGS --disable-decoder=h264_vdpau"
FLAGS="$FLAGS --enable-libstagefright-h264"
# cflags
CFLAGS="-Os -fpic -marm"
ANDROID_SOURCE=../mokesoures/
ANDROID_LIBS=../android-libs
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/frameworks/av/include"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/frameworks/native/include/"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/system/core/include"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/hardware/libhardware/include"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/frameworks/native/include/media/openmax/"
# ld flags
LDFLAGS="-Wl,--fix-cortex-a8"
LDFLAGS="$LDFLAGS -lstdc++ -lgnustl_shared -lstagefright -lutils -lbinder"
LDFLAGS="$LDFLAGS -L$ANDROID_LIBS"
LDFLAGS="$LDFLAGS -Wl,-rpath-link,$ANDROID_LIBS"
./configure.android $FLAGS --extra-cflags="$CFLAGS" \
--extra-ldflags="$LDFLAGS" \
sed -i 's/#define\ HAVE_POSIX_MEMALIGN\ 1/#define\ HAVE_POSIX_MEMALIGN\ 0/' ./config.h
make -j4 V=1 2>&1 | tee log
make install
}
이 주제에 대한 도움을주십시오. 매우 감사합니다.
'Android.mk' 파일을 공유 할 수 있습니까? – Ganesh
안드로이드 독립 실행 형 툴체인을 사용하여 ffmpeg를 컴파일하므로 Android.mk가 없습니다. 내 구성을 추가하기 위해이 주제를 다시 편집하기 만하면됩니다. 매우 감사합니다. – user3051473
'confg_lsf'에서 rtti를 어디에서 사용할 수 있는지 알 수 없습니다. 그리고'build_libstagefright' 스크립트는 명시 적으로'EXTRA_CXXFLAGS = "- Wno-multichar -fno-exceptions -fno-rtti"를 설정합니다. –